引用计数算法:
 
给对象添加一个引用计数器,每当有地方应用时,计数器值就加一,当引用失效时,程序计数器就减一,只要引用计数器的值为零时,就表示对象不可能再被引用,例如微软的 component object model技术就使用了这种用法。然而java中并没使用这种方式,因为这种方式很难解决对象中的循环引用问题。
例如对象A和对象B,其中对象A中有一个属性,叫instance,且A.instance=B,相反B中也有一个属性叫instance,且B.instance=A,这两个对象互相引用着对方,导致他们的引用计数器都不为零,然而这两个对象估计再也不可能被使用,而无法通知GC回收它们
 
 
根搜索算法:
java,c,lisp都使用根搜索算法判断对象是否存活?通过一系列名为GCroot 的对象作为起点,从这些节点开始向下搜索,搜素走过的路径为引用链,当一个对象到GCroot没有任何引用链的时候,证明这些对象就是不可用的,即可判断其为可回收的。
 
可以作为GCroot的对象包括:
1、虚拟 机栈( 帧栈中的本地变量表)中的引用对象
2、方法区中的类静态属性引用对象
3、方法区中的常量引用的对象
4、本地方法栈中的JNI即时一般的native应用对象
 
     1. Histogram可以列出内存中的对象,对象的个数以及大小。
     2. Dominator Tree可以列出那个线程,以及线程下面的那些对象占用的空间。
     3.Top consumers通过图形列出最大的object。
     4.Leak Suspects通过MA自动分析泄漏的原因。

java虚拟机判断对象是否存活的方式的更多相关文章

  1. 深入Java虚拟机--判断对象存活状态

    程序计数器,虚拟机栈和本地方法栈 首先我们先来看下垃圾回收中不会管理到的内存区域,在Java虚拟机的运行时数据区我们可以看到,程序计数器,虚拟机栈,本地方法栈这三个地方是比较特别的.这个三个部分的特点 ...

  2. Java虚拟机学习笔记(二)--- 判断对象是否存活

    Java堆中存放着所有的对象实例,垃圾收集器在堆进行回收之前,需要判断对象是“存活”还是“死亡”(即不可能再被任何途径引用的对象). 最常见的一种判断对象是否存活算法是引用计数算法, 给对象加一个引用 ...

  3. Java虚拟机判定对象存活算法

    1.引用计数算法 描述:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器值为0的对象就是不可能再被使用的. 特点:实现简单,判定效率高. ...

  4. Java虚拟机学习 - 对象访问

    对象访问会涉及到Java栈.Java堆.方法区这三个内存区域. 如下面这句代码: Object objectRef = new Object(); 假设这句代码出现在方法体中,"Object ...

  5. JAVA虚拟机之对象探秘

    上一章主要写到了JVM中运行时数据区域各个部分的功能及其作用.上一章说到了对象是分配在堆上面的,所以接下来我们写到对象在堆内存中是如何创建.如何布局.如何访问.1. 对象的创建 在java程序中对象的 ...

  6. JVM中判断对象是否存活的方法

    Java中几乎所有的对象实例都存放在堆中,在垃圾收集器对堆内存进行回收前,第一件事情就是要确定哪些对象还“存活”,哪些对象已经“死去”(即不可能再通过任何途径被使用). 引用计数算法 首先需要声明,至 ...

  7. Java中String对象两种赋值方式的区别

    本文修改于:https://www.zhihu.com/question/29884421/answer/113785601 前言:在java中,String有两种赋值方式,第一种是通过“字面量”赋值 ...

  8. Java 虚拟机的对象创建

    堆中存储的内容:在程序运行时,动态创建的对象. 创建对象的四种方式:new,clone(浅复制),反射,反序列化. 浅复制:只能复制当前对象本身,如果当前对象(A)引用了另外的对象(B),则引用对象( ...

  9. @Java虚拟机之对象访问

    建立对象是为了使用对象,我们的java程序需要通过栈上的reference数据来操作堆上的具体对象. 对象访问会涉及到Java栈.Java堆.方法区这三个内存区域. 如下面这句代码: Object o ...

随机推荐

  1. SELECT INTO 和 INSERT INTO区别

    (1).SELECT * INTO 新表名 FROM 旧表名 (2).INSERT INTO 新表名(列名1,列名2) SELECT * FROM 旧表名 第一句新表名不存在会自动创建, 第二句需创建 ...

  2. sae评测报告-2013最新版

    Author:MoonXue 上线时间:2009年9月,国内最早. 支持语言:PHP.JAVA.PYTHON 版本管理:SVN 可选数据库:MySQ.KVDB(非关系型) 特色服务:Web服务器配置工 ...

  3. Andriod SDK Manager 安装问题解决方法

    (一)AndriodSDKManager无法自动下载安装包 无法访问dl-ssl-google.com 只需在hosts文件中增加 203.208.49.162       dl-ssl.google ...

  4. 5.String

    一.古罗马皇帝凯撒在打仗时曾经使用过一种方法加密军事情报.请编写一个程序,使用上述算法加密或解密用户输入的英文字串. 设计思想:先提示用户进行的操作是加密还是解密,用户输入一个字符串,加密时将前23个 ...

  5. leetcode 日记 162. Find Peak Element java python

    根据题目可知,输入为:一个相邻元素不相等的数列,输出为:其中一个(上)峰值的序号.并且要求时间复杂度为logn 分析:由于题目要求时间复杂度为logn,因此不能进行全部遍历.又因为只需要找到其中的一个 ...

  6. ASP.NET后台调用前台JS函数的三种常见方法

    第一种:使用普通的添加控件中的Attributes属性进行调用 例如,像一般的普通的按钮:Button1.Attributes.Add("onclick","MyFun( ...

  7. 使用TypeScript开发

    学习过一段时间CoffeeScript,然后再学习TypeScript,最后还是决定使用TypeScript开发. CofeeScript主要是给js添加一些语法糖,编写代码要快捷的多,少量的代码开发 ...

  8. Java并发编程学习笔记(一)——线程安全性

    主要概念:线程安全性.原子性.原子变量.原子操作.竟态条件.复合操作.加锁机制.重入.活跃性与性能. 1.当多个线程访问某个状态变量并且其中有一个线程执行写入操作时,必须采用同步机制来协同这些线程对变 ...

  9. jQuery判断checkbox是否选中的3种方法

    方法一:if ($("#checkbox-id")get(0).checked) {    // do something} 方法二:if($('#checkbox-id').is ...

  10. PKU 1001解题代码

    本来以前也写过,但是由于许多细节问题,没有AC,今天修改了一下,终于AC了,以前没有AC的具体原因总结了了一下,必须任何数的0次方都等于1没有考虑,还有就是首0和末尾0以及小数点没有处理好,下面贴代码 ...