一、概念
- 在64位平台的HotSpot中使用32位指针,内存使用会多出1.5倍左右,使用较大指针在主内存和缓存之间移动数据,占用较大宽带,同时GC也会承受较大压力
- 为了减少64位平台下内存的消耗,启用指针压缩功能
- 堆内存大于32G时,压缩指针会失效,会强制使用64位(即8字节)来对java对象寻址
以上内容摘自ignorewho的博客。这里提到了32G这个临界值,那么,我们的程序应该设置多大的堆内存,才能恰好避开指针压缩失效,而且最大限度的使用内存呢?下面我们开始实验探索。
二、代码
测试程序的思路很简单。我们既然要测试的其实就是不同内存下引用的大小,单个引用是很小的,可以通过量级来减少误差。那么约束条件也就有了:
- 足够多的引用(即足够多的对象)
- 统计前不要发生gc
程序设计如下:
import java.util.LinkedList;
import java.util.List;
public class Main {
public static void main(String[] args) throws</