更新時間:2020-10-22 17:14:00 來源:動力節點 瀏覽1327次
說到java,大家都知道這是一種十分流行且應用廣泛的計算機語言,接觸過java語言的人大多也都知道面向對象性、線程安全性和跨平臺性等都是它的特點。那么是什么使java語言具備了這些優秀的特性呢,JVM就是實現了眾多特性中一個的工具,這篇文章帶大家學習JVM是什么,希望java初學者可以通過下面的內容對JVM有一個總體的認識和了解。
JVM是什么,就是java虛擬機,是英文Java Virtual Machine的縮寫,是由軟件技術模擬出計算機運行的一個虛擬的計算機 ,同時JVM是構成java技術的重要一部分,先來看看java技術的結構圖:
運行期環境代表著Java平臺,開發人員編寫Java代碼(.java文件),然后將之編譯成字節碼(.class文件),JVM才能識別并運行它,JVM針對每個操作系統開發其對應的解釋器,所以只要其操作系統有對應版本的JVM,那么這份Java編譯后的代碼就能夠運行起來,這就是Java能一次編譯,到處運行的原因。
要全面的理解JVM是什么,要知道如下的內容:
1、JVM堆
Java堆是和Java應用程序最密切的內存空間,幾乎所有的對象都放到堆中。并且堆完全由JVM管理,通過垃圾回收機制,垃圾對象會被自動清理,而不需顯式的釋放。根據垃圾回收機制的不同,Java堆通常被分為以下的集中不同的結構:New Generation:由 Eden + Survivor (From Space + To Space)組成;Eden:所有的new出來的新對象都存放到Eden區;Survivor Space:Eden每次垃圾清理過后,任然沒又被清理的對象,會轉移到交換區中;Old Generation:在交換區中未被清理的對象(默認清理18次標記),將轉移到老年代。
2、JVM棧
Java棧是一塊線程私有的內存空間,Java棧和線程執行密切相關。線程的執行基本單位就是函數調用,每次函數調用的數據就會通過Java棧傳遞。Java棧與數據結構上的棧有著類似的含義,它是一塊先進后出的數據結構,只支持出棧和入棧的兩種操作。在Java棧中保存的主要內容為棧幀。每次調用一個函數,都會有一個對應的棧幀被壓入Java棧。每一個函數調用結束,都會有一個棧幀被彈出Java棧。例如:
如圖所示,每次調用一個函數都會被當做棧幀壓入到棧中。其中每一個棧幀對應一個函數。由于每次調用函數都會生成一個棧幀,從而占用一定的棧空間。如果線程中存在大量的遞歸操作,會頻繁的壓棧,導致棧的深入過于深入,當棧的空間被消耗殆盡的時候,會拋出StackOverflowError棧溢出錯誤。
3、JVM方法區
它主要存放一些虛擬機加載的類信息,常量,靜態變量,即使編譯器后的代碼等數據。根據Java虛擬機規范的規定,當方法區無法滿足內存分配需求時,將拋出OutOfMemoryError異常。運行時常量池:運行時常量區是方法區的一部分。用于存放編譯期生成的各種字面量和符號引用,這部分內容將在類加載后進入方法區的運行時常量池中存放。還會有一些符號引用轉換的直接引用一保存在運行時常量池中。運行時常量池具備動態性,也就是運行期間也可以將新的常量放入池中,例如String.intern()方法。當常量池無法再申請到內存時,會拋出OutOfMemoryError異常。
關于JVM是什么的問題,一句話總結下來就是:Java虛擬機是一種跨平臺的軟件,是一種新的網絡計算平臺。該平臺包括許多相關的技術,使得同一種應用可以運行在不同的平臺上。使用Java虛擬機是實現java語言與平臺無關性的關鍵,所以在學習了JVM是什么后,要通過java教程來學習更多的JVM其他知識。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習