一、GC主要针对什么区域

  1. 程序计数器、虚拟机栈、本地方法栈,3个部分随线程而生死。每个栈桢分配多少内存基本上是在类结构确定下来时就已确定,大体上可认为是 编译期可知。

  2. 而 堆 和 方法区 则不一定,如一个接口多个实现类需要内存不一样,一个方法多个分支需要分配内存也不一样;这些只有一实现运行中才能得知会创建那些对象,这部分内存的分配 和 回收 都是动态的。GC主要关注的也是这两个部分。

二、对象的“存活”:

  1、引用计数法:在各个对象中添加一个引用计数器。

    a. 实现简单,判定效率高;

    b. 但主流JVM没有用这个方法来判定;主要因为它很难解决对象间的相互循环引用问题。

  2、可达性分析算法:

    a. 主流的程序语言使用的方法。

    b. 通过GC Roots的对象作作为起点,从这些起点向下去搜索,所走过的路径叫做引用链,当一个对象到GC Roots没有任何引用链连接时,则证明此对象不可达。

    c. 可作为GC Roots的对象:

      1. 方法区中类静态属性、常量引用的对象;(Static修饰)

      2. 虚拟机栈、本地方法栈中引用的对象;

三、最终判定对象是否被回收:

  在可达性分析算法中不可达的对象,也并非就判定为“死亡”了;判定一个对象最终是否死亡,至少经历两次标记过程:

    1. 不可达的对象会被 第一次标记;

    2. 被第一次标记的对象进行 判断是否有必要执行finalize(),若对象覆盖了finalize()方法 且 finalize() 没有执行过,若都满足则执行finalize();

    3. 在finalize()中,若对象重新和引用链上的任一对象建立关联,则不会被第二次标记,它则不会被回收。

最新文章

  1. JsonProperties对模型返回的应用
  2. zw版·Halcon与delphi(兼谈opencv)
  3. 64位ubuntu下安装微博客户端的方法
  4. linux atom 不支持中文
  5. archlinux 安装mysql-workbench
  6. 洛古 P1373 小a和uim之大逃离
  7. SANSA 上上洛可可 贾伟作品 高山流水 香炉 香插香台香具 高端商务礼品 黑色【正品 价格 图片 折扣 评论】_尚品网ShangPin.com
  8. cenos 7 安装php7
  9. python subprocess重定向标准输出
  10. Linux的一些简单命令(二)
  11. cadence电源和地平面的处理
  12. 抓包工具Charles基本用法
  13. springboot第一个项目【mybatis】
  14. 高可用Hadoop平台-HBase集群搭建
  15. 使用R语言-为矩阵(表格)的行列命名
  16. sqlalchemy 学习-- 多表操作
  17. 【机器学习】粗糙集(Rough Set Approach)
  18. Codeforces 140D - New Year Contest
  19. java基础58 JavaScript的几种格式和变量的声明方式(网页知识)
  20. Luogu 4449 于神之怒加强版

热门文章

  1. polya burnside 专题
  2. GridView选中,编辑,取消,删除代码
  3. poj 3311 状压dp 最短路
  4. iOS7 毛玻璃效果
  5. Scrapy学习-2-xpath&css使用
  6. SGU112
  7. Codeforces 848B Rooter's Song(分类+模拟)
  8. [Bzoj3172][Tjoi2013]单词(fail树)
  9. 洛谷P1061 Jam的计数法
  10. OO第三单元作业小结