我最近发现了
有人能否就如何处理Off-heap内存发表评论,例如何时使用它、是否有显著的好处以及最重要的是,为什么上述类似的主题基于不同的文章给出高度不同的结果?谢谢。
sun.misc.Unsafe
类,允许用户以类似于C语言的方式分配、释放和访问内存。我阅读了几篇博客来解决这个问题,例如:
- Java堆还是直接内存更快 - 测试结果声称堆更快
- Off-heap 内存 vs DirectByteBuffer vs Heap - Off-heap 看起来是最快的
- 用于时间序列数据的内存映射文件 -
MappedByteBuffer
比堆对象更快
sun.misc.Unsafe
(MappedByteBuffer
也是如此),因此它们也应该像文章1中描述的那样受到JNI调用的影响。此外,在文章2中,Off-heap内存访问类似于文章1中的访问方式,并给出完全相反的结果。有人能否就如何处理Off-heap内存发表评论,例如何时使用它、是否有显著的好处以及最重要的是,为什么上述类似的主题基于不同的文章给出高度不同的结果?谢谢。
Unsafe.putInt
(每个对象地址一次),那么这与在10,000字节对象上调用1000次Unsafe.putInt
并且每次使用不同的偏移量(即0,然后4、8等)有何不同?性能提升在哪里,因为在两种情况下我们都应该精确地穿越JNI界限1000次? - Bober02