成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文了解Java虛擬機的重要組成

云計算 虛擬化
JVM是JAVA平臺的重要組成之一,因涉及知識點太多,故從以下幾個方面對JVM進行淺層面的介紹。

JVM是JAVA平臺的重要組成之一,因涉及知識點太多,故從以下幾個方面對JVM進行淺層面的介紹,如果需要深入理解,推薦學習機械工業出版社的《深入理解JAVA虛擬機》。

[[243270]]

一、JAVA內存結構

Java虛擬機規范中規定的JVM運行時數據區如下圖所示:

一文了解JAVA虛擬機的重要組成

 

總體來說,分為線程共享部分(方法區、堆)和線程隔離區(虛擬機棧、本地方法棧和程序計數器)。

1.方法區

用于存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據。其中常量存儲于運行時常量區中,運行時常量區是區的一部分,用于存儲編譯期生成的字面量和符號引用。但運行時常量區的內容并不只是在編譯期間產生,通過String.intern()也可以實現在運行時向常量區中添加內容。

2.堆

是JVM中***的一塊內存區域,該區域的目的只是用于存儲對象實例及數組。該區域也是GC的最主要區域。

3.虛擬機棧

每個線程方法在執行時都會創建一個棧幀,包含局部變量表、返回地址、操作數棧等信息。每個方法的執行與完成就對應的棧幀的入棧與出棧過程 。局部變量表占用空間的大小在編譯期就確定了。

4.本地方法棧

與虛擬機棧類似,不過其中執行是本地方法。對于HotSpot虛擬機而言,本地方法棧和虛擬機棧是統一的。

5.程序計數器

是一個小的內存空間,如果線程正在執行的是一個java方法,則此內存區域記錄正在執行的虛擬機字節碼指令;如果線程正在執行的是native方法,則計算器中的值為空。

二、JAVA垃圾回收機制

JAVA的垃圾回收主要涉及到確定對象是否存活、垃圾收集等算法,其中確定對象回收算法采用的是可達性分析算法,垃圾收集目前各JVM廠商廣泛采用的是分代收集算法。這里面主要描述下分代收集算法的過程。

一文了解JAVA虛擬機的重要組成

 

分代收集算法的核心思想是將內存區域按照對象的生存周期階段進行劃分,其中將堆區劃分為新生代(young generation)和老年代(old generation)。將非堆區(一般指方法區)劃分為持久代(permanent generation)。

1.新生代

新生代又可再分為Eden區和兩個Survivor區(兩個Survivor區的大小是一樣的,便于交換)。新生成的對象都會先在新生代的Eden區進行保存。新生代的特點是每次垃圾回收都會有大量的內存被回收,而且收集比較頻繁,所以新生代適合如下的收集算法:

首先,新生成的對象分配到Eden區,如果eden區滿了,則將可達性的對象復制到survivor1區,后清空eden區。

然后,如果survivor1區滿了,則將eden區與survivor1區的可達性對象復制到survivor2區,后清空eden區和survivor1區,清空完后將survivor2區與survivor1區交換,即保持survivor2是空的。

再次,如果survivor2區也滿了,則將eden區、survivor1區、survivor2區的可達性對象復制到老年代中,并清空新生代中。

***,如果老年代也滿了,就觸發full gc了。

2.老年代

老年代的內存比新生代大的多,這個區域執行垃圾回收的頻度不高。當老年代滿時,會觸發full gc。

3.持久代

持久代一般指方法區,該區需要回收的有廢棄的常量和類。對于常量可用可達性分析的方法進行判斷回收,對于類則需要同時滿足以下條件才會被回收:

首先,該類的所有實例對象都已被回收;

其次,該類的類加載器也已被回收;

再次,該類的Class方法沒有在任何地方被引用,即無法通過在任何地方通過反射訪問到該類的方法。

4.什么時候會解決垃圾回收?

綜上所述,當eden滿時,就會觸發scavenge gc,當出現以下情況時會觸發full gc:

老年代已滿;

持久代已滿;

調用System.gc()方法;

三、JAVA類加載過程

JVM類加載過程具體裝載、驗證、準備、解析、初始化這五個部分。

1.裝載

在裝載過程中,需要完成以下事情:

1)通過類的全限定名獲取類的二進制字節流;

2)將類的二進制字節流轉換為方法區的運行時數據結構;

3)生成一個代表此類的java.lang.Class對象,作為方法區這個類的各種數據的訪問入口。

2.驗證

驗證、解析和初始化又稱為是連接階段,在驗證驗證主要是確保二進制字節流符合JVM的規范,不會危害計算機的安全。具體驗證階段需要做的事情如下:

1)文件格式驗證,驗證字節流是否符合Class文件格式規范;

2)元數據驗證,對字節碼進行語義驗證,以保證其描述信息符合JAVA語言規范;

3)字節碼驗證,通過數據流和控制流分析,確定程序語義是合法的、符合邏輯的;

4)符號引用驗證,對常量池中的各種符號引用的信息進行匹配性驗證。

3.準備

準備的過程其實是分配內存的過程。在這個階段有兩個容易產生混淆的概念:一是此階段分配內存的只是類變量(static變量),不包含實例變量,實例變量的內存分配是在對象實例化時隨對象一起分配在堆中;二是該階段分配內存中保存的值只是數據類型的零值,具體值需要在初始化階段進行賦值。也有特殊情況,就是對于靜態常量(final修飾)會在準備階段將值賦值為真實值。

4.解析

解析階段就是將常量池內折符號引用轉換為直接引用的過程,具體包括類和接口的解析、字段的解析、方法的解析、接口方法和解析。

5.初始化

初始化階段其實就是執行類構造函數(clinit)的階段。對于clinit()需要說明以下幾點:

1)clinit()中的程序是自動收集類中static變量及static塊產生的,執行順序與代碼中的順序一致。靜態語句塊中只能訪問在其之前聲明的static變量,在其之后聲明的static變量只能賦值,不能訪問。

2)執行clinit()方法前,JVM會自動調用父類的clinit()方法;

3)虛擬機會保證一個類的clinit()在多線程環境中,自動加鎖、同步。

四、JVM的類加載器

JVM的類加載是通過類加載器實現的,常用的類加載器包括下面三種:

1.啟動類加載器(bootstrap classloader):加載{JDK_HOME}/lib下的類

2.擴展類加載器(extension classloader):加載{JDK_HOME}/lib/ext下的類

3.應用程序類加載器(application classloader):加載classpath指定的類

對于不同類加載器以及他們之間的協作可以參考下面的雙親委派模型。

一文了解JAVA虛擬機的重要組成

 

雙親委派模型的工作過程是:如果一個類加載器收到了類的加載請求,會首先把請求委派給自己的父類,每個層次的類加載器都會如此,因為所有的加載請求最終都會發送到bootstarp加載器中,只有當父加載器確實無法自己完成加載請求時,子加載器才會嘗試自己加載。

雙親委派模型使得JAVA類能夠按層次進行加載,不會造成混亂。

五、JVM的相關工具

JDK中有很多強大的監控工具,可以直接在命令行運行。這對于在生產環境進行監控是非常有用的。例如SUN JDK中就包含了以下監控和故障處理工具。

jps: jvm process status tool,顯示指定系統內所有的hotspot虛擬機進程

jstat: jvm statistics monitoring tool,用于收集hotspot虛擬機各方面的運行數據

jinfo: configuration info for java,顯示虛擬機配置信息

jmap: memory map for java,生成虛擬機的內存轉儲快照(heapdump文件)

jhat: jvm heap dump browser,用于分析heapmap文件,它會建立一個http/html服務器,讓用戶可以在瀏覽器上查看分析結果

jstack: stack trace for java ,顯示虛擬機的線程快照

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2020-04-01 22:05:24

虛擬機HotSpotJava

2022-11-15 16:08:39

2019-04-13 15:23:48

網絡模型虛擬機

2020-08-27 07:34:50

Zookeeper數據結構

2021-01-07 10:04:24

容器虛擬機測試

2019-07-18 15:01:43

Linux虛擬機宿主機

2024-02-01 11:57:31

this指針代碼C++

2023-04-26 15:43:24

容器編排容器編排工具

2023-11-20 08:18:49

Netty服務器

2022-02-25 07:34:36

MQTT協議RabbitMQ

2022-06-08 08:11:56

威脅建模網絡安全網絡攻擊

2023-11-06 08:16:19

APM系統運維

2025-05-23 09:38:54

JWT開發Go

2022-11-11 19:09:13

架構

2023-12-26 07:33:45

Redis持久化COW

2022-10-28 13:48:24

Notebook數據開發機器學習

2023-12-26 12:18:02

Java設計開發

2024-01-19 11:53:29

文件系統操作系統存儲

2022-02-24 07:34:10

SSL協議加密

2023-11-08 08:15:48

服務監控Zipkin
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产亚洲成av人片在线观看桃 | 欧美精品久久久久久久久久 | 免费电影av | 免费能直接在线观看黄的视频 | 亚洲午夜视频 | 午夜视频在线观看视频 | 四虎av电影| 久久久精品黄色 | 亚洲精品乱码久久久久久9色 | 欧美一区二区三区高清视频 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 欧美一区二区在线播放 | 放个毛片看看 | 成人免费视频网站在线观看 | 超碰av在线 | 超碰在线免费av | 久久久www成人免费精品 | 国产福利91精品 | 亚洲国产一区视频 | 国产不卡一区 | 国产欧美精品在线 | 亚洲精品91| 午夜在线电影网 | 噜噜噜噜狠狠狠7777视频 | 国产一区二区三区 | 精产嫩模国品一二三区 | 国产一区h | 国产真实精品久久二三区 | 激情五月综合 | 黄色网址免费看 | 尤物在线精品视频 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | 99国产精品久久久 | 久久草在线视频 | 伊人网综合 | 免费h在线 | 99色视频| 精品日韩在线 | 中文字幕一区二区三区在线观看 | 91精品国产一区二区三区 | 国产精品久久久久久亚洲调教 |