续前节,前面总结了Java内存运行时区域划分的各个部分,分别:JVM虚拟机栈、本地方法栈(JDK Native方法执行所需)、程序计数器、堆内存、方法区、方法区常量池。其中JVM 虚拟机栈、本地方法栈、程序计数器3个区域会随线程而生,随线程而死。栈帧中的操作随着方法区的进入和推出进行相关的入栈和出栈操作。每个栈帧的大小随着方法结构而确定下来的。

1、对象生死确定

堆内存存放着一个程序中所需的所有实例对象。垃圾回收机制主要针对堆内存进行回收。在执行回收之前首先要确定对象是否还在被引用。

普遍判断对象是否存活的方法是通过引用计数法,指的是:当对象被引用,程序计数器+1;释放-1;当为0时证明对象未被引用。可回收。但是Java中并未采用次方法。

Java采用可达性分析法 来确认对象是否存活。

所谓可达性分析法是指的,通过一些列称之为“GC Roots” 的对象作为起点;从此起点向下搜索,所走过的路径称之为引用链,当一个对象到 GC Roots 没有任何引用链相连接,代表此对象不可达。

如图所示:

Java 可以作为GC Roots 的对象包括:

虚拟机栈(帧栈中的本地变量表)中的引用对象。

方法区中类静态属性引用的对象

方法区中常量引用的对象

本地方法栈中JNI (即一般说的 Native 方法) 的引用对象

2、Java 引用

java中把内存中对象的引用分成了四个等级,在不同程度下进行垃圾的回收工作。按照回收优先级顺序分为:虚引用 -> 弱引用 -> 软引用 -> 强引用。如下图

java可达性_Java 垃圾回收 - 可达性分析算法相关推荐

  1. java知识点8——垃圾回收原理和算法、通用的分代垃圾回收机制、 JVM调优和Full GC、开发中容易造成内存泄露的操作

    垃圾回收原理和算法 内存管理 Java的内存管理很大程度指的就是对象的管理,其中包括对象空间的分配和释放. 对象空间的分配:使用new关键字创建对象即可 对象空间的释放:将对象赋值null即可 垃圾回 ...

  2. java简述垃圾回收原理及算法_Java垃圾回收原理和算法

    ·内存管理 Java的内存管理很大程度指的就是对象的管理,其中包括对象空间的分配和释放. 对象空间的分配:使用new关键字创建对象即可 对象空间的释放:将对象赋值null即可.垃圾回收器将负责回收所有 ...

  3. 第八章软件构造的性能——构造性能的度量、原则与方法(java中的垃圾回收机制及算法)

    这节内容真的是多到炸裂,而且全都是概念,不过很挺有用的,学完这节会对内存管理有一个比较深的理解和认识,就是--这也太多了--嘤嘤嘤T_T 1.性能度量(performance metrics) 第一点 ...

  4. 物品回收平台java代码_java垃圾回收

    jvm何时回收一个java对象所占的内存? 当java对象失去引用时,JVM垃圾回收机制会清除他们,回收所占内存空间. java有没有内存泄漏? 无用的内存没有被回收就是内存泄漏. C++内存泄漏:内 ...

  5. java可达性_java垃圾回收机制--可达性算法

    先说一些题外话,Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区,这些区分为线程私有区和线程共享区 1.线程私有区 a.程序计数器 记录正在执行的虚拟机字节码指令地址 ...

  6. java垃圾回收机制标记_Java的垃圾回收机制-垃圾收集算法(一)

    当需要排查各种内存溢出,内存泄漏等问题时,当垃圾收集成为系统达到更高并发的瓶颈时,我们有必要深入GC的原理. image.png 常见垃圾回收算法 在查看垃圾回收具体过程的时候,运行程序加上: -XX ...

  7. 6种java垃圾回收算法_Java垃圾回收算法

    主要根据以下3篇博客做的整理 http://blog.csdn.net/zsuguangh/article/details/6429592 http://www.cnblogs.com/ywl925/ ...

  8. java垃圾回收理解与算法

    垃圾回收机制概述 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理.由于有个垃圾回收机制,Ja ...

  9. java垃圾回收根对象_Java垃圾回收怎么理解?

    展开全部 Java的堆是一个运行时数据区,类的实例(对象)从中62616964757a686964616fe58685e5aeb931333339653664分配空间.Java虚拟机(JVM)的堆中储 ...

  10. JAVA确保垃圾回收后结束程序_Java垃圾回收机制(转)

    1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象:而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾.JVM的 ...

最新文章

  1. 从0实现一个tiny-redux
  2. boost::leaf::try_handle_some用法的测试程序
  3. Python自动化运维工具-Fabric部署及使用总结
  4. 帕斯卡命名法 pascal命名法
  5. (44)FPGA面试技能提升篇(VCS仿真工具)
  6. JavaScript 字符串属性和方法
  7. 中国救生浮标市场趋势报告、技术动态创新及市场预测
  8. 03 入门 - 安装MVC 5和创建应用程序
  9. zynqpl端时钟_已解决: Zynq7020 PL侧时钟是50M,实测是49.5M - Community Forums
  10. a中嵌套div的问题
  11. mssql 获取自增列起始及增量
  12. 日志分析工具 GoAccess v1.3 发布,支持简体中文和安装使用
  13. 服务器搭建微信编辑器,V5微信编辑器本地安装试卷.doc
  14. 中国各省所处的经纬度范围
  15. iOS 模拟器调试web/h5代码
  16. 四川途志:短视频营销公司做视频广告投放有技巧吗?
  17. java 5分钟_java计算下一个整5分钟时间点
  18. 济南出台5G专项规划,十年布局5G基站18万处
  19. IOS开发百度地图API
  20. 机器学习中的方差与偏差

热门文章

  1. 今晚20:00整!中国首个量子计算操作系统即将发布
  2. 超好用的自动化测试工具——Python脚本
  3. R 语言数据分析/数据挖掘常用包
  4. VS2019安装QT5.14.1全过程
  5. HTML转PDF字体的坑,搞了半天
  6. 安装wget 、 wget命令
  7. TonglinkQ8基于linux 7.5的安装
  8. Java初级程序员面试总结(五)--Redis篇
  9. 计算机主板电源接口8pin,菜鸟老鸟都要知道 电源接口图文全教程
  10. OA业务系统数据集成(1)-OACRM数据集成业务场景及技术方案概述