java-JVM中对象判活
来源:互联网 发布:网络视频自己组装枪支 编辑:程序博客网 时间:2024/06/01 10:42
我们对java有了解的都知道,当一个对象没有引用指向它时,虚拟机会在GC的时候会回收掉分配的内存,其实这样说是不准确的,下面我就详细的说一下,虚拟机是怎么样判断一个对象还是活着的,即对象判活问题,当我们遇到这样一个问题,这样判断一个对象上的引用的,我相信大家很快都会想到引用计数法,那么什么是引用计数法呢?
引用计数法
通过一个数值来记录对象上被引用的数量,当数值为0时,我们认为这个对象的内存空间是可以回收的,这种方法会遇到一种很难解决的情况,就是循环引用,即A对象有B的引用,而B有A的引用,其实A已经没有用了,因为B有对他的引用,所以不能回收,而B也是这样的情况,这样就无法回收AB 的内存。这是这种方法的弊端,而实际上JVM不是使用的这种方法。
可达性判别法
JVM设计者根据类加载的特点,提出了可达性判别法,那么什么是可达的,而什么是不可达的,也提出了标准。认为对象之间引用是一个树形结构,规定出几种可以做root的对象,从这些对象遍历,如果不存在路径到达这个对象,我们认为这个对象是不可达的,也就是内存可以回收。但也不是一定会立即回收掉,只是把它放在回收队列里,等待GC,这时候如果有一个引用指向它,那么还是可以回到可达性队列的。
在java语言中,可作为GC roots的对象包括下面几种:
1.虚拟机栈中引用的对象
2.方法区中类静态属性引用的对象
3.方法区常量引用的对象
4.本地方法栈中JNI引用的对象
0 0
- java-JVM中对象判活
- JAVA对象判空
- java 对象访问在jvm中分布
- JVM中Java对象内存模型
- JVM中Java对象的创建
- JVM中Java对象的创建
- JAVA对象在JVM中内存分配
- jvm-java中对象的访问
- JVM中Java对象的创建
- Java对象判等,重写equals方法
- JAVA中值、对象的判等
- Java中常用的判空操作
- Java中判等陷阱的理解
- java中对List<~>进行判空
- Java jvm对象解析
- java中new一个对象jvm做了哪些事情
- JavaScript对象判空
- js 对象判空
- 排序算法汇总
- iOS认知,学好iOS基本要学习什么
- CCS5安装及配置注意事项
- SQL CREATE INDEX 语句
- 工作中常常使用的几种加密以及签名的方式:DES加密
- java-JVM中对象判活
- 自定义View应该怎么定义
- RxJava操作符系列一
- 【iOS开发】使用Xcode8 添加Launch Image(启动图片)之001
- Java 动态代理作用是什么 ==AOP?
- SQL 撤销索引、表以及数据库
- Mybatis分页拦截器
- 开灯问题
- js对象中什么是可枚举性(enumerable)?