相关疑难解决方法(0)

直接分配给Old Generation的巨大对象的大小

最近我一直在阅读Java中不同代的对象分配.大多数时候,新对象在Eden(Young Generation的一部分)中分配,然后如果满足以下任何条件,它们将被提升为Old Generation.

(1)物体的年龄达到了终点阈值
(2)当从伊甸园(或)另一个幸存者空间(从)复制物体时,幸存者空间(到)已满

但也有一个特殊情况,即在旧世代中直接分配对象,而不是从年轻一代中提升.当我们尝试创建的对象很大(可能是几MB的数量级)时会发生这种情况.


有没有办法知道巨大/巨大物体的大小/限制?我知道G1垃圾收集器的巨大对象标准.我只想知道Java 6之前或之中的大小限制.

谢谢你的时间 :)

java garbage-collection jvm memory-management objectsize

21
推荐指数
3
解决办法
7287
查看次数

为什么我无法创建大尺寸的数组?

为什么不可能创建一个max int size的数组?

int i = 2147483647;
int[] array = new int[i];
Run Code Online (Sandbox Code Playgroud)

我找到了这个解释:

通过32位整数访问Java数组,最大理论数组大小为2147483647个元素.

但是你可以看到我的代码不起作用.创建一个大小的数组也是不可能的

new int[Integer.MAX_VALUE - 5];
Run Code Online (Sandbox Code Playgroud)

技术细节

  • 64位HotSpot JVM
  • OSX 10.10.4

PS

为什么-5呢?

java jvm jvm-hotspot

6
推荐指数
1
解决办法
2万
查看次数