JVM 介紹:
JVM是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用於計算設備的規范,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。
Java語言的一個非常重要的特點就是與平台的無關性。而使用Java虛擬機是實現這一特點的關鍵。一般的高級語言如果要在不同的平台上運行,至少需要編譯成不同的目標代碼。而引入Java語言虛擬機后,Java語言在不同平台上運行時不需要重新編譯。Java語言使用Java虛擬機屏蔽了與具體平台相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(字節碼),就可以在多種平台上不加修改地運行。Java虛擬機在執行字節碼時,把字節碼解釋成具體平台上的機器指令執行。這就是Java的能夠“一次編譯,到處運行”的原因。
java 源代碼編譯過程
java 基本數據類型
其它數據類型
JVM虛擬機內存結構
JVM虛擬機將其內存分為程序計數器、虛擬機棧、本地方法棧、java堆、方法區。
程序計數器:是一塊私有的內存空間,比較小。主要記錄下一條要運行的命令。
虛擬機棧:也是線程私有的內存空間,和java線程同一時間創建,主要用來保存局部變量、部分結果、並參與方法的調用和返回。(虛擬機棧運行時使用一種叫“棧幀”的數據結構保存上下文數據。)
本地方法棧:虛擬機棧用於管理java函數的調用,本地方法棧用於管理本地方法的調用(用C實現的方法)
java堆:所有的對象、數組都是在堆中分配空間。
堆分為:新生代、老年代。
新生代:存放剛剛產生的對象和年輕對象。新生代分為:e'den(對象剛創建時)、survivor space()、1(至少被GC一次)。
方法區(永久區):被JVM中的所有線程共享(獨立於java堆的內存空間)。主要保存的是類的元數據(類的類型信息、常量池、域信息、方法信息:存放常量和類的定義信息)。GC回收時,只回收永久區中常量池的回收(未被引用的常量),再就是對類元數據的回收。
JVM百度百科地址:https://baike.baidu.com/item/JVM/2902369?fr=aladdin