![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM源码分析
文章平均质量分 94
黄智霖-blog
骨灰级技术爱好者
展开
-
垃圾收集之Remember Set(CardTable)
JVM为了更好的管理内存,提高GC效率,一般都会对内存进行划分,比如经典的分代收集,G1推出的Region等。而Java中的垃圾收集基本都基于可达性分析算法,这就涉及到对象枚举遍历和标记的过程。 在做Minor GC的时候会对年轻代进行根节点枚举,但是如果年轻代中的一些对象被老年代引用着,那么在做年轻代可达性分析的时候就会遇到很大的阻碍,总不能在Minor GC的时候还去扫描老年代吧?这种跨代引用的问题抛开出现频率,它总是会存在,而且在G1这种多Region结构中更加突出(包括ZGC、Shenandoah原创 2021-03-31 01:40:11 · 4310 阅读 · 3 评论 -
深入OpenJDK源码-偏向锁的延时生效如何实现的
关于偏向锁,包括撤销和重偏向在前面已经结合源码分析过了,这里就不再赘述,主要看看延时生效的问题。另外,本文贴出的源码大多都只保留了当前关注的逻辑。 我们知道虚拟机为我们提供了参数- XX:+UseBiasedLocking以开启或者关闭偏向锁优化(默认开启),但是偏向锁的启用有个默认的延时时间,可以通过参数- XX:BiasedLockingStartupDelay设置,默认为4秒,可以在globals.hpp中找到默认值设置: product(intx, BiasedLockingStartu.原创 2021-03-30 23:45:49 · 5671 阅读 · 4 评论 -
深入OpenJDK源码--你真的了解System.out.println吗?
目录一、前戏二、JVM源码分析三、坑?四、总结 一、前戏 可能不少小伙伴习惯在代码中使用sout打印一些信息,就像这样: System.out.println("hello world!") 做为一位资深干码人,本着弘扬党求真务实的精神,必须得来看看这个sout有何玄机~~ 首先看调用就知道,out是System类的一个公共静态成员变量,进入System.java中: public final static PrintStream out = null; 嗯,不止是public,还是fi原创 2021-03-30 02:10:24 · 8159 阅读 · 16 评论 -
深入OpenJDK源码全面理解Java类加载器(上 -- JVM源码篇)
目录前言一、从JDK源码看双亲委派二、使用步骤1.引入库2.读入数据总结 前言 关于JVM类加载的基础理论知识,请参照《深入理解Java虚拟机》读书笔记(六)–虚拟机类加载机制(上)和《深入理解Java虚拟机》读书笔记(六)–虚拟机类加载机制(下)。 一、从JDK源码看双亲委派 注:博主是使用的是openjdk8,换了新电脑还没有去编译源码,所以看的是静态代码,关于如何编译和调试源码,网上不少文章都有介绍,这里就不赘述了 我们都知道在Java类加载中,除了BootStrap加载器,App和Ext加载原创 2021-03-19 13:14:48 · 18185 阅读 · 29 评论 -
深入OpenJDK源码核心探秘Unsafe(含JNI完整使用流程)
一、介绍 在Java中,sun.misc.Unsafe可以认为是用于JDK内部使用的工具类,它将一些需要使用native语言实现的功能通过java方法暴露出来,这些方法比较“危险”,因为它们可以直接修改内存中的值。 通常情况下,我们并不能直接在程序中使用Unsafe,Unsafe的构造方法被私有化,语法层面上只能通过其提供的公共静态方法getUnsafe获取Unsafe实例:theUnsafe...原创 2019-10-19 23:54:52 · 12251 阅读 · 2 评论