gpt4 book ai didi

java - 在 Kotlin 中,为什么我的每个 Float 占用 128 位而不是 16 位?

转载 作者:行者123 更新时间:2023-11-30 05:47:43 25 4
gpt4 key购买 nike

我正在尝试减少巨大的数据表(数组)在执行过程中占用的内存占用量。

为此,我使用 JCMD 打印直方图。

但是我在这里发现了一些有趣的事情:

 num     #instances         #bytes  class name
----------------------------------------------
1: 28409956 454559296 java.lang.Float
2: 3156662 227280584 [Ljava.lang.Integer;
3: 3156660 227279520 [Ljava.io.Serializable;
4: 526110 21044400 [[Ljava.io.Serializable;
5: 233936 17436808 [C
6: 241719 5801256 java.lang.String
7: 54517 3684696 [Ljava.util.HashMap$Node;
8: 93867 3003744 java.util.HashMap$Node
9: 74535 2981400 java.util.LinkedHashMap$Entry
10: 38269 2143064 java.util.LinkedHashMap
11: 190 2108240 [[[Ljava.io.Serializable;
12: 29416 1411968 java.util.HashMap
13: 5345 1400312 [B

您会看到我有 28409956 个 Float 实例,并且它占用的总 RAM 是 454559296 字节。如果它除以字节/实例,我将得到每个 Float 16 个字节......!这意味着每个Float占用128位!?

我错过了什么?

如何进一步减少这些 float (以及整数——我不能使用 Short)占用的内存?

或者更好的是,我如何强制 Kotlin 使用原语(我只知道如何在 IntArray、FloatArray 等数组中执行此操作)?

谢谢!

最佳答案

java.lang.Float 是一个包装类型,而不是原始类型。它确实需要更多内存。

这是 kotlin 代码及其等效的 java 代码:

    fun m1(f: Float) = f

fun m2(f: Float?) = f
   public final float m1(float f) {
return f;
}

@Nullable
public final Float m2(@Nullable Float f) {
return f;
}

关于java - 在 Kotlin 中,为什么我的每个 Float 占用 128 位而不是 16 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54562831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com