这个问题已经在这里有一个答案:
我想,以减少内存占用量巨大的数据表(阵列)的执行过程中占用。
对于我使用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个实例,它需要的总内存为454559296个字节。如果划分字节/情况下,我会得到每浮子16个字节...!这意味着每个浮点占据128位!?
我在想什么?
我怎样才能进一步降低这些花车内存(及整数 - 我不能使用短)走?
或者更好的,我怎么能强迫科特林使用原语(我只发现了如何与IntArray,FloatArray等做它在阵列中)?
谢谢!
java.lang.Float中是一个包装型不原语。它确实需要更多的内存。
这里是科特林代码及其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;
}