日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面试题 锁消除是什么

發布時間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试题 锁消除是什么 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鎖消除是在編譯器級別的事情。

在即時編譯器時,如果發現不可能被共享的對象,則可以消除這些對象的鎖操作。

也許你會覺得奇怪,既然有些對象不可能被多線程訪問,那為什么要加鎖呢?寫代碼時直接不加鎖不就好了。

但是有時,這些鎖并不是程序員所寫的,有的是JDK實現中就有鎖的,比如Vector和StringBuffer這樣的類,它們中的很多方法都是有鎖的。當我們在一些不會有線程安全的情況下使用這些類的方法時,達到某些條件時,編譯器會將鎖消除來提高性能

public class TestLockEliminate {public static String getString(String s1, String s2) {StringBuffer sb = new StringBuffer();sb.append(s1);sb.append(s2);return sb.toString();}public static void main(String[] args) {long tsStart = System.currentTimeMillis();for (int i = 0; i < 1000000; i++) {getString("TestLockEliminate ", "Suffix");}System.out.println("一共耗費:" + (System.currentTimeMillis() - tsStart) + " ms");} }

?上述代碼中的StringBuffer.append是一個同步操作,但是StringBuffer卻是一個局部變量,并且方法也并沒有把StringBuffer返回,所以不可能會有多線程去訪問它。那么此時StringBuffer中的同步操作就是沒有意義的。

開啟鎖消除是在JVM參數上設置的,當然需要在server模式下:

并且要開啟逃逸分析。 逃逸分析的作用呢,就是看看變量是否有可能逃出作用域的范圍

當JVM參數為:

-server -XX:+DoEscapeAnalysis -XX:+EliminateLocks

耗時119ms

當JVM參數為:

-server -XX:+DoEscapeAnalysis -XX:-EliminateLocks

耗時140ms

?表明鎖消除的效果還是很明顯的。

總結

以上是生活随笔為你收集整理的面试题 锁消除是什么的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。