可以将JVM的方法区域垃圾收集?

时间:2012-07-14 02:00:44

标签: java jvm

所以我正在阅读JVM规范,并遇到了以下部分:

  

虽然方法区域在逻辑上是堆的一部分,但是简单的实现可能选择不垃圾收集或压缩它。

我不确定我是否会这样说,是不是说JVM中的文本段可能被垃圾收集?我该怎么理解?

2 个答案:

答案 0 :(得分:3)

  

我不确定我是否会这样说,是不是说JVM中的文本段可能被垃圾收集?

这通常不是指“文本”(单词)或Unix / Linux意义上的“文本段”。它指的是动态分配的内存区域,其中包含方法的字节码和/或JIT编译的本机代码。它说那些内存段可能被垃圾收集......取决于JVM实现,等等......但这不是JVM规范的要求。< / p>


在JVM实现中,Java字节码被编译为本机代码并提前链接到可执行映像 ,您将拥有“文本段”,而那些文本段将不会受垃圾收集。 (它们不能,因为它们是只读的,并且可能与同时执行的应用程序的其他实例共享。)

答案 1 :(得分:2)

当一个方法执行时,局部变量存在于堆栈中。

可以想象,JVM可能选择不收集局部变量并重新使用相同的内存来下次执行该方法。这样的选择只会在单线程运行时环境中得到理解。