![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java虚拟机
文章平均质量分 76
以《实战java虚拟机》、《深入理解java虚拟机》为基础,进行学习总结
pjhCoding
这个作者很懒,什么都没留下…
展开
-
[学习笔记]垃圾回收算法(二)
文章目录增量式垃圾回收三色标记算法书接上文垃圾回收算法(一)增量式垃圾回收增量式垃圾回收(Incremental GC)是一种通过逐渐推进垃圾回收来控制mutator最大暂停时间的方法。三色标记算法该方法是G1(Garbage-First)垃圾收集器使用的方法。将对象按照情况分为三种:白色:还未搜索过的对象灰色:正在搜索的对象黑色:搜索完的对象GC开始前,所有对象都是白色的,能从根部发现的对象被标记,堆到栈里,但还没有搜索完,因此这些对象被标记为灰色。灰色对象从栈中取出,子对象被标记原创 2021-01-11 14:52:55 · 233 阅读 · 0 评论 -
[学习笔记]垃圾回收算法(一)
文章目录新生代与老年代Ungar的分代垃圾回收算法本文参考垃圾回收的算法与实现。本篇目前说的是分代垃圾回收算法。基于编程经验,很多对象在在生成后不久就成了垃圾,因此引入了年龄的概念,经过一次GC,年龄加一。新生代与老年代分代垃圾回收算法将对象根据年龄分为新生代与老年代。新生代的GC称为minor GC,新生代对象存活一定的次数后上升为老年代对象成为晋升(promotion)。老年代的GC频率较低,成为major GC。分代垃圾回收算法是与复制算法、清除算法和压缩算法结合使用的。Ungar的分代原创 2021-01-02 20:49:33 · 96 阅读 · 0 评论 -
[学习笔记]java虚拟机(六)
书接上文虚拟机(四)文章目录访问标记当前类、父类和接口Class文件的字段Class文件的方法基本结构接着说Class文件结构,前文说完了常量池的结构,紧跟着是访问标记。访问标记2字节表示,用于表明该类的访问信息,如public、final、abstract等。每种类型的表示都是通过设置访问标记32位中的特定位来实现。标记名称数值描述ACC_PUBLIC0x0001表示publicACC_FINAL0x0010是否为final类ACC_SUPER0x0原创 2020-12-06 10:33:37 · 52 阅读 · 0 评论 -
[学习笔记]java虚拟机(五)
书接上文:java虚拟机(四)。文章目录Class文件魔数版本常量池java虚拟机屏蔽了系统平台,程序运行在java虚拟机上即可。Class文件是实现的基石,只要能将源文件编译为Class文件,就能在虚拟机上执行。Class文件Class文件使用类似于C语言结构体的方式进行描述,并且统一使用无符号整数作为基本数据类型,u1、u2、u4、u8分别表示无符号单字节、2字节、4字节和8字节整数。字符串使用u1数组进行表示。如下为Class文件描述:ClassFile{ u4 m原创 2020-11-15 12:46:50 · 72 阅读 · 0 评论 -
[学习笔记]java虚拟机(四)
书接上文,虚拟机(二)。文章目录无锁java内存模型无锁非阻塞同步有许多方法:如ThreadLocal,每个线程拥有各自独立的变量副本。基于CAS的无锁并发控制。java内存模型原创 2020-11-06 10:15:17 · 96 阅读 · 0 评论 -
[学习笔记]java虚拟机(三)
书接上文,虚拟机(二)。文章目录锁在虚拟机的实现优化基本概念偏向锁轻量级锁锁膨胀自旋锁锁消除锁在应用层的优化减少锁持有时间减少锁粒度锁分离锁粗化锁在虚拟机的实现优化基本概念java的对象中都有一个对象头,用于保存对象的系统信息。对象头中有一个成为Mark Word的部分,是一个数据区,存放对象的哈希值、对象的年龄、锁的指针等信息。偏向锁某个锁被线程获取后,就会进入偏向模式,线程再次请求这个锁时,无需再进行相关的同步操作。偏向锁在竞争不激烈的系统中能够很好地提升性能,但激烈的场合没有太强的优化原创 2020-10-31 16:30:37 · 81 阅读 · 0 评论 -
[学习笔记]java虚拟机(二)
文章目录垃圾回收器CMSG1书接上文,虚拟机(一)。垃圾回收器CMSG1原创 2020-10-16 16:27:07 · 93 阅读 · 0 评论 -
[学习笔记]java虚拟机(一)
文章目录垃圾回收算法引用先从《实战java虚拟机》开始。各种配置Xms、Xmx等暂时搁置垃圾回收算法主要有引用计数、标记清除、复制、标记压缩、分代算法、分区算法。各类的面试博客或是书籍都已说的很清楚,不再赘述。主要说下分代算法中的叫做卡表(Card Table)的数据结构,为一个比特位集合,每个比特位对应老年代的一块地址,比特位为1表示这片老年代中的对象持有新生代对象的引用,在这种情况下新生代GC时只需要遍历这一块老年代。引用分为强引用、软引用、弱引用、虚引用。后三个引用均在java.lang原创 2020-10-11 16:45:06 · 85 阅读 · 0 评论