Java偏向鎖

來源:互聯網
上載者:User

標籤:java虛擬機器   jvm   多線程   鎖   並發   

概述

偏向鎖是JDK 1.6提出的一種鎖最佳化方式,起核心思想是如果程式沒有競爭,則取消之前已經取得鎖的線程的同步操作。也就是說,某一個鎖被一個線程擷取之後,便進入了偏向鎖模式,當該線程再次請求這個鎖時,就無需再進行相關的同步操作,從而節省了操作時間。但是如果在此期間,有其他線程申請了這個鎖,則退出偏向鎖模式。在JVM中可以使用-XX:+UseBiasedLocking設定啟用偏向鎖。

實驗

看如下的代碼:

package com.winwill.lock;import java.util.List;import java.util.Vector;/** * @author qifuguang * @date 15/6/5 13:44 */public class TestBiasedLock {    private static List<Integer> list = new Vector<Integer>();    public static void main(String[] args) {        long tsStart = System.currentTimeMillis();        for (int i = 0; i < 10000000; i++) {            list.add(i);        }        System.out.println("一共耗費:" + (System.currentTimeMillis() - tsStart) + " ms");    }}

代碼中使用一個迴圈一直往Vector中新增元素,Vector的add操作會請求鎖:

    /**     * Appends the specified element to the end of this Vector.     *     * @param e element to be appended to this Vector     * @return {@code true} (as specified by {@link Collection#add})     * @since 1.2     */    public synchronized boolean add(E e) {        modCount++;        ensureCapacityHelper(elementCount + 1);        elementData[elementCount++] = e;        return true;    }

我們使用如下的參數運行代碼:

-XX:+UseBiasedLocking
-XX:BiasedLockingStartupDelay=0
-Xmx512m
-Xms512m

-XX:BiasedLockingStartupDelay=0這個參數表示虛擬機器一啟動就啟動偏向鎖模式,因為預設情況下,虛擬機器啟動4s之後才會啟動偏向鎖模式,該例已耗用時間較短,故做此設定。

得到如下結果:

但是,如果我們使用如下的參數運行程式:

-XX:-UseBiasedLocking
-Xmx512m
-Xms512m

得到的結果如下:

結論

偏向鎖在少競爭的情況下,對系統效能有一定的協助。

注意事項

偏向鎖在競爭激烈的情況下沒有太強的最佳化效果,因為大量的競爭會導致持有鎖的線程不停地切換,鎖也很難一直保持偏向模式,此時,使用偏向鎖不僅不能最佳化程式,反而有可能降低程式效能。因為,在競爭激烈的情境下可以使用-XX:-UseBiasedLocking參數禁用偏向鎖。

Java偏向鎖

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.