随笔分类 - JVM学习
摘要:volatile volatile作用: 可见性 -》lock-> 缓存一致性协议【MESI】 有序性-》防止指令重排 如何实现的? 在JMM内存模型中: 两个线程所占的寄存器中都有一个i值,都是从主存中读到并拷贝到各自的缓存,并最终到达寄存器中。 先看一下不使用volatile会有什么后果: 当核
阅读全文
摘要:Java Object getClass() 方法 Object getClass() 方法用于获取对象的运行时对象的类。 ShowGC showGC = new ShowGC(); Class<? extends ShowGC> aClass = showGC.getClass(); 获取到的Cl
阅读全文
摘要:在java程序运行的时候,编译器并不一定会根据java程序的顺序去执行,可能会依据优化策略对程序进行重排序,这就是指令重排,主要是提高了程序执行的并行度。 但是在做指令重排的前提下,不能违背程序原本的语义,即本来执行结果为10,不能因为指令重排了,结果变成了8,这就是严重的Bug了。 来看一下jvm
阅读全文
摘要:JAVA对象模型: 其中Mark Word: import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.openjdk.jol.info.ClassLayout; import java.sql.Time; import
阅读全文
摘要:比较一下JVM字节码: while(true): public class WhileAndFor { public void test(){ while(true){ System.out.println("while..."); } }} 0 getstatic #2 <java/lang/Sy
阅读全文
摘要:源码:java.lang.ClassLoader#loadClass protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { synchronized (getClassLo
阅读全文
摘要:这里的单例模式实现方法都是线程安全的 一般常见的都是两种单例单例实现方法。加了两种,列举如下 饿汉式 双重检查加锁饿汉式 内部类方式 枚举单例 下面给出JAVA代码实例 /** * 懒汉式 */ public class Singleton1 { private Singleton1(){} pri
阅读全文