对于很多具有 C 语言基础的读者来说,在 Java 的众多突出特性之中,垃圾回收机制是首先要习惯的一个,因为在他们之前的习惯中,动态分配的对象所占的内存会在程序结束运行之前一直被占用,在明确释放之前不能分配给其他对象;而在 Java 中,当没有对象引用指向原先分配给某个对象的内存时,该内存便被垃圾回收机制视为垃圾,后者是 JVM 中的一个系统级线程,它会自动释放这样的内存块,垃圾被回收意味着程序不再需要的对象是「无用信息」,这些信息将被丢弃。当一个对象不再被引用时,JVM 就会回收它占用的内存,以便该内存能被后来的新对象使用。事实上,除了释放没用的对象之外,垃圾回收机制也会清除内存中的碎片。这些碎片是由于创建对象以及垃圾回收机制释放对象占用的内存空间造成的,碎片是分配给对象的内存块之间的空闲内存洞。执行碎片整理会将占用的堆内存移到堆的一端,JVM 则将整理出的内存分配给新的对象。
垃圾回收机制能自动释放内存空间,这样做可以减轻编程人员的负担,赋予 Java 虚拟机一些优点。它能提高编程效率。在没有垃圾回收机制的时候,可能要花许多时间来解决让人费解的存储器问题。在用 Java 语言编程时,靠垃圾回收机制可大大缩短时间。另外,它能保护程序的完整性,垃圾回收是 Java 语言安全性策略的一个重要部分。
垃圾回收的一个潜在缺点是,它的开销会影响程序性能。Java 虚拟机必须追踪所运行程序中有用的对象,而且最终释放没用的对象。这个过程需要占用处理器。另外,垃圾回收机制在算法上的不完备性,也会使得早先采用的某些垃圾回收不能保证 100%回收所有的废弃内存。当然,随着垃圾回收算法的不断改进以及软硬件运行效率的不断提升,这些问题都终将得到解决。
网友评论