-XX:+ UseCompressedOops在Eclipse中不起作用

时间:2014-03-06 09:59:28

标签: java eclipse jvm

我的Java(64位)版本信息如下:

D:\workspace\s3-jerome\Voice\nlp>java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)

我的应用程序有很多实例,因此如果每个引用占用8个字节,它会占用大量内存。所以我想使用-XX:+ UseCompressedOops强制JVM压缩OOP。在eclipse中,我在运行配置的VM Arguments中添加了-XX:+ UseCompressedOops。

但是当我使用VisualVM 1.3.7配置我的程序时,我仍然得到每个引用的大小为8个字节的结果。以下类的实例大小仍为32!

public class AcLinkedList<E> {
    private E element;
    private AcLinkedList<E> next;

    public AcLinkedList(E element) {
       this.element = element;
       next = null;
    };

    .......
}

有人知道问题在哪里吗?

1 个答案:

答案 0 :(得分:2)

    默认情况下,在适当的时候在HotSpot 7上启用
  1. UseCompressedOops(堆大小不是太大)。
  2. JVisualVM不会考虑该设置并报告错误数据。
  3. 您可以通过运行一个简单的Java程序并使用runtime.freeMemory()runtime.totalMemory()来衡量堆占用率来说服自己。