zoukankan      html  css  js  c++  java
  • jvm 锁Lock

    自旋锁

    线程想要获得一个对象的锁,如果没有得到,会继承占用CPU尝试获取锁, 线程不进入阻塞状态,仍然在Running

    锁消除

    1     public void lockTest() {
    2 
    3         String aa = "ABC";
    4         synchronized (aa) {
    5             System.out.println(aa);
    6         }
    7     }

    对于局部变量,没有必要加锁, 运行时JIT进行逃逸分析会自动去掉monitorenter monitorexit.  javap -v反编译看不出来

    锁粗化

     1     String aa = "ABC";
     2 
     3     public void lockTest() {
     4 
     5         for (int i = 0; i < 10000; i++) {
     6             synchronized (aa) {
     7                 System.out.println(aa);
     8             }
     9         }
    10     }

    循环中频繁加锁释放锁, 会被JIT优化成

    1     String aa = "ABC";
    2 
    3     public void lockTest() {
    4         synchronized (aa) {
    5             for (int i = 0; i < 10000; i++) {
    6                 System.out.println(aa);
    7             }
    8         }
    9     }
  • 相关阅读:
    Linux文件及目录查找
    英语单词independent
    英语单词omitting
    英语单词deploy
    英语单词debug
    线程
    进程
    操作系统历史
    分布式爬虫
    爬虫基础
  • 原文地址:https://www.cnblogs.com/yszzu/p/9273214.html
Copyright © 2011-2022 走看看