jvm垃圾回收卡表

贾珠
• 阅读 1559

现代JVM,堆空间通常被划分为新生代和老年代。由于新生代的垃圾收集通常很频繁,如果老年代对象引用了新生代的对象,那么,需要跟踪从老年代到新生代的所有引用,从而避免每次YGC时扫描整个老年代,减少开销。

对于HotSpot JVM,使用了卡标记(Card Marking)技术来解决老年代到新生代的引用问题。具体是,使用卡表(Card Table)和写屏障(Write Barrier)来进行标记并加快对GC Roots的扫描。

卡表(Card Table)
Card Table通常将堆空间划分为一系列2次幂大小的卡页(Card Page)。
Card Table,用于标记卡页的状态,每个卡表项对应一个卡页。
HotSpot JVM的卡页(Card Page)大小为512字节,卡表(Card Table)被实现为一个简单的字节数组,即卡表的每个标记项为1个字节。
当对一个对象引用进行写操作时(对象引用改变),写屏障逻辑将会标记对象所在的卡页为dirty。
当发生yanggc的时候,老年代只需要扫描卡表中的脏页。

卡表也用于cms回收二阶段。并发标记阶段会把发生变化的对象所在的Card标识为Dirty,这样后续阶段就只需要扫描这些Dirty Card的对象,从而避免扫描整个老年代。

-XX:+UseCondCardMark:在执行写屏障之前,先简单的做一下判断。如果卡页已被标识过,则不再进行标识。

https://www.cnblogs.com/hongd...

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java 虚拟机 收集器 总结
java虚拟机收集器总结|垃圾收集器|新生代|老年代|jvm参
Stella981 Stella981
3年前
JVM虚拟机调优实战(3)进阶调优篇
1.JVM内存分配与回收1.1MinorGc和FullGC有什么不同呢?   新生代GC(MinorGC):指发生新生代的的垃圾收集动作,MinorGC非常频繁,回收速度一般也比较快。   老年代GC(MajorGC/FullGC):指发生在老年代的GC,出现了MajorGC经常会伴随至少一次的MinorGC(并非绝对)
Wesley13 Wesley13
3年前
JAVA面试考点解析(11)
9、解释内存中的栈(stack)、堆(heap)和方法区(methodarea)的用法。答:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用JVM中的栈空间;而通过new关键字和构造器创建的对象则放在堆空间,堆是垃圾收集器管理的主要区域,由于现在的垃圾收集器都采用分代收集算法,所以堆空间还可以细分为新生代和老生代,
Wesley13 Wesley13
3年前
Java虚拟机堆内存(新生代)
Java中的堆是JVM所管理的最大的一块内存空间,主要用于存放各种类的实例对象。在Java中,堆被划分成两个不同的区域:新生代,老年代。新生代又被分为了三个区域:Eden,from survivor,tosurvivor。这样划分的目的是为了使JVM能够更好的管理堆内存中的对象,包括内存分配以及回收。堆的内存模型大致为:从图中可以看出:堆大
Stella981 Stella981
3年前
JVM基本配置与调优
JVM基本配置与调优JVM调优,一般都是针对堆内存配置调优。如图:堆内存分新生代和老年代,新生代又划分为eden区、from区、to区。!(https://oscimg.oschina.net/oscnet/5b30ad2de1851315e10f5d9e0a57395208c.png)一、区域释义
Stella981 Stella981
3年前
JVM 调优
JVM堆内存分区堆:年轻代,老年代,持久代年轻代:Eden,Survivor1,Survivor2!一个性能较好的jvm参数配置以及jvm的简介(http://static.oschina.net/uploads/img/201601/13172230_Pd5L.jpg)GC新生代GC(Mino
Wesley13 Wesley13
3年前
VisualVM 使用心得
JDK中有个好用的工具“VisualVM”可以实时可视化的查看到java程序内存变化情况,对于理解GC和java内存管理还是有很大帮助的,以前看论坛看帖子讲到java内存管理真是各说纷纭啊!有人说“JVM的内存分为两块堆和栈”,还有人说"JVM的内存分为三块(新生代、老年代、方法区)",想必很多人和我一样都搞得有点摸不着头脑了吧。下面来眼见为实:工欲善
Stella981 Stella981
3年前
JVM 参数学习
一、JVM1、JVM产生GC的位置Eden(新生代)MinorGC算法(复制)Oldtenure(老年代) Major(Full)GC(整理压缩)算法2、JVM堆(Heap)内存大小参数\Xmn新生代8:1:1比例\Xms设置初始化堆内存大小 \Xmx设置堆内存最大大小 产生java.lang.
Stella981 Stella981
3年前
JVM学习总结(六)内存分配与回收策略
_对象优先在新生代Eden区中分配_当Eden区没有足够空间进行分配时,虚拟机将发起一次MinorGC,虚拟机提供了XX:PrintGCDetails这个收集器日志参数。MinorGC与FullGC比较:新生代GC(MinorGC)指发生在新生代的垃圾回收,Java对象大多具备朝生熄灭的特性,所以MinorGC非常频
Stella981 Stella981
3年前
JVM学习笔记之二
  上一篇博文记录了gc的各种算法,这篇博文记录HotSpot中的几种垃圾回收器。垃圾回收器是不同虚拟机对算法思想的实现。!(http://static.oschina.net/uploads/space/2016/0810/182539_7tJV_2333484.png)  这张图上面三个是新生代回收器、下面三个是老年代收集器。连线表示
Stella981 Stella981
3年前
JVM 新生代老年代
1.为什么会有年轻代我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这
贾珠
贾珠
Lv1
江南二月多芳草,春在蒙蒙细雨中。
文章
7
粉丝
0
获赞
0