深入理解JVM-对象已死吗
在堆中存放着Java世界中几乎所有的对象的实例,垃圾收集器在对堆进行垃圾回收前,第一件事情就是要确定这些对象中还有那些是"存活"着,那些已经死去(即不能再被任何途径使用的对象)。
引用计数算法(Reference Counting)
定义:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1;当引用失效时,计数值就减1;任何时刻计数器为0的对象就是不可能再被使用的。
优点:实现简单,判断效率高
应用案例:微软公司的COM(Component Objcect Model)技术、使用ActionScript 3的FlashPlayer、Python语言和在游戏脚本领域被广泛应用的Squirrel中都使用了引用计数算法进行内存管理
但是,至少主流的Java虚拟机里面没有选用引用计数法来管理内存,最主要原因是它很难解决对象之间相互引用的问题。
public class ReferenceCounting { |
可达性分析算法(Reachability Analysis)
定义:通过一系列称为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为"引用链",当一个对象到GC Roots没有任何引用链相连时,则证明此对象不可用。
优点:解决引用计数法无法解决的对象相互调用问题
缺点:寻找GC Roots ->枚举根节点
应用案例:Java、C#、Lisp
在Java语言中,可作为GC Roots的对象包括下面几种:
虚拟机栈(栈帧中的本地变量表)中引用的对象
方法区中类静态属性引用的对象
方法区中常量引用的对象
本地方法栈(即Native方法)引用的对象
枚举根节点
项目中的GC Roots动辄上百兆,要逐个检查里面的引用,势必消耗很多时间
在分析阶段 ->要保证“一致性” 即在整个分析期间,整个执行系统看起来就像被冻住在某个时间点上(Stop The World),不可以出现分析过程中对象引用关系还在不断变化的情况,该点不满足的话分析结果准确性就无法得到保证。
OopMap:待续
安全点:待续
安全区域:待续
最新文章
- ASP.NET Core 中文文档 第三章 原理(5)错误处理
- f(n) hdu 2582
- WPF学习笔记1---初接触
- Eclipse的SVN插件下载
- Java web中为什么要用Service接口和DAO接口?
- 学习java第二天
- hdu 3123
- Codeforces Gym 100513D D. Data Center 前缀和 排序
- JS中for循环里面的闭包问题的原因及解决办法
- Spring与Hibernate整合中,使用OpenSessionInViewFilter后出现sessionFactory未注入问题
- CSS3+HTML5特效9 - 简单的时钟
- js 利用iframe和location.hash跨域解决的方法,java图片上传回调JS函数跨域
- [置顶] 使用sping AOP 操作日志管理
- IntelliJ IDEA 源值1.5已过时,将在未来所有版本中删除
- python3使用pymysql库连接MySQL的常用操作
- Entity Framework 5.0.0 Function Import 以及 ODP. NET Implicit REF CURSOR Binding使用简介
- javaScript事件系统详解
- 容易掉坑的地方The value for the useBean class attribute XXX is invalid
- Jenkins与Git持续集成&;&;Linux上远程部署Java项目
- msdn 中MethodBase.Invoke 方法 介绍中的坑
热门文章
- 北理工机器人队RM视觉组ubuntu必备软件安装指南
- Flask应用启动流程
- 了解MySQL
- 1 Ubuntu 破解帐户密码
- 结对编程作业(java实现)
- notepad++ 设置运行python脚本
- MySQL数据库(二)--库相关操作、表相关操作(1)、存储引擎、数据类型
- wordpress中文目录出现“有点尴尬诶!该页无法显示";
- 【Linux】文件拷贝-Linux当前目录所有文件移动到上一级目录(转)
- LeetCode 987. Vertical Order Traversal of a Binary Tree