3

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

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

我不确定我明白了,这是说 JVM 中的文本段可以被垃圾收集吗?我应该怎么理解?

4

2 回答 2

3

我不确定我明白了,这是说 JVM 中的文本段可以被垃圾收集吗?

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


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

于 2012-07-14T06:15:49.907 回答
2

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

可以想象,JVM 可能会选择不收集局部变量,而将相同的内存重新用于方法的下一次执行。这样的选择只有在单线程运行时环境中才是明智的。

于 2012-07-14T02:04:05.203 回答