Java 垃圾回收的问题,请教

在看thinking in java 时, 看到这样一句话:“java 里的对象并非总是被垃圾回收的”。感觉不好理解,不是有垃圾回收机制吗,这个机制会自动的运行,那为什么要说垃圾对象不一定会被回收?

第1个回答  2009-02-20
嗯是的,但也不用担心会存在内存的溢出问题。
因为不会收的对象一般上来说都是为了提高速度建立的机制,或者是提供给其他容器来管理的对象。
比如String的对象建立时,会自动的生成一个String对象池对象,就不是由垃圾回收器回收的对象。它是为了提高重复字符串创建的速度而建立的,有点像缓存。是由java虚拟机的其他机制管理的。
Servlet似乎是由容器管理的对象,由tomcat之类的容器来管理创建和销毁。应该也算一种。
除了这些,System类中有个gc方法,是调用垃圾回收器的。Object中的finalize方法则是在被回收之前调用的方法。
垃圾回收机制已经很完善了,所以不用担心会因为java本身的问题导致频繁崩溃,一般来说如果内存溢出都要在自己的程序中找问题,看看是不是有些引用没有被释放,导致垃圾回收收集不了。尤其是在使用容器时特别需要注意。比如List,Map,Set等
相似回答