上周同事去聽了阿里openJDK的講座,收集整理了一下。隨着Oracle 撒手,Java 8 官方支持時間持續到 2020 年 12 月;對商業用戶(Commercial Users),2019 年 1 月之后不再提供免費更新。
華為openJDK特性
主要講解了協程之間的優化概念,及性能優化講解
阿里openJDK特性(Alibaba Dragonwell 8 )
1.控移植上游 Java 11 的 Java Flight Recorder (JFR) 功能。
2.集成 JWarmup 技術(預熱功能)
3.提供 GC 問題診斷等 Serviceability 方面的提高。
我把知識筆記整理了一下:
1、進程
進程是具有一定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位。每個進程都有自己的獨立內存空間,不同進程通過進程間通信來通信。由於進程比較重量,占據獨立的內存,所以上下文進程間的切換開銷(棧、寄存器、虛擬內存、文件句柄等)比較大,但相對比較穩定安全。
2、線程
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。線程間通信主要通過共享內存,上下文切換很快,資源開銷較少,但相比進程不夠穩定容易丟失數據。
3、協程(用戶態線程簡稱為協程)
協程是一種用戶態的輕量級線程,協程的調度完全由用戶控制。協程擁有自己的寄存器上下文和棧。協程調度切換時,將寄存器上下文和棧保存到其他地方,在切回來的時候,恢復先前保存的寄存器上下文和棧,直接操作棧則基本沒有內核切換的開銷,可以不加鎖的訪問全局變量,所以上下文的切換非常快。
- 如果連時鍾阻塞、 線程切換這些功能我們都不需要了,自己在進程里面寫一個邏輯流調度的東西。那么我們即可以利用到並發優勢,又可以避免反復系統調用,還有進程切換造成的開銷,分分鍾給你上幾千個邏輯流不費力。這就是用戶態線程。
- 從上面可以看到,實現一個用戶態線程有兩個必須要處理的問題:一是碰着阻塞式I\O會導致整個進程被掛起;二是由於缺乏時鍾阻塞,進程需要自己擁有調度線程的能力。如果一種實現使得每個線程需要自己通過調用某個方法,主動交出控制權。那么我們就稱這種用戶態線程是協作式的,即是協程。
http://www.zhihu.com/question/20511233
6.Wisp 協程
阿里協程優化。
7.ZenGC
阿里大數據場景的定制版 ZenGC (G1 based)發布