
JVM
L__ear
我还只是个孩子呀
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
自定义类加载器
类:ClassLoader方法:findClass;defineClass(将字节数组变成Class对象);loadClass;【双亲委派模型】使用模板模式实现在loadClass方法中。loadClass 的源码: protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { synchronized (getClassL原创 2020-09-20 21:39:08 · 223 阅读 · 0 评论 -
JVM 各种常量池傻傻分不清?
总体上有如下四种常量池:class 文件中的常量池、运行时常量池、字符串常量池、符号常量池。class 文件中的常量池: 一个类对应一个 class 文件,每个 class 文件中都有一个常量池。这个常量池是一个静态的常量池,存在于文件中,而不是内存中。记录了类中的字面量和符号引用。运行时常量池: 与 class 文件中静态的常量池相对的是 JVM 进程中的运行时常量池,运行时常量池是 JVM 加载 class 文件(类加载)后,class 文件中的常量池在内存中的表现形式,存储在 JVM 的方法区。原创 2020-07-17 21:25:57 · 545 阅读 · 1 评论 -
源码解析-线程A请求偏向于线程B的偏向锁
一、先理理所有情况假设偏向锁有效,即类没有关闭偏向模式,且其 epoch 没有过期。则一定会发生偏向锁的撤销。第一类情况:线程 B 没有正在持有该偏向锁。仅发生单个偏向撤销,偏向锁先被撤销为无锁,然后在 slow_enter 里升级为轻量级锁。触发了批量重偏向,偏向锁先被撤销为匿名偏向,随后立即重偏向于 A。触发了批量撤销,偏向锁同样先被撤销为无锁,然后在 slow_enter 里升级为轻量级锁。第二类情况:线程 B 正在持有该偏向锁。仅发生单个偏向撤销,偏向锁撤销为 B 的轻量级锁,原创 2020-05-28 19:11:04 · 647 阅读 · 0 评论 -
源码解析-偏向锁撤销流程解读
一、单个偏向锁的撤销源码链接:http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/9ce27f0a4683/src/share/vm/runtime/biasedLocking.cpp#l376static BiasedLocking::Condition revoke_bias(oop obj, bool allow_rebias, bool is_bulk, JavaThread* requesting_thread) { markOop ma原创 2020-05-27 01:49:13 · 1157 阅读 · 1 评论 -
源码解析-触发批量撤销或批量重偏向的条件
JVM 基于一种启发式的做法判断是否应该触发批量撤销或批量重偏向。依赖三个阈值作出判断:# 批量重偏向阈值-XX:BiasedLockingBulkRebiasThreshold=20# 重置计数的延迟时间-XX:BiasedLockingDecayTime=25000# 批量撤销阈值-XX:BiasedLockingBulkRevokeThreshold=40启发式的判断源码如下:static HeuristicsResult update_heuristics(oop o, bool原创 2020-05-26 21:44:17 · 759 阅读 · 1 评论