关于GC
来源:互联网 发布:ubuntu sublime tar 编辑:程序博客网 时间:2024/06/04 19:40
《深入理解Java虚拟机》真的是看多少遍都不多,每次都有新体会
堆中存放着许多对象实例,许多是已经不用的(或者称死亡的),不清理它太占内存,垃圾回收器就是回收这些对象,释放对象所占的内存。
怎么判断对象已死呢?
2种方法:
1,引用计数法:(解决不了相互引用的问题,已经咋不用了)
2,根搜索算法
堆内存就像一颗大树,树根叫GC root,根搜索算法就是,以树根为起点开始搜索,搜索走过的路径叫引用链(相当于树枝),当一个对象没有被任何引用链相连,属于树外的东西,这个对象是不可达的;
树根是什么东西呢?
虚拟机栈引用的对象
方法区中类静态属性引用的对象
方法区中常量引用的对象
本地方法栈中JNI引用的对象
再说说引用(4类):
强引用:只要引用还在,无论如何不会被回收的引用
软引用:当内存不够时会被考虑回收
弱引用:只能存活到下次回收之前
虚引用:如同虚设,目的只是希望,在回收的时候,给系统一个通知
接下来开始回收:
找到了不可达对象后
1.筛选:筛选条件是,对象是否覆盖finalize()方法,并且之前没有被调用过,将筛选出来的对象放到F-Queue队列里,并稍后由虚拟机自动建立的一个低优先级的线程执行,
2.标记:若将死对象在finalize()方法中,将自己与引用链上的任何一个对象建立了关联,成功解救了自己,将它标记并移出这个将死集合
重点!对象只可能逃脱一次,当第二次发现它是个不可达对象的时候,以为他的finalize()方法已经被执行过一次了,finalize()方法不会再被执行!
自己的理解,有不对的欢迎指出!一起进步~
阅读全文
0 0
- 关于GC
- 关于gc
- 关于gc
- 关于GC
- 关于GC
- 关于GC
- 关于JVM GC
- 关于GC的体会
- 关于gc(转)
- 关于Ruby的GC
- 关于GC的类型
- 关于GC算法
- 关于DotNet的GC、Dispose
- 关于DotNet的GC、Dispose
- 关于DotNet的GC、Dispose
- 关于DotNet的GC、Dispose
- 关于DotNet的GC、Dispose
- 关于JVM的gc总结
- BAT大公司里怎样开发和部署web前端代码
- HTTP Keep-Alive模式
- 2.struts2基础
- bzoj 1565 植物大战僵尸
- SSM框架整合(IntellIj IDEA+Maven+Spring+SpringMVC+MyBatis)之Spring Framework
- 关于GC
- ShaderLab: Pass
- 权限认证
- 自定义Spring的Aop切面类拦截业务请求,并获取到请求的参数名和参数值
- ARKit是什么,现在在哪里呢?十二居是其demo吗?
- library cache lock和library cache pin
- lib和dll文件的区别和联系
- 架构师之路(十四)
- Android端与PC端同步绘画板(二)-适配手机和PC屏幕大小