64位JVM上对象引用的内存要求
对32位JVM上的对象(至少在热点上)的引用占用4个字节。64位JVM上对象引用的内存要求
64位热点JVM是否需要8个字节?或者是一些聪明的压缩呢? 如果没有,每个Object[]
将需要两倍的堆内存,我不知何故认为(希望,预期)并非如此。
更新/额外的问题:这是否真的重要,或者这是一个微不足道的增加,因为多数引用指向的是那些比几个字节大得多(而人们可能会认为这些对象又大多是由物体对其他对象的引用)?
在64位系统中,对象引用通常是8字节长。但是在Sun/Oracle最近的JVM中,您可以启用Compressed Oops,这样可以将参考大小减少到4个字节,但需要牺牲堆大小的限制。
我认为它对于java 7或> java6 u23是默认启用的,对吧? – 2013-08-04 09:35:30
“在Java SE 6u23和更高版本中默认支持并启用压缩的oops。”请参阅:[Java SE 6 Update 23发行说明](http://www.oracle.com/technetwork/java/javase/6u23releasenotes-191058.html) – snorbi 2013-09-06 18:00:16
但是:“在Java SE 7中,使用压缩的oops是默认值对于未指定-Xmx和-Xmx值小于32千兆字节的64位JVM进程,对于6u23发行版之前的JDK 6,请在java命令中使用-XX:+ UseCompressedOops标志来启用该功能。请参阅http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html#compressedOop – 2014-03-19 17:40:42
根据Java Platform Performance它是不严格限定的,但在64位的系统上典型地为8个字节:
基准的尺寸没有明确定义,但它通常是4个字节是一个上32位系统和64位系统上的8个字节。
你可能会觉得这有帮助 - http://stackoverflow.com/questions/1443677/what-impact-if-any-does-the-d64-swtich-have-on-sun-jvm-resident-memory-usage – 2010-09-17 07:18:58
而这一个:http://stackoverflow.com/questions/783662/java-32-bit-vs-64-bit-compatibility – Thilo 2010-09-17 07:34:27
只是为了给出一个数据点,当我们将webapp从32位切换到64位时,位JVM,堆使用率增加了约30%。你的里程可能会有所不同,但至少会给你一个球场。 – Cowan 2010-09-17 21:32:43