111 Java內存模型

併發產生的緣由是:「編譯器和處理器」在程序執行時會對程序進行的重排序。html

       重排序的緣由是:爲了提升程序的併發度,從而提升性能!可是對於多線程程序,重排序可能會致使程序執行的結果不是咱們須要的結果!所以,就須要咱們經過「volatile,synchronize,鎖等方式」做出正確的實現同步。java

http://www.cnblogs.com/skywang12345/p/3447546.html算法

 

內存案例多線程

https://mp.weixin.qq.com/s/aLMJkbRAgTDwYV8GO0psQg併發

 

不一樣的垃圾回收器的比較

CMS回收器性能

這個算法在兩種狀況下會進入一個」stop the world」的模式:spa

當進行根對象的初始標記的時候 (老生代中線程入口點或靜態變量可達的那些對象)線程

以及當這個算法在併發運行的時候應用程序改變了堆的狀態使得它不得不回去再次確認本身標記的對象都是正確的。設計

使用這個回收器最大的問題就是會碰到promotion failure,這是指在回收新生代及年老代時出現了競爭條件的狀況。若是回收器須要將年輕的對象提高到年老代中,而這個時候年老代沒有多餘的空間了,它就只能先進行一次STW(Stop The World)的full GC了htm

另外一個缺點就是和並行回收器相比,它使用的CPU資源會更多,它使用了多個線程來執行掃描和回收,這樣才能讓應用持續提供更高級別的吞吐量。

堆小於4G,而你又但願分配更多的CPU資源以免應用暫停,那麼這就是你要選擇的回收器。

 

G1回收器

若是堆大於4G的話,你可能更但願使用最後的這個——G1回收器。

它的設計目標是能更好地支持大於4GB的堆。G1回收器將堆分爲多個區域,大小從1MB到32MB不等,並使用多個後臺線程來掃描它們。G1回收器會優先掃描那些包含垃圾最多的區域,這正是它的名字的由來(Garbage first)。這個回收器能夠經過-XX:UseG1GC標記來啓用。

這一策略減小了後臺線程還未掃描完無用對象前堆就已經用光的可能性,而那種狀況回收器就必須得暫停應用,這就會致使STW回收。G1的另外一個好處就是它老是會進行堆的壓縮,而CMS回收器只有在full GC的時候纔會幹這事。

https://mp.weixin.qq.com/s/k2IOceZyYslj-50e78hg7A

 

http://www.liuhaihua.cn/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3java%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8B

相關文章
相關標籤/搜索