新运算符堆中的内部内存分配

时间:2016-04-01 07:07:52

标签: java

new运算符如何为 Java 中的对象分配内存?有人问我们写的会发生什么 测试t =新测试()。 new运算符如何在堆内存中内部分配内存?可能会有一些步骤。

1 个答案:

答案 0 :(得分:0)

该实现依赖于JVM。有许多可能的结果。

  • 如果不需要该物体,则可能会被消除,即没有任何反应。
  • 如果Escape Analysis检测到对象没有转义方法,它可以将它放在堆栈上。当帧启动并且所需的所有内存一次保留(不是每个对象)时,会发生此分配
  • 如果启用了TLAB(线程本地分配缓冲区)(默认情况下),则每个线程都有一个本地缓冲区,可以从中分配对象。这允许并发内存分配。它有一个指针缓冲区中的下一个空闲空间,当添加一个新对象时,它会获取指针并添加对象的大小。它也会将对象归零(并设置对象标题)。新的缓冲区是从Eden空间分配的(G1除外,它有一个空的内存块)
  • 如果您没有TLAB,则直接从伊甸园空间进行分配。