我是Java新手,对Java中的垃圾收集器感到困惑。它实际上是做什么的,什么时候生效。请描述Java中垃圾收集器的一些属性。
该垃圾收集器是运行在一个程序的Java虚拟机,其摆脱其未使用的Java应用程序了对象。它是自动内存管理的一种形式。
当典型的Java应用程序运行时,它正在创建新的对象,例如Strings和Files,但是在一段时间之后,这些对象将不再使用。例如,看下面的代码:
Strings
Files
for (File f : files) { String s = f.getName(); }
在上面的代码中,String s在for循环的每次迭代中创建。这意味着在每次迭代中,都会分配一点内存来创建一个String对象。
String s
for
String
回到代码,我们可以看到,一旦执行了一次迭代,在下一次迭代中,String就不再使用在上一次迭代中创建的对象,该对象现在被视为“垃圾”。
最终,我们将开始产生大量垃圾,并且内存将用于不再使用的对象。如果这种情况持续下去,最终Java虚拟机将耗尽空间以创建新对象。
那就是垃圾收集器介入的地方。
垃圾收集器将查找不再使用的对象,并摆脱它们,释放内存,以便其他新对象可以使用该内存。
在Java中,垃圾收集器负责内存管理,但是在其他语言(例如C)中,则需要使用诸如malloc和的free功能自行执行内存管理。内存管理是容易出错的事情之一,可能会导致所谓的内存泄漏 -在不再使用内存时无法回收内存的地方。
像垃圾回收这样的自动内存管理方案使程序员不必担心内存管理问题,因此他或她可以将更多精力放在开发他们需要开发的应用程序上。