我在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不在变量上运行垃圾回收,这不会很危险吗?
答案 0 :(得分:2)
链接到Github上的org.apache.coyote.Request.java。
他们不是说他们使JVM不运行垃圾收集。他们说的是这些字段不会生成JVM需要收集的垃圾。更好的术语可能是无垃圾的,而不是无垃圾的。或可回收的内存。实际上,如果您查看org.apache.tomcat.util.buf.MessageBytes.java,它们会使用术语“可回收”。
您可以在Java Development without GC上阅读有关此内容的更多讨论。警告,他们正试图向您出售一种商业产品,以检查您的内存使用情况并查找垃圾泄漏。
基本概念是,如果分配内存,则将其存储在分配池中。与其允许它超出范围并进行垃圾回收,不如将其保留在范围内并在下一次分配时重用。
在 Request.java 中,您可能想签出recycle
方法。这似乎是清除旧内存并准备对象以供重用的原因。