java 卡表_关于JVM的卡表和写屏障
我们都知道JVM为了更有效率地清除垃圾,把堆对象分为年轻代和老年代,这就可能存在年轻代和老年代的对象存在互相引用的现象。
年轻代指向老年代的引用我们可以不去关心,因为即使minor gc把年轻代对象清除掉,对这个老年代不会造成影响。我们要关心的是老年代指向年轻代的引用这种情况,所以在收集年轻代的时候需要处理这些引用。
以 OpenJDK 中的 Parallel GC 为例,收集器通过卡表(Card Table) 记录老年代指向新生代的引用,所以Minor GC通过扫描Card Table就可以很快的识别老年代引用新生代。
Card Table中是一个Byte,有八位,约定好每一位的含义就可区分哪个是引用新生代,哪个是并发标记阶段修改过的,这样有好处,就是降低了空间使用率。你不需要关心如何存储这些对象,只要始终关注卡表。为了效率,你可以根据内存地址将这些老年代对象组织起来(因为可以很方便获取到),花大力气将两者区分开来(按位操作去区分)。
了解过CMS应该会知道在并发标记这个过程中,垃圾回收线程和应用线程是同时在跑的,这导致有些对象会从新生代晋升到老年代、有些老年代的对象引用会被改变、有些对象会直接分配到老年代,而这些在内存中修改引用会触发写屏障脏卡,也就是这些受到影响的老年代对象所在的Card会被标记为脏卡(Dirty Card),而在JVM卡表中,每512Byte大小的内存页与卡表中一个Byte关联。因此不是脏内存页没有指向新生代的引用。这意味我们仅仅可以扫描脏内存页中的对象,不需要扫描整个老年代。
java 卡表_关于JVM的卡表和写屏障相关推荐
- java 广义表_数组和广义表
数组和广义表 一.数组 1.定义 数组是数据结构的基本结构形式,它是一种顺序式的结构. 数组是存储同一类型数据的数据结构,使用数组时需要定义数组的大小和存储数据的数据类型. 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 ...
- java卡 应用_一种实现多发行方的多应用Java卡的方法与流程
本发明涉及智能卡 技术领域: :,尤其涉及一种实现多发行方的多应用Java卡的方法. 背景技术: ::在GlobalPlatform组织发布的卡片规范中,有且只有一个发行方,该发行方是卡片的拥有者并最 ...
- mysql设计积分兑换表_积分系统数据库表设计.docx
积分系统数据库表设计 文件编号:JHDZ/SJ 密 级: 云上城积分功能数据库设计文档 项目名称:<云上城>项目代号:XXX版 本:V1.0编制单位:平台运营编制日期:2014-10-08 ...
- mysql 分库分表 建表_【分库分表】sharding-jdbc实践—分库分表入门
一.准备工作 1.准备三个数据库:db0.db1.db2 2.每个数据库新建两个订单表:t_order_0.t_order_1 DROP TABLE IF EXISTS`t_order_x`;CREA ...
- MYSQL中的主表和父表_主表,从表,关联表,父表,子表
一.前言 在数据库设计中,Hibernate,iBatis等ORM框架的使用中经常听说主键,外键,主表,从表,关联表,父表,子表之类的术语,弄懂它们之前的区别与联系对于数据库设计和ORM框架的学习使用 ...
- 外链式样式表_引入CSS样式表(书写位置)
CSS初识 CSS(Cascading Style Sheets) 美化样式 CSS通常称为CSS样式表或层叠样式表(级联样式表),主要用于设置HTML页面中的文本内容(字体.大小.对齐方式等).图片 ...
- mysql 事实表 维度表_数据库的事实表与维度表
维度表示你要对数据进行分析时所用的一个量,比如你要分析产品销售情况,你可以选择按类别来进行分析,或按区域来分析,这样的按照什么分析就构成一个维度.前面的实例就可以有两个维度:类型和区域.另外每个维度还 ...
- excel合并多个工作表_多个工作表或者多个工作簿的合并计算
哈喽,everybody,作为一个与excel打交道长达六年的职业老手,我会整理汇总一些十分有利于提高工作效率的小tip.也当作是我为自己知识点做的些许总结吧. 今天我们就来聊聊如何快速合并多个工作表 ...
最新文章
- linux监控(陆续补充)
- 使用Markdown写作
- SQLite 删除表
- Unix网络协议分析
- 工具型产品+社区为何无法从根本上解决留存问题?
- mysql eager mode_MySQL Connector Net 6.6.5 Entity Framework 显式预加载 Eager Load Bug
- 为了追到小姐姐,我用 Python 制作了一个机器人
- CentOS安装scrot记
- 计算机软件专利申请期限,软件发明专利申请期限为何那么长
- Python中的文件和流
- 我的第一个博客正式注册
- html中实心黑点,Word 实心黑点怎么打?
- Rust之fluid用法(fltk ui 设计器)
- STM32——电容触摸按键
- 《等一朵花开》读书感悟
- jquery.printarea.js 局部打印去掉页眉页脚
- 白帽子讲Web安全(一)浏览器安全
- 官方指标监控神器SpringBootAdmin保姆级教程
- 【Echarts】渐变色桑基图
- unity3d俯视角简易移动控制脚本及其易错点小分享
热门文章
- cmd 如何在bat文件中调用另一个bat文件
- 互联网人才格局、35岁真的会失业吗、揭秘什么样的人是真正的it资深技术专家!
- O2O大浪下 媒介O2O大鳄浮水
- 安装完 Windows7 之后所需的瘦身清理工作
- iOS手势全埋点:轻拍手势、长按手势、捏合手势、旋转手势、轻扫手势、平移手势、屏幕边缘平移手势
- Python3基础 自学笔记 控制结构
- 苹果Apple Appstore itunes快速排名算法规则教程知识
- xp系统扫描仪服务器,XP系统用复印机扫描的操作方法
- WebRTC基础实践 - 1. WebRTC简介
- 谈asch系统的共识机制与容错性