我知道有人问过很多有关垃圾收集的问题,我已经遍历了这些问题,但是我仍然有一些疑问。
System.gc()
的需求是什么?在哪种情况下有用? mycar
对象,因此mycar
对象何时会永久生成? System.gc()
会降低应用程序性能并减慢我们的应用程序的速度吗?还是每当JVM完成垃圾回收时,它都会降低应用程序性能,并使我们的应用程序运行缓慢? 最佳答案
1)System.gc()
经常会工作。人们说不能强制垃圾回收的意思是,JVM比您了解更多有关内存状态的信息,如果JVM知道现在不是执行垃圾回收的好时机,那么您就不能强制垃圾回收。
2)我不相信用户生成的类将使它成为perm gen(虽然我可能是错的),但它存在来存储元信息,例如JVM始终需要的类和内部字符串(Java 7之前的版本)等。
3)静态变量是通过声明它们的class
进行引用的。类存储在永久代中,因此就其本质而言,始终会引用静态变量,因此也将它们包含在perm gen中是有意义的。
4)是的。
从评论中编辑:
垃圾回收永远不会永久进行。我对吗?
不完全的。垃圾收集很复杂! perm gen的可变性远不及其余堆高,那里的对象很有可能会引用较低空间中的其他对象。我认为垃圾回收和perm gen的行为取决于您使用的Java版本,我相信较新的版本也会垃圾收集perm gen,这很有意义,因为Java大量使用了代理对象。
关于java - 对Java中垃圾收集的怀疑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39159764/