为什么jvm使用4字节来保存64位环境中的引用?

use*_*434 0 java

我发现jvm使用4个字节来保存64位env中对象的引用点.

我不明白当应用程序有超过2 ^ 32个对象时如何处理?

谁可以形容这个案子?

ass*_*ias 5

32-bitJVM确实使用32位来引用,但64-bitJVM可以64-bits用于引用.

在耗尽JVM 上的引用数量的2 32限制之前32-bit,您将获得OutOfMemoryError(无论可用的RAM如何,您在JVM 2GB上的堆都不能多于堆32-bit).

在a上64-bit JVM,假设您有足够的内存来存储它们,则可以创建超过2 32个对象.

请注意,某些64位JVM可能会使用32位指针(热点上的CompressedOops标志)以实现性能目的.

  • 在3.5gbs以下,它将使用`压缩的oops`.即使使用64位JVM,这也会将参考大小压缩为4个字节. (2认同)