Java成员变量不依赖GC意味着什么

时间:2019-01-20 11:20:23

标签: java

我在org.apache.coyote.Request.java中的apache tomcat源代码中偶然发现了如下注释:

    This is a low-level, efficient representation of a server request. Most
 * fields are GC-free, expensive operations are delayed until the  user code
 * needs the information.

无GC意味着什么?您如何使JVM不在变量上运行垃圾回收,这不会很危险吗?

1 个答案:

答案 0 :(得分:2)

链接到Github上的org.apache.coyote.Request.java

他们不是说他们使JVM不运行垃圾收集。他们说的是这些字段不会生成JVM需要收集的垃圾。更好的术语可能是无垃圾的,而不是无垃圾的。或可回收的内存。实际上,如果您查看org.apache.tomcat.util.buf.MessageBytes.java,它们会使用术语“可回收”。

您可以在Java Development without GC上阅读有关此内容的更多讨论。警告,他们正试图向您出售一种商业产品,以检查您的内存使用情况并查找垃圾泄漏。

基本概念是,如果分配内存,则将其存储在分配池中。与其允许它超出范围并进行垃圾回收,不如将其保留在范围内并在下一次分配时重用。

Request.java 中,您可能想签出recycle方法。这似乎是清除旧内存并准备对象以供重用的原因。