Java——垃圾回收机制

显式回收垃圾
需要程序员负责回收已经分配的内存。
缺点:

  • 程序忘记及时回收无用的内存,从而导致内存泄露,降低系统的性能;
  • 程序错误地回收程序核心类库的内存,从而导致系统崩溃。

什么是垃圾回收机制?

在Java中不需要程序员直接控制回收,Java程序的内存分配和回收都是有JRE在后台自动进行的,JRE负责回收那些不再使用的内存,这种机制称为:垃圾回收。通常JRE会提供一个后台线程来监测和控制,一般都是在CPU空闲或内存不足时自动进行回收,而程序员无法精确控制垃圾回收的时间和顺序等。
Java的堆内存是一个运行时数据区,用以保存类的实例,Java虚拟机的堆内存中存储着正在运行的应用程序所建立的对象,这些程序不需要程序通过代码来显式释放。一般来说,堆内存的回收由垃圾回收来负责。所有的JVM实现都有一个由垃圾回收管理的堆内存。垃圾回收是一种动态存储管理技术,它自动释放不再被程序引用的对象,按照特定的垃圾回收算法来实现内存资源的自动回收功能。

在Java中当没有引用变量指向原先分配给某个对象的内存时,该内存便成为了垃圾。
事实上,除了释放没用的内存外,垃圾回收也可以清楚内存记录碎片。由于创建对象和垃圾回收释放丢弃对象所占用的内存空间,内存会出现碎片。碎片是分配给对象的内存块之间的空闲区域,碎片整理将所占用的堆内存移到堆的一端,JVM将整理出的内存分配给新的对象。

垃圾回收的优点

  • 垃圾回收机制可以很好地提高编程效率。在没有垃圾回收时,可能要花许多时间来解决一个难懂的储存器问题。
  • 垃圾回收机制保护程序的完整性,垃圾回收是Java语言安全性策略的一个重要部分。

缺点

  • Java徐弩及必须跟踪程序总有用的对象,才可以确定对哪些不再使用的程序进行回收,这个处理过程需要花费处理器的时间,所以它会开销影响程序性能;
  • 算法具有不完备性,不能百分百确定收集到所有废弃的内存。

垃圾回收机制的特点

  • 工作目标是回收无用对象的内存空间;
  • 为了提高回收速度,可以将该对象的引用变量设置为null。
  • 垃圾回收具有不可预知性。由于JVM采用的垃圾回收机制不同,采用的算法不同可能会导致垃圾回收的时机会不同。
  • 垃圾回收的精确性包含两个方面:垃圾回收机制能够精确地标记活着的对象;二是垃圾回收器能够精确地定位对象之间的引用关系。
  • 现在的JVM中的垃圾回收机制有多样性。

编写Java程序时一个基本规则:对于不再需要的对象,不要引用它们。不然会造成内存越来越少的问题,影响性能。

猜你喜欢

转载自blog.csdn.net/mashaokang1314/article/details/82951646