我在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不在变量上运行垃圾收集,这不是很危险吗?
发布于 2019-01-20 19:39:14
链接到Github上的org.apache.coyote.Request.java。
他们并不是说他们让JVM不运行垃圾收集。他们的意思是这些字段不会生成JVM需要收集的垃圾。一个更好的术语可能是无垃圾,而不是无GC。或可回收的内存。事实上,如果你看看org.apache.tomcat.util.buf.MessageBytes.java,他们使用术语可回收。
你可以在Java Development without GC上阅读更多关于这方面的讨论。警告,他们正试图向您出售一个商业产品,以检查您的内存使用情况,并寻找垃圾泄漏。
基本概念是,如果您分配内存,则将其存储在分配池中。而不是允许它超出作用域并被垃圾收集,而是将它保持在作用域中,并在下一次分配时重用它。
在Request.java中,您可能想要签出recycle方法。这似乎就是清除旧内存并为重用对象做准备的原因。
https://stackoverflow.com/questions/54275919
复制相似问题