打印Mark Work信息
//引入工具包依赖<dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.8</version></dependency>
//示例代码@Slf4jpublic class MonitorDemo {static Object monitor = new Object();public static void main(String[] args) {defaultLock();// lock2();}public static void lock2(){new Thread(() -> {synchronized (monitor){try {print(monitor);Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}}}).start();try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}new Thread(() -> {//存在锁竞争,锁膨胀至重量级锁synchronized (monitor){print(monitor);}}).start();}/*** VM参数:-XX:+UseBiasedLocking -XX:BiasedLockingStartupDelay=0* 使JVM不延迟加载偏向锁,默认是延迟几秒的,因为JVM初始化期间存在大量的同步方法,锁升级会严重影响性能*/public static void defaultLock(){//打印初始的Mark Workprint(monitor);synchronized (monitor){//偏向锁log.info("locking...");print(monitor);}//锁释放print(monitor);new Thread(() -> {//更新偏向锁获得者的线程IDsynchronized (monitor){log.info("locking 2 ...");print(monitor);}}).start();// 计算hashcode,Mark Work中的线程ID位置被占用,偏向锁永久撤销System.out.println(monitor.hashCode());print(monitor);//锁升级至轻量级锁synchronized (monitor){log.info("locking...");print(monitor);}}public static void print(Object monitor){log.info("# # # # # # # # # # # # # # # # # # # # ");log.info(ClassLayout.parseInstance(monitor).toPrintable());}}
Mark Work打印信息
