t点击上方"涤生的博客",关注我 转载请注明原创出处,谢谢!如果读完觉得有收获的话,欢迎点赞加关注. 前言 本文内容是基于 JDK 8 在文章 JVM 源码解读之 CMS GC 触发条件 中分析了 CMS GC 触发的五类情况,并且提到 CMS GC 分为 foreground collector 和 background collector.不管是 foreground collector 还是 background collector 使用的都是 mark-sweep 算法,分阶段…
write and debug by 张艳涛 wait()和notify()的通常用法 A线程取得锁,执行wait(),释放锁; B线程取得锁,完成业务后执行notify(),再释放锁; B线程释放锁之后,A线程取得锁,继续执行wait()之后的代码: 关于synchronize修饰的代码块通常,对于synchronize(lock){-}这样的代码块,编译后会生成monitorenter和monitorexit指令,线程执行到monitorenter指令时会尝试取得lock对应的monitor…
之前分析的已经加载的.Class文件中都没有Static 静态变量,所以也就没这部分的解析,自己也是不懂hotspot 将静态变量放哪里去了,追踪源码之后,看清楚了整个套路,总体上来说,可以举例来说对于,java.lang.String的Class文件进行解析,String类有5个变量,其中有俩个静态变量 private final char value[]; private int hash; // Default to 0 private static final long serialVe…
CAS的意思是campare and sweep比较交换 这个如果不用代码会比较抽象,那么在源码中进行解释 void ATTR ObjectMonitor::enter(TRAPS) { // The following code is ordered to check the most common cases first // and to reduce RTS->RTO cache line upgrades on SPARC and IA32 processors. Thread * c…
粘贴源码 package com.test; import java.util.Random; public class Test { static int number=12; private int age; private String name; public Test(int i, String string) { // TODO Auto-generated constructor stub this.age=i; this.name=string; } public Test()…
写一个java文件 public static void main(String[] args) { String str1="abc"; String str2 ="abc"; String str3=new String("abc"); boolean b1= str1==str2; boolean b2= str1==str3; } 查看字节码code 0 ldc #4 <abc> 2 astore_1 3 ldc #4 <…
源码中对于枚举类型WKID的使用 static bool initialize_wk_klass(WKID id, int init_opt, TRAPS); static void initialize_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS); static void initialize_wk_klasses_through(WKID end_id, WKID &start_id, TRAPS) { int limi…
(gdb) p obj $15 = (oopDesc *) 0xf3885d08 (gdb) p * obj $16 = { _mark = 0x70dea4e01, _metadata = { _klass = 0x2000070e, _compressed_klass = 536872718 }, static _bs = 0x7f658801eea8 } 1.介绍oo对象 现在先看最长使用的oop对象的定义,jvm的二分模型就是oop和class,所有的对象在hotspot层全被具体化成了…
先看代码 package com.zyt.jvmbook; public class Girl extends Person{ public Girl() { int a; } @Override public void sayHello() { System.out.println("girl say hello"); } private void sayHi(){ System.out.println("hellow"); } public static voi…
进入 // Methods bool has_final_method = false; AccessFlags promoted_flags; promoted_flags.set_flags(0); Array<Method*>* methods = parse_methods(access_flags.is_interface(), &promoted_flags, &has_final_method, &has_default_methods, CHECK_(n…