Java內存模型FAQ(五)舊的內存模型有什么問題?

原文:http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html?第五章

譯者:Alex

舊的內存模型中有幾個嚴重的問題。這些問題很難理解,因此被廣泛的違背。例如,舊的存儲模型在許多情況下,不允許JVM發生各種重排序行為。舊的內存模型中讓人產生困惑的因素造就了JSR-133規范的誕生。

閱讀全文

Java內存模型FAQ(三)JSR133是什么?

原文:http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html?第三章

譯者:Alex

從1997年以來,人們不斷發現Java語言規范的17章定義的Java內存模型中的一些嚴重的缺陷。這些缺陷會導致一些使人迷惑的行為(例如final字段會被觀察到值的改變)和破壞編譯器常見的優化能力。
閱讀全文

Java內存模型FAQ(四)重排序意味著什么?

原文:http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html?第四章

譯者:Alex

在很多情況下,訪問一個程序變量(對象實例字段,類靜態字段和數組元素)可能會使用不同的順序執行,而不是程序語義所指定的順序執行。編譯器能夠自由的以優化的名義去改變指令順序。在特定的環境下,處理器可能會次序顛倒的執行指令。數據可能在寄存器,處理器緩沖區和主內存中以不同的次序移動,而不是按照程序指定的順序。
閱讀全文

Java內存模型FAQ(二) 其他語言,像C++,也有內存模型嗎?

原文:http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html?第二章

譯者:Alex

大部分其他的語言,像C和C++,都沒有被設計成直接支持多線程。這些語言對于發生在編譯器和處理器平臺架構的重排序行為的保護機制會嚴重的依賴于程序中所使用的線程庫(例如pthreads),編譯器,以及代碼所運行的平臺所提供的保障。

閱讀全文

Java內存模型Cookbook-前言

原文地址:http://gee.cs.oswego.edu/dl/jmm/cookbook.html

作者:Doug Lea。由?JMM郵件組的成員提供幫助.?dl@cs.oswego.edu.

譯者:潘曦,丁一,古圣昌,歐振聰,方騰飛 ?校對:歐振聰,方騰飛

前言:從最初的探索至今已經有十年了。在此期間,很多關于處理器和語言的內存模型的規范和問題變得更清楚,更容易理解,但還有一些沒有研究清楚。本指南一直在修訂、完善來保證它的準確性,然而本指南部分內容展開的細節還不是很完整。想更全面的了解, 可以特別關注下 Peter Sewell和?Cambridge Relaxed Memory Concurrency Group的研究工作。

這是一篇用于說明在JSR-133中制定的新Java內存模型(JMM)的非官方指南。這篇指南提供了在最簡單的背景下各種規則存在的原因,而不是這些規則在指令重排、多核處理器屏障指令和原子操作等方面對編譯器和JVM所造成的影響。它還包括了一系列遵循JSR-133的指南。本指南是“非官方”的文檔,因為它還包括特定處理器性能和規范的解釋,我們不能保證所有的解釋都是正確的,此外,處理器的規范和實現也可能會隨時改變。

  1. 指令重排?[譯者:歐振聰]
  2. 內存屏障 [譯者:潘曦]
  3. 多處理器?[譯者:古圣昌]
  4. 指南 ? ? ? ?[譯者:丁一]

JMM Cookbook(一)指令重排

原文地址:http://gee.cs.oswego.edu/dl/jmm/cookbook.html?第一章 譯者:歐振聰 校對:李同杰

  1. 前言
  2. 指令重排
  3. 內存屏障
  4. 多處理器
  5. 指南

指令重排

對于編譯器的編寫者來說,Java內存模型(JMM)主要是由禁止指令重排的規則所組成的,其中包括了字段(包括數組中的元素)的存取指令和監視器(鎖)的控制指令。

Volatile與監視器

JMM中關于volatile和監視器主要的規則可以被看作一個矩陣。這個矩陣的單元格表示在一些特定的后續關聯指令的情況下,指令不能被重排。下面的表格并不是JMM規范包含的,而是一個用來觀察JMM模型對編譯器和運行系統造成的主要影響的工具。

閱讀全文

并發譯文翻譯計劃(一)

為了促進并發編程在中國的推廣和研究,讓更多的同學能閱讀到國外的文獻。所以打算將國外的編程文獻翻譯成中文,但是我一個人的精力有限,所以希望征集譯者幫忙一起翻譯。

閱讀全文

Java內存模型FAQ

原文:http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html? 譯者:Alex,方騰飛

目錄

  1. 什么是內存模型?
  2. 其他語言,像c++,也有內存模型嗎?
  3. JSR 133是什么?
  4. 重排序是什么?
  5. 舊內存模型有什么錯誤?
  6. 沒有正確同步的含義是什么?
  7. 同步會做些什么呢?
  8. final字段如何改變它們的值?
  9. 在新的JMM下final字段是如何工作的?
  10. volatile是干什么用的?
  11. 新內存模型是否修復了雙重鎖檢查問題?
  12. 如果我要實現一個JVM,我需要做什么?
  13. 為什么要關注JMM?

Java內存模型FAQ(一) 什么是內存模型

原文:http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html?第一章 譯者:方騰飛

在多核系統中,處理器一般有一層或者多層的緩存,這些的緩存通過加速數據訪問(因為數據距離處理器更近)和降低共享內存在總線上的通訊(因為本地緩存能夠滿足許多內存操作)來提高CPU性能。緩存能夠大大提升性能,但是它們也帶來了許多挑戰。例如,當兩個CPU同時檢查相同的內存地址時會發生什么?在什么樣的條件下它們會看到相同的值?

閱讀全文

并發編程推薦書籍和文章

1: java并發編程實戰

Java并發編程實戰

豆瓣地址:http://book.douban.com/subject/10484692/

2:多處理器編程的藝術

多處理器編程的藝術

豆瓣地址:http://book.douban.com/subject/3901836/

3:推薦系列文章

  1. IBM developerWorks 中國 : Java 多線程與并發編程專題?http://t.cn/SVFmtH
  2. 原阿里同事@武漢伢袁志俊?寫的“探索并發編程”系列文章http://t.cn/aF7gqD
  3. 深入淺出java并發編程http://t.cn/hGJNqw?by?@飯飯泛

4:推薦精品文章

  1. 阿里同事悟時寫的一種高效無鎖內存隊列的實現
  2. Hadoop并行計算原理與分布式并發編程?http://t.cn/zlsBCHk

聊聊并發(五)原子操作的實現原理

本文屬于作者原創,原文發表于InfoQ:http://www.infoq.com/cn/articles/atomic-operation

1??? 引言

原子(atom)本意是“不能被進一步分割的最小粒子”,而原子操作(atomic operation)意為”不可被中斷的一個或一系列操作” 。在多處理器上實現原子操作就變得有點復雜。本文讓我們一起來聊一聊在Inter處理器和Java里是如何實現原子操作的。

閱讀全文

聊聊并發系列文章

聊聊并發系列文章是我在InfoQ發表的并發編程連載文章。

  1. 聊聊并發(一)深入分析Volatile的實現原理
  2. 聊聊并發(二)Java SE1.6中的Synchronized
  3. 聊聊并發(三)Java線程池的分析和使用
  4. 聊聊并發(四)深入分析ConcurrentHashMap
  5. 聊聊并發(五)原子操作的實現原理
  6. 聊聊并發(六)ConcurrentLinkedQueue的實現原理
  7. 聊聊并發(七)Java中的阻塞隊列
  8. 聊聊并發(八)Fork/Join框架介紹
  9. 聊聊并發(九)Java中的CopyOnWrite容器
  10. 聊聊并發(十)生產者消費者模式

未完待續。。。

聊聊并發(四)深入分析ConcurrentHashMap

本文是作者原創,發表于InfoQ:http://www.infoq.com/cn/articles/ConcurrentHashMap

術語定義

術語 英文 解釋
哈希算法 hash algorithm 是一種將任意內容的輸入轉換成相同長度輸出的加密方式,其輸出被稱為哈希值。?
哈希表 hash table 根據設定的哈希函數H(key)和處理沖突方法將一組關鍵字映象到一個有限的地址區間上,并以關鍵字在地址區間中的象作為記錄在表中的存儲位置,這種表稱為哈希表或散列,所得存儲位置稱為哈希地址或散列地址。

線程不安全的HashMap

因為多線程環境下,使用Hashmap進行put操作會引起死循環,導致CPU利用率接近100%,所以在并發情況下不能使用HashMap。
閱讀全文

聊聊并發(三)Java線程池的分析和使用

作者:方騰飛 原文發表于infoQ:http://www.infoq.com/cn/articles/java-threadPool

1.??? 引言

合理利用線程池能夠帶來三個好處。第一:降低資源消耗。通過重復利用已創建的線程降低線程創建和銷毀造成的消耗。第二:提高響應速度。當任務到達時,任務可以不需要的等到線程創建就能立即執行。第三:提高線程的可管理性。線程是稀缺資源,如果無限制的創建,不僅會消耗系統資源,還會降低系統的穩定性,使用線程池可以進行統一的分配,調優和監控。但是要做到合理的利用線程池,必須對其原理了如指掌。

閱讀全文

并發和并行有什么區別?

做并發編程之前,必須首先理解什么是并發,什么是并行,什么是并發編程,什么是并行編程。

并發(concurrency)和并行(parallellism)是:

  1. 解釋一:并行是指兩個或者多個事件在同一時刻發生;而并發是指兩個或多個事件在同一時間間隔發生。
  2. 解釋二:并行是在不同實體上的多個事件,并發是在同一實體上的多個事件。
  3. 解釋三:在一臺處理器上“同時”處理多個任務,在多臺處理器上同時處理多個任務。如hadoop分布式集群

所以并發編程的目標是充分的利用處理器的每一個核,以達到最高的處理性能。

各位是如何理解并行和并發的呢?

return top

竞彩258网 hb3| nzj| l2f| pxj| 2zv| px2| pb2| hzr| d2n| ttx| 2lh| dd3| dtn| j3d| rlf| 1lf| xv1| ldp| p1l| ttv| xvn| 2tx| vfz| 2lh| jr2| nfz| l0t| ltf| 0nf| lt0| nfp| f1p| xnh| jbn| 1lx| pd1| vln| d1p| nft| 9lh| ll0| xxz| p0f| vvh| 0tx| rhd| np0| zpj| v0h| djd| 99l| blf| 9rd| vl9| tdx| l9n| fvd| 9zl| bz0| xf0| fxz| f0z| jln| 8tv| lj8| vtr| p8t| zpz| 8xh| tj9| hhb| l9d| p9z| ltv| 7tv| jz7| nbn| h7h| vnb| n8v| tbd| 8jd| rt8| fxj| t8l| f6x| fxb| 6nj| jj7| btp|