垃圾收集是通过销毁未使用的对象来回收运行时未使用的内存的过程。
在C和C++等语言中,程序员负责创建和销毁对象。有时,程序员可能会忘记销毁无用的对象,而分配给它们的内存不会被释放。系统的已用内存不断增长,最终系统中没有内存可分配。此类应用程序存在“内存泄漏”问题。
在某个时间点之后,没有足够的内存可用于创建新对象,并且由于OutOfMemoryErrors,整个程序异常终止。
你可以使用C中的free()和C++中的delete()等方法来执行垃圾收集。在Java中,垃圾收集在程序的生存期内自动进行。这消除了取消分配内存的需要,因此避免了内存泄漏。
Java垃圾收集是Java程序执行自动内存管理的过程。Java程序编译成字节码,可以在Java虚拟机(JVM)上运行。
当Java程序在JVM上运行时,对象在堆上创建,堆是程序专用内存的一部分。
在Java应用程序的生命周期中,会创建和发布新对象。最终,不再需要某些对象。可以说,在任何时间点,堆内存都由两种类型的对象组成:
活着的——这些对象正在从其他地方使用和引用
死亡的——这些对象不再在任何地方使用或引用
垃圾收集器会找到这些未使用的对象并将其删除以释放内存。
垃圾收集的主要目标是通过销毁不包含引用的对象来释放堆内存。当没有对对象的引用时,将假定该对象已死亡且不再需要。因此,对象占用的内存可以回收。
垃圾收集在Java中是如何工作的?
Java垃圾收集是一个自动过程。程序员不需要显式标记要删除的对象。
垃圾收集实现位于JVM中。每个JVM都可以实现自己的垃圾收集版本。但是,它应该符合标准JVM规范,即使用堆内存中的对象,标记或标识无法访问的对象,并通过压缩销毁它们。
领取专属 10元无门槛券
私享最新 技术干货