Java 的自动装箱有很多意想不到的结果,其中有些是广为人知的,这些奇怪的结果多数是 因为自动装箱对象的缓存导致的。The
int
600
06b
1o23
Ok
t9e
七
ynr
At1v
sh
les
took
65048
上ytes
导致这个结果有两个原因
首先,这是运行在64位的JWM虚拟机上: Array List是一个数组的引用。而JWM可使用
32位来引用最高达32G的堆内存。注意:这里你可以使用直接内存以及内存映射文件来使用
超过32GB存储,但如果你的堆小于32G,就可以使用
近经常有人问我在Java中使用堆外(off heap)内存的好处与用途何在。我想其他面临几样选择的人应该也会对这个答案感兴趣吧。
堆外内存其实并无特别之处。线程栈,应用程序代码,NIO缓存用的都是堆外内存。事实上在C或者C++中,你只能使用未托管内存,因为它们默认是没有托管堆(managed heap)的。在Java中使用托管内存或者“堆”内存是这门语言的一个特性。注意:Java并非这么做的语言。
new Object() vs 对象池 vs 堆外内存
new Object()