JVM如何處理鎖

當我們談論最新版本的Sun Hotspot Java虛擬機1.6時,當您嘗試從java.util.concurrent.locks.Lock實現獲取鎖或輸入同步塊時,JVM將執行以下三種鎖類型:
  • 有偏見的 :有時即使在并發系統中也沒有爭用,并且在這種情況下,JVM不應從OS借用互斥鎖來執行鎖定。 熱點可以使用其自己的內部數據結構進行操作,以更有效的方式模擬鎖定。 例如,如果代碼的同步部分沒有實時并發執行,則JVM使用CAS操作將所有者線程ID分配給Java代碼中用作互斥對象的對象,并在傳遞CAS時另外存儲重入計數。 它是有偏鎖 -JVM完成的“最輕”的鎖類型。 重入次數將由鎖所有者線程更新,就像沒有CAS的通常本地變量一樣。 如果CAS失敗,則意味著另一個線程已經獲得了該鎖,在這種情況下,JVM 停止了互斥鎖所有者線程, 線程上下文刷新到主內存中并檢查重入計數。 如果為0,則JVM將鎖升級為型,否則升級為胖型 (我認為主要目的是等待時間,如果鎖很薄,則應該很小)。 注意 Hotspot使用與用于緩存標識哈希碼相同的字段在互斥對象中存儲所有者線程ID。 因此,如果您一次在互斥體上檢索到身份哈希碼,則即使已被用作偏向鎖定,它也無法用于偏向鎖定。 有關偏向鎖的更多信息,請參見David Dice的博客 。
  • :這是一個簡單的自旋鎖。 當旋轉時間非常小時,它有助于節省線程上下文切換的時間。 當一個線程嘗試獲取占用的互斥鎖時,它旋轉了一段時間直到鎖將被釋放。 旋轉次數基于內部JVM分辨率,并且可能取決于不同的因素:JVM收集的有關您的應用程序的統計信息,使用的線程數,CPU等等。 JVM確定精簡鎖何時變得無效,并將其升級為鎖。
  • fat :JVM請求操作系統互斥并使用OS調度程序引擎進行線程駐留和喚醒時,“最強”的鎖定類型。 它比以前的類型昂貴得多,因為在這種情況下,每次線程獲取并釋放鎖時,JVM都應直接與OS進行交互。

參考: JVM如何處理 Slava技術博客上的 JCG合作伙伴提供的鎖 。

相關文章 :
  • Erlang與Java內存架構
  • Java Fork / Join進行并行編程
  • Java內存模型–快速概述和注意事項
  • Java中可怕的雙重檢查鎖定成語
  • Java最佳實踐–隊列之戰和鏈接的ConcurrentHashMap

翻譯自: https://www.javacodegeeks.com/2011/05/how-jvm-handle-locks.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374535.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374535.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374535.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于node.js及express實現中間件,實現post、get

首先,當然是有必要的環境,安裝node,這個我就不多說了。 依賴模塊: "express": "^4.13.4", "request": "^2.72.0", "body-parser": "^1.13.3",頁面 $.ajax({type: &q…

可視化分析之圖表選擇

轉載于:https://www.cnblogs.com/yymn/p/4783631.html

定義并調用函數輸出 fibonacci 序列_科學網—Zmn-0351 薛問天:再談數學概念的定義,評新華先生《0345》...

Zmn-0351 薛問天:再談數學概念的定義,評新華先生《0345》【編者按。下面是薛問天先生發來的文章。是對《Zmn-0345》新華先生文章的評論。現在發布如下,供網友們共享。請大家關注并積極評論。另外本《專欄》重申,這里純屬學術討論&…

Java和內存泄漏

總覽 術語“內存泄漏”在Java中的使用方式不同于在其他語言中使用的方式。 通用術語中的“內存泄漏”是什么意思,在Java中如何使用? 維基百科的定義 當計算機程序消耗內存但無法將其釋放回操作系統時,就會發生計算機科學中的內存泄漏&#x…

453. 最小操作次數使數組元素相等

給你一個長度為 n 的整數數組&#xff0c;每次操作將會使 n - 1 個元素增加 1 。返回讓數組所有元素相等的最小操作次數。 class Solution {public int minMoves(int[] nums) {int res 0;int sum 0;int n nums.length;for(int i 0;i<n;i){sum nums[i];}res sum - min…

第二章 TCP/IP 基礎知識

第二章 TCP/IP 基礎知識 TCP/IP transmission control protocol and ip internet protocol 是互聯網眾多通信協議中最為著名的。 2.2 TCP/IP 的標準化 2.2.2 TCP/IP 標準化精髓 TCP/IP 協議始終具有很強的實用性。 相比于TCP/IP &#xff0c;OSI 之所以未能達到普及&#xff0…

CSS太陽月亮地球三角戀旋轉效果

純粹玩一下&#xff0c;好像沒有什么實際的卵用&#xff0c;but&#xff0c;純玩買不了上當&#xff0c;純玩買不了受騙。。。。。。。。 地月旋轉的一個css效果&#xff0c;無聊玩玩&#xff0c;可以復制到記事本試試 <!DOCTYPE html><html lang"en">&l…

gorm preload 搜索_LeetCode刷題筆記|95:不同的二叉搜索樹 II

題目描述給定一個整數 n&#xff0c;生成所有由 1 ... n 為節點所組成的 二叉搜索樹 。示例輸入&#xff1a;3輸出&#xff1a;[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]解釋&#xff1a;以上的輸出對應以下 5 種不同結構的二叉搜索樹&#xf…

Java初學者指南

Java編程的第一步。 對于Java中的入門教程&#xff0c;請參閱Sun的官方幫助這里 除了核心語言外&#xff0c;還有幾種技術和API 介紹。 我們建議首先閱讀涵蓋 基礎知識&#xff0c;并繼續其余的教程。 我們建議&#xff1a; 保持代碼簡單易讀 拆分邏輯組件&#xff08;類…

Javascript中Promise對象的實現

http://segmentfault.com/a/1190000000684654 http://www.infoq.com/cn/news/2011/09/js-promise/轉載于:https://www.cnblogs.com/zuiyirenjian/p/4787864.html

字符串分割與存入List集合

List<string> namelist new List<string>(); string[] namejh null; string name "張三李四王五"; 第一步&#xff1a;將三個名字分離出來 namejh name.Split("".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); namelist new Li…

GTJ2018如何導出全部工程量_如何成為優秀的造價員?廣聯達編制內刊手冊,造價員算量高手秘籍...

如何成為優秀的造價員&#xff1f;廣聯達編制內刊手冊&#xff0c;造價員算量高手秘籍[高手秘籍]是廣聯達課程編制委員會暨直播委員會精心打造的&#xff0c;能夠“讓您深入理解軟件計算、設置等原理,遇到問題有處理思路,以常見問題為導向&#xff0c;重點進行原因分析&#xf…

帶有Spring,Hibernate,Akka,Twitter Bootstrap,Apache Tiles和jQuery的Maven Web項目Kickstarter代碼庫...

我很高興將第二個項目上傳到GitHub&#xff0c;以幫助人們盡快開始Java Web App開發。 我正在與Apache License 2.0共享此代碼。 這是相同的網址&#xff1a; https://github.com/ykameshrao/spring-hibernate-springdata-springmvc-maven-project-framework 該項目包括以下部…

git項目添加.gitigore文件

以前一直沒有注意這個文件&#xff0c;最近讀到了黃勇的《架構探險》&#xff0c;覺得這個文件還是很有用的。 .gitigore文件可以自己配置。 我使用的是書中所用的配置&#xff0c;簡潔明了。 # Maven # target/#log# logs/# IDEA # .idea/ *.iml# Eclipse # .settings/ .metad…

463. 島嶼的周長

給定一個 row x col 的二維網格地圖 grid &#xff0c;其中&#xff1a;grid[i][j] 1 表示陸地&#xff0c; grid[i][j] 0 表示水域。 網格中的格子 水平和垂直 方向相連&#xff08;對角線方向不相連&#xff09;。整個網格被水完全包圍&#xff0c;但其中恰好有一個島嶼&a…

C++服務器設計(七):聊天系統服務端實現

在之前的章節中&#xff0c;我們對服務端系統的設計實現原理進行了剖析&#xff0c;在這一章中&#xff0c;我們將對服務端框架進行實際運用&#xff0c;實現一款運行于內網環境的聊天系統。該聊天系統由客戶端與服務器兩部分組成&#xff0c;同時服務端通過數據庫維護用戶的賬…

高校實驗室管理系統_史上最全面的實驗室信息管理系統(LIMS)全解

1. LIMS的基本概念和發展狀況1.1 概括LIMS實驗室管理系統是為實驗、檢測等業務板塊提供流程化、模塊化、標準化操作管理系統&#xff0c;打造基于行業法規的實驗室全流程質量控制管理系統&#xff0c;實現實驗室“人、機、料、法、環”關鍵環節管理。1.2 發展狀況隨著科研規范化…

ORM問題

在過去的幾年中&#xff0c;像Hibernate這樣的對象關系映射工具已經幫助開發人員在處理關系數據庫方面取得了巨大的生產力增長。 ORM使開發人員可以將精力集中在應用程序邏輯上&#xff0c;并避免為諸如插入或查詢之類的簡單任務編寫大量樣板SQL。 但是&#xff0c;充分證明的對…

ActiveMQ中Session設置的相關理解

名詞解釋&#xff1a; P&#xff1a;生產者 C&#xff1a;消費者 服務端&#xff1a;P 或者 ActiveMQ服務 客戶端&#xff1a;ActiveMQ服務 或者 C 客戶端成功接收一條消息的標志是這條消息被簽收。成功接收一條消息一般包括如下三個階段&#xff1a; 1&#xff0e;客戶端接收…

python中的 descriptor

學好和用好python&#xff0c; descriptor是必須跨越過去的一個點&#xff0c;現在雖然Python書籍花樣百出&#xff0c;但是似乎都是在介紹一些Python庫而已&#xff0c;對Python語言本身的關注很少&#xff0c;或者即使關注了&#xff0c;但是能夠介紹把 dscriptor介紹清楚的&…