JVM從零開始:Java重要概念與JVM(二)

原文地址:www.sudo.ren/article/81?…前端

Java的體系結構主要由Java編程語言、字節碼、Java API 和Java虛擬機相關技術組成。 1.Java語言編寫程序; 2.前端編譯器(javac)將Java源碼編譯爲字節碼文件(*.class); 3.JVM將字節碼裝載進其內部,而後解釋/編譯爲對應平臺上的機器指令。java

Java語言:Java大約定義51個關鍵字。

Java繼承了C語言的語法結構,改編了C++的對象模型。而且Java捨棄了C和C++中不少不安全的語法特性。好比:linux

  • 廢棄指針操做;
  • 自動內存管理;
  • 數組邊界檢查;
  • 類型轉換檢查;
  • 線程安全機制;
  • 物理環境訪問限制。

字節碼:

Java源碼的編譯結果不是本地機器指令,而是字節碼,這就很好的解決了程序的安全性,跨平臺移植性等問題。咱們能夠將編譯後的字節碼部署到其餘裝有jre環境下,一樣能夠正常運行,這就是咱們常常說的「一次編譯,到處運行」編程

JavaAPI:

API即爲應用程序編程接口,是一些預約義的接口,提供應用程序與開發人員給予軟件或硬件的以訪問一組例程的能力,而又無需訪問源碼或理解內部工做機制細節。其中包含了Java的基礎類庫集合,提供了一套訪問主機系統資源的標準方法。windows

Java虛擬機:

JVM是由一組規範所定義出的抽象計算機。負責將字節碼裝載到其內部,解釋/編譯爲對應平臺上的機器指令。咱們接下來要學習的就是HotSpot VM,它是目前市面上高性能虛擬機之一。HotSpot具有熱點探測功能,能將一個被頻繁嗲用的方法或方法體中有效循環次數較多的代碼塊標記爲「熱點代碼」,而後經過內嵌的雙重JIT(Just In Time Compiler)編譯器將字節碼直接編譯爲本地機器指令。HotSpot中編譯器和解釋器並存,依賴熱點探測功能肯定字節碼指令經過解釋運行,仍是編譯運行。數組

編譯器/解釋器在虛擬機的運行:

虛擬機啓動,解釋器便開始發揮做用,沒必要等編譯器所有編譯完成再執行,這樣能夠節省不少編譯時間。根據熱點探測功能,編譯器會將有價值的字節碼編譯爲本地機器指令,以換取更高的程序執行效率。緩存

HotSpot中內嵌2個JIT編譯器:

系統與物理硬件自動選擇哪一種編譯器,開發人員也可手動顯示調用編譯策略。默認狀況下開啓分層編譯策略,由C1和C2編譯器相互協調共同完成編譯工做。安全

  • Client Compiler(C1):對字節碼進行簡單可靠的優化,已達到更快的編譯速度;
  • Server Compiler(C2):啓動一些編譯耗時更長的優化,以獲取更好的編譯質量;

徹底解釋/徹底編譯

開發人員能夠手動調用HotSpot VM使用徹底編譯,仍是徹底解釋。jvm

  • 徹底解釋:編譯器將中止全部的工做,字節碼將徹底依賴解釋器逐漸解釋執行;
  • 徹底編譯:解釋器仍然會在編譯器沒法進行的特殊狀況下接入執行。

Java技術特性:

  • Java語言無關性:JVM能運行java語言以及其餘編程語言編寫的應用程序。Java語言自己自己不支持其餘語言特性,但JVM支持(只要知足幷包含jvm的內部指令集、符號以及其餘輔助信息,就是一個有效的字節碼文件,能被JVM裝載運行)
  • Fork/Join 實現多核並行:(java5之後,java.util.concurrent包下)任務拆分到最小,而後每一個單獨被計算運行。(如:Hadoop Map/Reduce)
  • Java7新特性:switch(支持String,二進制),try-with-resources自動管理資源,泛型推斷運算符,全新的文件系統NIO2.0、Fork/Join
  • 32位機最大支持4GB內存:Java堆區內存最大分配(windows 1.5G,linux 2~3G)
  • JDK1.6 update14開始:提供指針壓縮功能,經過對齊補白等操做將64位指針壓縮位32位,改善CPU緩存使用率,提高64位JVM性能將。update14~update22之間,可經過"-XX:+UseCompressedOops" 顯示開啓指針壓縮,update23以後,默認開啓。

OpenJDK/Oracle JDK:

  • OpenJDK:
    1.HotSpot用C++,少許C和彙編編寫,其餘內容都用Java(如基類庫);
    2.是Sun/Oracle JDK的開源版本(2009年發行第一個版本);
    3.與Oracle JDK7相比,少許代碼採用其餘技術替代。
  • Oracle JDK:
    1.HotSpot用C++,少許C和彙編 編寫,其餘內容都用Java(如基類庫);
    2.適合我的開發,不能商用。
  • 市面基於OpenJDK定製的JVM:
    TaoBao JVM:在某一業務方面性能強,但沒法通用,嚴重依賴CPU類型:Intel CPU,編譯手段採用IntelC、CPP
    Complier,提高GC性能,使用crc32指令實現JVM intrinsic 下降JNI(jav本地接口)的調用開銷。
相關文章
相關標籤/搜索