什么是JVM


1:什么是jvm

是運行所有Java程序的抽象計算機,運行所有Java程序的抽象計算機,是Java語言的運行環境,它是Java 最具吸引力的特性之一。

java的跨平台是必須要有jvm的支持,就是不同平台支持jvm,然后才能一份java程序在不同平台運行。

參考: java虛擬機

2:進程角度

虛擬機jvm就是一個操作系統中的進程實例

jvm在操作系統中運行,進程是操作系統的執行單位,啟動一個java的程序,就是一個JVM進程實例,虛擬機進程啟動就緒,然后由虛擬機中的類加載器加載必要的class文件,包括jdk中的基礎類(如String和Object等),然后由虛擬機進程解釋class字節碼指令,把這些字節碼指令翻譯成本機cpu能夠識別的指令,才能在cpu上運行。

3: jvm如何吃進java語言編寫的程序?

java虛擬機內部,有一個叫做類加載器的子系統,這個子系統用來在運行時根據需要加載類,

"根據需要"
在Java虛擬機執行過程中,只有他需要一個類的時候,才會調用類加載器來加載這個類,並不會在開始運行時加載所有的類。

4:jvm如何處理java的字節碼文件?

由虛擬機加載的類,被加載到Java虛擬機內存中之后,虛擬機會讀取並執行它里面存在的字節碼指令。虛擬機中執行字節碼指令的部分叫做執行引擎。Java虛擬機會進行自動內存管理。具體說來就是自動釋放沒有用的對象,而不需要程序員編寫代碼來釋放分配的內存。這部分工作由垃圾收集子系統負責。

從上面的論述可以知道, 一個Java虛擬機實例在運行過程中有三個子系統來保障它的正常運行,分別是類加載器子系統, 執行引擎子系統和垃圾收集子系統。 如下圖所示:

 
image.png

虛擬機的運行,必須加載class文件,並且執行class文件中的字節碼指令。它做這么多事情,必須需要自己的空間。就像人吃下去的東西首先要放在胃中。這里的空間就是內存了。

5: 什么是jvm的空間或者內存?

虛擬機也需要空間來存放個中數據。首先,加載的字節碼,需要一個單獨的內存空間來存放;一個線程的執行,也需要內存空間來維護方法的調用關系,存放方法中的數據和中間計算結果;在執行的過程中,無法避免的要創建對象,創建的對象需要一個專門的內存空間來存放。

 
image.png

小結:

1: 虛擬機並不神秘,在操作系統的角度看來,它只是一個普通進程

2: 這個叫做虛擬機的進程比較特殊,它能夠加載我們編寫的class文件。如果把JVM比作一個人,那么class文件就是我們吃的食物。

3: 加載class文件的是一個叫做類加載器的子系統。就好比我們的嘴巴,把食物吃到肚子里。

4: 虛擬機中的執行引擎用來執行class文件中的字節碼指令。就好比我們的腸胃,對吃進去的食物進行消化。

5: 虛擬機在執行過程中,要分配內存創建對象。當這些對象過時無用了,必須要自動清理這些無用的對象。清理對象回收內存的任務由垃圾收集器負責。就好比人吃進去的食物,在消化之后,必須把廢物排出體外,騰出空間可以在下次餓的時候吃飯並消化食物。

后面將分析類加載子系統,內存分配,垃圾收集子系統的原理

來一張框架圖:


 
 類加載系統

 https://www.cnblogs.com/lanqingzhou/p/12374340.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM