垃圾回收机制;
在堆内存的有没有被引用的对象的时候就会被被触发回收;除了jvm自动回收之外(内存不足自动回收),也可通过 System.gc();
gc的自动回收机制是有前提的(正在被使用,或者随时被使用):
- 活跃的线程
- 正在使用的对象
- 静态的常量
- native 持有的jni 对象
所以我们经常遇到的内存泄漏其实就是短生命周期持有了长生命的对象,使其长久占用内存
为了更合理的使用内存Java 为我们提供了方便标记的对象:
- 强引用(Strong Reference) gc 不会回收
- 软引用(Soft Reference) gc 当内存不足时回收
- 弱引用(Weak Reference) gc 遍历遇到到的时候会回收
- 虚引用(Phantom Reference) 基本不使用
gc 算法(不同厂的虚拟机的算法不同)
标记算法:标记不未使用的对象然后删除
复制算法:把引用对象copyWrite 新的区域然后删除老的内存的无用对象;
了两者的区别是,标记操作频率高浪费cpu运算次数,复制是占用更大的内存,需要因地制宜,没有哪个更好,世界上没有完美的代码,完美的是使用他的人
网友评论