<Java相關的有些事>
Java是靜態(tài)震贵,強類型利赋,面向對象編程的語言,有完備的功能屏歹,能編寫多種程序隐砸。
JDK是Java語言的軟件開發(fā)工具包,包括Java運行環(huán)境(JVM和類庫)蝙眶,JAVA工具季希,包括:編譯工具褪那,監(jiān)控工具等。
JVM是Java虛擬機式塌,是JAVA語言和操作系統(tǒng)的中間層博敬,JVM屏蔽了操作系統(tǒng)及硬件的細節(jié)從而實現(xiàn)跨平臺,Java語言編譯后的字節(jié)碼由JVM執(zhí)行峰尝。同時JVM作為強大的平臺偏窝,支持其他語言,如:Scala武学,Groovy祭往,Kotlin等。
1-Java版本
主要長期支持版本Java8火窒,Java11硼补,Java17
Java8,2014年發(fā)布熏矿,Lambda表達式已骇,默認方法接口,流和日期時間庫
Java11票编,2018年發(fā)布褪储,模塊化系統(tǒng)
Java17,2021年發(fā)布慧域,Switch鲤竹,Records
發(fā)行版本
就源代碼而言,只有一套Java源代碼吊趾,存在OpenJDK項目中宛裕,但只是源代碼,發(fā)行版本需要根據不同平臺進行編譯论泛,所以就會存在不同的發(fā)行版本揩尸,主要版本如下:OpenJDK,免費且沒有商標屁奏,java17下載岩榆,適合大部分用戶
OracleJDK,帶商標的商業(yè)版坟瓢,java17下載勇边,”更好“的那個折联,商業(yè)支持
AdoptOpenJdk粒褒,提供HotSpot和OpenJ9虛擬機,國內鏡像下載其他Azul Zulu诚镰,阿里Dragonwell奕坟,華為畢昇JDK祥款,各有特色,按需選擇月杉。
JVM生態(tài)(2021年)
44.1%在生產中使用AdoptOpenJDK發(fā)行版
61.5%在生產中使用Java 11刃跛,60%使用Java 8
91%使用java,18%使用Kotlin
Spring主導java世界
Docker版本
基礎鏡像主要受操作系統(tǒng)和文件大小的影響苛萎,主要版本如下:
openjdk:17-jdk-alpine[181M]基于alpine linux桨昙,小巧,簡單腌歉,安全但功能完備蛙酪,常用
openjdk:11-jdk-stretch[297M]基于debian,功能完整
openjdk:11-jre-slim[76M]該版本去掉了UI究履,鍵盤滤否,鼠標相關庫,更加精簡*alpine版本沒有字體支持最仑,excel導出會報錯,可以根據此鏡像自定義帶字體鏡像炊甲,文件見項目openjdk-17-font
2-Java配置
為什么需要環(huán)境變量
你想打開一個程序泥彤,必須知道它的絕對位置,比如運行記事本:C:\Windows\System32\notepad.exe卿啡,通過該地址就可以運行記事本程序吟吝,每次運行都需要輸入很長的路徑是個很繁瑣的事情,如果不用寫地址颈娜,直接執(zhí)行就好了剑逃。為了實現(xiàn)[不用寫地址]功能,就出現(xiàn)了環(huán)境變量官辽∮蓟牵可以把操作系統(tǒng)作為一個最大的軟件,環(huán)境變量就是軟件中全局變量同仆,即操作系統(tǒng)提供給的全局變量。
需要設置那些環(huán)境變量
PATH:PATH是操作系統(tǒng)用的,指定操作系統(tǒng)自動搜索的路徑帝火,在該目錄下的執(zhí)行文件可以[不用寫地址]秘蛔,直接執(zhí)行。
JAVA_HOME:一個約定岁忘,通常指JDK的目錄(非java執(zhí)行路徑)辛慰,大部分程序會默認從環(huán)境變量中獲取。JAVA_HOME這個變量干像。在這個路徑下應該能夠找到bin,lib等目錄帅腌。例如辱志,Tomcat的.bat/.sh文件中就會默認獲取JAVA_HOME來用,具體代碼見https://github.com/apache/tomcat/blob/trunk/bin/catalina.bat
*Java其實是一個綠色軟件狞膘,無需安裝即可使用揩懒,一般直接解壓,并設置相應環(huán)境變量即可挽封。
參考:綠色Java(免安裝版Java已球,JavaFX etc.) - 知乎 (zhihu.com)
多版本共存
使用windows+IDEA的情況
使用Terminal的Project Settings,Terminal可以設置項目的環(huán)境變量辅愿,它會覆蓋系統(tǒng)環(huán)境變量智亮,從而在Terminal中執(zhí)行命令時使用特定版本,Terminal-Settings-Project Settings点待,具體說明使用Terminal設置shell阔蛉,比如git bash,這樣就可以使用git環(huán)境命令癞埠,Terminal-Settings-Application Settings-Shell path
Tomcat指定版本
tomcat在沒有設置環(huán)境變量的情況下状原,可以通過如下方式指定java版本。
通過catalina.sh中指定JAVA_HOME="/usr/local/share/jdk-zulu-8"即可指定具體版本苗踪。
通過JAVA_OPTS="$JAVA_OPTS -Xms1024m -Xmx1024m"即可設置JVM參數(shù)颠区。
3-JVM
HostSpot:目前使用范圍最廣的Java虛擬機,主要垃圾回收器包括:
串行收集器(Serial GC):開啟方式:-XX:+SerialGC通铲,單線程方式毕莱,整個掃描和復制,適用于單CPU颅夺,新生代空間小朋截,對暫停時間要求不高,client級別默認GC方式吧黄。
并行收集器(Parallel GC):開啟方式:-XX:UseParallelGC部服,以吞吐量為目標,串行收集器的的多線程版本稚字,Server模式下的默認收集器饲宿。
并發(fā)標記清除收集器(CMS):開啟方式:-XX:+UseConcMarkSweepGC,減少GC執(zhí)行時的停頓時間胆描,垃圾回收線程和應用線程同時執(zhí)行瘫想,適合堆內存大,CPU核數(shù)多的服務器端應用昌讲。
G1 GC:開啟方式:-XX:+UseG1GC国夜,兼顧了吞吐量和停頓時間的GC實現(xiàn),是Oracle JDK 9后默認的GC
ZGC:開啟方式:-XX:+UseZGC短绸,JDK 11中推出的一款追求極致低延遲的實驗性質的垃圾收集器车吹,ZGC以追求低停頓為主要目標筹裕,停頓時間不超過10ms,支持16TB的堆窄驹。
TornadoVM:針對Java和JVM的高性能平臺
可在GPU朝卒,F(xiàn)PGA,或多核CPU上自動運行程序乐埠,可以在運行時將Java代碼加載到異構硬件加速器上運行抗斤。
GraalVM:下一代的Java虛擬機
高性能,云原生丈咐,多語言-為微服務而生瑞眼。
4-Java框架
SpringBoot
開發(fā)更快,更簡單棵逊,更安全伤疙,最流行的java框架,包括眾多的庫辆影,滿足大部分的需求徒像。
SpringBoot也會更臃腫,啟動速度相對較慢秸歧,云原生支持欠缺厨姚。
SpringBoot3.0+Spring Native將會是Spring的未來。
Quarkus
超音速亞原子JAVA键菱,專為OpenJDK HotSpot及GraavlVM量身定制的云原生Java開發(fā)棧,采用最佳Java語法和標準精制而成今布。
啟動超快经备,內存極低,非常適合云原生項目部默,支持相應式編程侵蒙。
micronaut
現(xiàn)代化的基于JVM的全棧框架傅蹂,用于構建模塊化且易于測試的微服務或無服務程序纷闺。
對響應式提供一流的支持,提供Spring相似的編程模型份蝴。
基礎篇-Java相關的有些事
基礎篇-SpringBoot那些事
基礎篇-Spring必須知道的
基礎篇-工欲善其事
*碼處高效-Java開發(fā)手冊
*Java架構核心寶典
**需要PDF書籍的可以私聊