我们都知道JVM为了更有效率地清除垃圾,把堆对象分为年轻代和老年代,这就可能存在年轻代和老年代的对象存在互相引用的现象。

年轻代指向老年代的引用我们可以不去关心,因为即使minor gc把年轻代对象清除掉,对这个老年代不会造成影响。我们要关心的是老年代指向年轻代的引用这种情况,所以在收集年轻代的时候需要处理这些引用。

以 OpenJDK 中的 Parallel GC 为例,收集器通过卡表(Card Table) 记录老年代指向新生代的引用,所以Minor GC通过扫描Card Table就可以很快的识别老年代引用新生代。

Card Table中是一个Byte,有八位,约定好每一位的含义就可区分哪个是引用新生代,哪个是并发标记阶段修改过的,这样有好处,就是降低了空间使用率。你不需要关心如何存储这些对象,只要始终关注卡表。为了效率,你可以根据内存地址将这些老年代对象组织起来(因为可以很方便获取到),花大力气将两者区分开来(按位操作去区分)。

了解过CMS应该会知道在并发标记这个过程中,垃圾回收线程和应用线程是同时在跑的,这导致有些对象会从新生代晋升到老年代、有些老年代的对象引用会被改变、有些对象会直接分配到老年代,而这些在内存中修改引用会触发写屏障脏卡,也就是这些受到影响的老年代对象所在的Card会被标记为脏卡(Dirty Card),而在JVM卡表中,每512Byte大小的内存页与卡表中一个Byte关联。因此不是脏内存页没有指向新生代的引用。这意味我们仅仅可以扫描脏内存页中的对象,不需要扫描整个老年代。

java 卡表_关于JVM的卡表和写屏障相关推荐

  1. java 广义表_数组和广义表

    数组和广义表 一.数组 1.定义 数组是数据结构的基本结构形式,它是一种顺序式的结构. 数组是存储同一类型数据的数据结构,使用数组时需要定义数组的大小和存储数据的数据类型. 2.分类 数组分为一维数组 ...

  2. java实现将A表数据转移到B表_解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表(merge into)...

    作用:merge into 解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表: 语法: MERGE INTO [your table-name] [rename your table h ...

  3. java卡 应用_一种实现多发行方的多应用Java卡的方法与流程

    本发明涉及智能卡 技术领域: :,尤其涉及一种实现多发行方的多应用Java卡的方法. 背景技术: ::在GlobalPlatform组织发布的卡片规范中,有且只有一个发行方,该发行方是卡片的拥有者并最 ...

  4. mysql设计积分兑换表_积分系统数据库表设计.docx

    积分系统数据库表设计 文件编号:JHDZ/SJ 密 级: 云上城积分功能数据库设计文档 项目名称:<云上城>项目代号:XXX版 本:V1.0编制单位:平台运营编制日期:2014-10-08 ...

  5. mysql 分库分表 建表_【分库分表】sharding-jdbc实践—分库分表入门

    一.准备工作 1.准备三个数据库:db0.db1.db2 2.每个数据库新建两个订单表:t_order_0.t_order_1 DROP TABLE IF EXISTS`t_order_x`;CREA ...

  6. MYSQL中的主表和父表_主表,从表,关联表,父表,子表

    一.前言 在数据库设计中,Hibernate,iBatis等ORM框架的使用中经常听说主键,外键,主表,从表,关联表,父表,子表之类的术语,弄懂它们之前的区别与联系对于数据库设计和ORM框架的学习使用 ...

  7. 外链式样式表_引入CSS样式表(书写位置)

    CSS初识 CSS(Cascading Style Sheets) 美化样式 CSS通常称为CSS样式表或层叠样式表(级联样式表),主要用于设置HTML页面中的文本内容(字体.大小.对齐方式等).图片 ...

  8. mysql 事实表 维度表_数据库的事实表与维度表

    维度表示你要对数据进行分析时所用的一个量,比如你要分析产品销售情况,你可以选择按类别来进行分析,或按区域来分析,这样的按照什么分析就构成一个维度.前面的实例就可以有两个维度:类型和区域.另外每个维度还 ...

  9. excel合并多个工作表_多个工作表或者多个工作簿的合并计算

    哈喽,everybody,作为一个与excel打交道长达六年的职业老手,我会整理汇总一些十分有利于提高工作效率的小tip.也当作是我为自己知识点做的些许总结吧. 今天我们就来聊聊如何快速合并多个工作表 ...

最新文章

  1. linux监控(陆续补充)
  2. 使用Markdown写作
  3. SQLite 删除表
  4. Unix网络协议分析
  5. 工具型产品+社区为何无法从根本上解决留存问题?
  6. mysql eager mode_MySQL Connector Net 6.6.5 Entity Framework 显式预加载 Eager Load Bug
  7. 为了追到小姐姐,我用 Python 制作了一个机器人
  8. CentOS安装scrot记
  9. 计算机软件专利申请期限,软件发明专利申请期限为何那么长
  10. Python中的文件和流
  11. 我的第一个博客正式注册
  12. html中实心黑点,Word 实心黑点怎么打?
  13. Rust之fluid用法(fltk ui 设计器)
  14. STM32——电容触摸按键
  15. 《等一朵花开》读书感悟
  16. jquery.printarea.js 局部打印去掉页眉页脚
  17. 白帽子讲Web安全(一)浏览器安全
  18. 官方指标监控神器SpringBootAdmin保姆级教程
  19. 【Echarts】渐变色桑基图
  20. unity3d俯视角简易移动控制脚本及其易错点小分享

热门文章

  1. cmd 如何在bat文件中调用另一个bat文件
  2. 互联网人才格局、35岁真的会失业吗、揭秘什么样的人是真正的it资深技术专家!
  3. O2O大浪下 媒介O2O大鳄浮水
  4. 安装完 Windows7 之后所需的瘦身清理工作
  5. iOS手势全埋点:轻拍手势、长按手势、捏合手势、旋转手势、轻扫手势、平移手势、屏幕边缘平移手势
  6. Python3基础 自学笔记 控制结构
  7. 苹果Apple Appstore itunes快速排名算法规则教程知识
  8. xp系统扫描仪服务器,XP系统用复印机扫描的操作方法
  9. WebRTC基础实践 - 1. WebRTC简介
  10. 谈asch系统的共识机制与容错性