java Java有手动垃圾收集吗?

时间:2017-05-10 18:43:13

标签: java garbage-collection garbage

好的,今天我正在接受采访,多年来我一直在编写Java代码。采访中说“Java垃圾收集是一个棘手的问题,我很少有朋友在努力搞清楚。你是怎么做的?”。她想欺骗我吗?或者我的整个生活是谎言,java没有自动垃圾收集?

因为据我所知java有自动垃圾收集,你可以调用System.gc()来收集一些资源,但这并不会强迫对象被破坏。它仍由JVM决定。

我错了吗?

2 个答案:

答案 0 :(得分:2)

仅仅因为垃圾收集是自动的并不意味着您可以完全忽略对象分配和清理以及GC如何工作的含义。

对于许多应用程序,特别是简单的应用程序,只需让GC执行它就可以了。尽管如此,即使这样你也必须确保你没有持续超过需要的参考文献。

随着您的应用程序变得越来越大,越来越复杂,特别是如果您使用任何多线程,GC带来的影响变得更加重要,了解代码中的所有内容如何工作以及GC的内容变得更加重要正在做。

答案 1 :(得分:1)

GC是自动的,是的。
但是与GC相关的一些实践可能很微妙,因此应该知道并理解它们以避免内存泄漏或不良行为。

例如:finalize()

  垃圾收集时,垃圾收集器会在对象上调用

  确定没有对该对象的更多引用

根据javadoc,但实际上它永远不会被调用。

其他示例:GC收集删除不再引用的对象,但您可能拥有一个“重”对象,该对象不再需要但仍被引用的对象引用。因此,沉重的物品不会被收集起来 使用监视工具作为JVisualVM有时会显示一些惊喜,我说:啊,这个大对象仍然在这里引用...

相关问题