java的内存回收(2)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/strivenoend/article/details/83795073

1垃圾回收机制只负责回收堆内存中除了字符串常量池之外的对象,垃圾回收机制是后台线程,因此执行时间不固定,只有在虚拟机空闲时调度器才有可能调度垃圾回收后台线程,使其占用处理机,因此垃圾回收后台线程的线程执行体不一定什么时候执行

2可达状态----可恢复状态(finalize()之后有引用再次指向)-------不可达状态(finalize()之后没有引用再次指向)

3强制系统垃圾回收的方式

System.gc();

Runntime.getRuntime().gc();

这两种方法只是通知系统进行了垃圾回收,但系统是否进行垃圾回收依然不确定

4在垃圾回收机制真正的回收某一个对象之前,总会先调用该对象的finalize()方法,该方法可能时该对象重新被引用指向,从而不会被回收.

在垃圾回收机制回收某个对象所占用的内存之前,通常要求程序调用适当的方法来清理资源,在没有明确指定清理资源的情况下,java提供了默认机制来清理该对象的资源,这个机制就是finalize方法,这个方法是Object类里的实例方法,我们可以重写finalize方法,使得对象被重新引用/明确的去清理对象占用的资源

protected void finalize() throws Throwable

5java.lang.ref包中提供了引用类。代表系统堆对象的3中引用方式:软引用/虚引用/弱引用

强引用:java程序最常见的引用方式

软引用:一个对象被软引用引用时,有可能被垃圾回收机制回收,用于内存敏感的程序中

弱引用:一个对象被弱引用引用时,一定被垃圾回收机制回收,

猜你喜欢

转载自blog.csdn.net/strivenoend/article/details/83795073