Java垃圾回收机制 入门

1、Jvm的垃圾回收机制是否回收一个对象的标准在于是否还有引用变量引用该对象,只要有引用变量引用该对象,垃圾回收机制就不回去回收它。

2、当java对象被创建后,垃圾回收机制就会监控每个对象的运行状态:

对象在堆内存中的状态:

①、可达状态:每个对象创建后,有一个以上的引用变量去引用它,它就处于可达状态。

②、可恢复状态:如果程序中某个对象不再有任何引用变量去引用它,它将进入可恢复状态,在这种状态下,垃圾回收机制在回收该对象所占用的内存是,系统会先调用可恢复状态的对象的finalize()方法进行资源管理,如果系统调用finalize()方法重新让一个及以上的引用变量引用这个对象,则此时这个对象就变为了可达状态。否则内存就会被回收。让一个对象设为null,时,堆内存不会立即释放,当调用System.gc()时,会执行上面的过程。

③、不可达状态。对象的关联被切断,且系统调用对象的finalize()方法依然没有使对象变成可达状态,这个对象将永远失去引用。

3、引用分类:强引用、软引用、弱引用、虚引用。

①、强引用:程序创建一个对象,把这个对象付给引用变量就是强引用。强引用处于可达状态,它不会被垃圾回收机制回收,即使有些java对象以后永远都不会用到,jvm也不会回收被强引用的java对象。有可能造成内存泄露。

②、软引用。当一个对象只具有软引用时,它有可能被垃圾回收机制回收,当系统内存足够时,它不会被系统回收,程序也可以使用该对象,当系统内存不足时,系统将会回收该对象占用的内存。

③、弱引用。弱引用所引用的对象生存周期更短,当垃圾回收机制运行时,不管系统内存是否足够,总会回收该对象所占用的内存。

4、Java的内存泄露:

何为内存泄露?当程序运行过程中,会不断地分配内存空间,那些不再使用的内存空间应立即被回收,从而保证系统可以再次使用这些内存,如果存在无用的内存没有被回收,那么就会造成内存泄露。Java中的一些处于可达状态的对象,程序可能永远都不会访问他们,他们所占的内存也不会被回收。

你可能感兴趣的:(Java垃圾回收机制 入门)