国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

深入理解Java內(nèi)存分配

每當(dāng)運(yùn)行一個(gè)Java程序時(shí),都會(huì)生成一個(gè)Java進(jìn)程,其中可能包含一個(gè)或多個(gè)線程。每個(gè)Java進(jìn)程對(duì)應(yīng)唯一一個(gè)JVM實(shí)例,而每個(gè)JVM實(shí)例又對(duì)應(yīng)唯一的堆,同時(shí)每個(gè)線程都有自己私有的棧。在Java中,堆

每當(dāng)運(yùn)行一個(gè)Java程序時(shí),都會(huì)生成一個(gè)Java進(jìn)程,其中可能包含一個(gè)或多個(gè)線程。每個(gè)Java進(jìn)程對(duì)應(yīng)唯一一個(gè)JVM實(shí)例,而每個(gè)JVM實(shí)例又對(duì)應(yīng)唯一的堆,同時(shí)每個(gè)線程都有自己私有的棧。在Java中,堆內(nèi)存的分配是自動(dòng)初始化的,即在為對(duì)象分配內(nèi)存時(shí),會(huì)初始化這個(gè)對(duì)象中的變量。盡管所有對(duì)象的存儲(chǔ)空間都在堆中進(jìn)行分配,但對(duì)象的引用卻是在棧中分配。接下來我們來詳細(xì)了解一下Java如何進(jìn)行內(nèi)存分配。

JVM內(nèi)存劃分概念

JVM的內(nèi)存可分為三個(gè)區(qū)域:堆(heap)、棧(stack)和方法區(qū)(method,也稱為靜態(tài)區(qū))。JVM將其內(nèi)存劃分為五個(gè)區(qū)域:

  1. 寄存器:用于內(nèi)存和CPU之間的通信。
  2. 本地方法棧:用于JVM調(diào)用系統(tǒng)功能。
  3. 方法和數(shù)據(jù)共享:運(yùn)行時(shí)期class文件所在位置。
  4. 方法棧:存儲(chǔ)所有方法運(yùn)行時(shí)期的內(nèi)存。
  5. 堆(heap):用于存儲(chǔ)容器和對(duì)象。

堆區(qū)

在堆區(qū)存儲(chǔ)的全部是對(duì)象,每個(gè)對(duì)象都包含一個(gè)與之對(duì)應(yīng)的class信息,而class的目的是獲取操作指令。JVM只有一個(gè)堆區(qū),并且被所有線程共享。堆中不存放基本類型和對(duì)象引用,而是僅存放對(duì)象本身和數(shù)組本身。

棧區(qū)

每個(gè)線程包含一個(gè)棧區(qū),棧中只保存基礎(chǔ)數(shù)據(jù)類型本身和自定義對(duì)象的引用。棧中的數(shù)據(jù)(原始類型和對(duì)象引用)都是私有的,其他棧不能訪問。棧分為三個(gè)部分:基本類型變量區(qū)、執(zhí)行環(huán)境上下文、操作指令區(qū)(存放操作指令)。

方法區(qū)(靜態(tài)區(qū))

方法區(qū)被所有線程共享,其中包含所有的class(類的原始代碼,在創(chuàng)建類的對(duì)象時(shí),需要將該類的代碼加載到方法區(qū)并進(jìn)行初始化)和static變量。方法區(qū)中包含的元素在整個(gè)程序中都是唯一的,如class和static變量。

Java虛擬機(jī)啟動(dòng)過程

當(dāng)運(yùn)行Java程序時(shí),首先會(huì)啟動(dòng)一個(gè)Java虛擬機(jī)進(jìn)程。該進(jìn)程會(huì)從classpath中找到相應(yīng)的.class文件,讀取其中的二進(jìn)制數(shù)據(jù),并將類信息存儲(chǔ)到方法區(qū)中,這便是類的加載過程。隨后,Java虛擬機(jī)定位到方法區(qū)中相應(yīng)類的方法字節(jié)碼,開始執(zhí)行指令。在main()方法中,第一條語句即可開始執(zhí)行。

標(biāo)簽: