自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java內(nèi)存模型中的三個(gè)代

開(kāi)發(fā) 后端
本文介紹Java內(nèi)存模型中的三個(gè)代:年輕代,終身代以及永久代。文中圖示了各個(gè)代的默認(rèn)排列。本文適用于JDK 1.4到JDK6。

之前也介紹過(guò)Java內(nèi)存模型,下面主要介紹Java內(nèi)存模型中的三個(gè)代。Java的內(nèi)存模型由3個(gè)代組成,各個(gè)代的默認(rèn)排列有如下圖(適用JDK1.4.*  到 JDK6):

Java的內(nèi)存模型

Java 的內(nèi)存模型分為

Young(年輕代)

Tenured(終身代)

Perm(永久代)

有些舊版本也叫作

New

Old

Perm

叫法不同,表達(dá)的意思卻是基本相同。

注意Young(年輕代)還可以分為Eden區(qū)和兩個(gè)Survivor區(qū)(from和to,這兩個(gè)Survivor區(qū)大小嚴(yán)格一至),新的對(duì)象實(shí)例總是首先放在Eden區(qū),Survivor區(qū)作為Eden區(qū)和 Tenure(終生代)的緩沖,可以向 Tenure(終生代)轉(zhuǎn)移活動(dòng)的對(duì)象實(shí)例。

Tenure(終生代)中存放生命周期長(zhǎng)久的實(shí)例對(duì)象,但并不是如它的名字那樣是終生的,里面的對(duì)象照樣會(huì)被回收掉。

Young和Tenure共同組成了堆內(nèi)存。

Perm(永久代)則是非堆內(nèi)存的組成部分。主要存放加載的Class類(lèi)級(jí)對(duì)象如class本身,method,field等等。

有同學(xué)可能已經(jīng)注意到了,每個(gè)代都有的Virtual區(qū)又是什么?

我們知道有一些參數(shù)可以影響以上各代的大小。

在JVM啟動(dòng)時(shí),就已經(jīng)保留了固定的內(nèi)存空間給Heap內(nèi)存,這部分內(nèi)存并不一定都會(huì)被JVM使用,但是可以確定的是這部分保留的內(nèi)存不會(huì)被其他進(jìn)程使用。這部分內(nèi)存大小由 -Xmx 參數(shù)指定。

而另一部分內(nèi)存在JVM啟動(dòng)時(shí)就分配給JVM,作為JVM的初始Heap內(nèi)存使用。影響這個(gè)的參數(shù)是 -Xms ,如果 -Xms 指定的值比-Xmx 的小,那么兩者的差值就是Virtual內(nèi)存值。隨著程序的運(yùn)行,Eden區(qū)、 Tenured區(qū)和Perm區(qū)會(huì)逐漸使用保留的Virtual空間。

如果沒(méi)有具體指定,初始和最大堆內(nèi)存將根據(jù)機(jī)器的內(nèi)存計(jì)算得出。參數(shù)DefaultInitialRAMFraction DefaultMaxRAMFraction 會(huì)影響最終的結(jié)果,如下表所示:


Formula Default
initial heap size memory / DefaultInitialRAMFraction memory / 64
maximum heap size MIN(memory / DefaultMaxRAMFraction, 1GB) MIN(memory / 4, 1GB)

可以看到堆內(nèi)存默認(rèn)值最大不會(huì)超過(guò)1G。

JVM會(huì)根據(jù)堆內(nèi)存的使用情況自動(dòng)決定何時(shí)擴(kuò)張和縮減實(shí)際堆內(nèi)存的大小,可以用VM參數(shù) -XX:MinHeapFreeRatio=<minimum>-XX:MaxHeapFreeRatio=<maximum> 使用堆內(nèi)存空閑百分比來(lái)定義,一般在32位機(jī)器上的默認(rèn)值如下:

Parameter Default Value
MinHeapFreeRatio 40
MaxHeapFreeRatio 70
-Xms 3670k
-Xmx 64m

當(dāng)空閑堆內(nèi)存所占堆內(nèi)存百分比低于40%,JVM就會(huì)試圖擴(kuò)張堆內(nèi)存空間;當(dāng)空閑堆內(nèi)存所占堆內(nèi)存百分比高于70%,JVM就會(huì)試圖壓縮堆內(nèi)存空間。

ps:以上默認(rèn)值在不同平臺(tái)會(huì)有不同的值,如果是64位系統(tǒng),這些值一般需要擴(kuò)張30%,來(lái)容納在64位系統(tǒng)下變大的對(duì)象。

加上-XX:NewRatio=3 意味著 young(年輕代) 和 tenured(終生代)的比率是1:3,也就是說(shuō),eden區(qū)和survivor區(qū)容量之和將占總堆內(nèi)存的1/4。

加上-XX:SurvivorRatio=6 設(shè)置eden區(qū)和 其中一個(gè)survivor space的比率是1:6,也就是說(shuō),其中一個(gè)survivor space占年輕代1/8的容量 (可以想想為什么不是1/7)。

另外還有 -XX:NewSize -XX:MaxNewSize   指定年輕代的初始值和最大值。

32位系統(tǒng)下默認(rèn)值如下:


Default Value
Parameter Client JVM Server JVM
NewRatio 8 2
NewSize 2228K 2228K
MaxNewSize not limited not limited
SurvivorRatio 32 32

以上就介紹了Java內(nèi)存模型的三個(gè)代。

【編輯推薦】

  1. Java內(nèi)存模型詳解
  2. Java與.NET的WebServices相互調(diào)用
  3. 在Java中實(shí)現(xiàn)DOM文檔和XML文件互相轉(zhuǎn)換
  4. Java垃圾回收機(jī)制淺析
  5. Java基礎(chǔ)教程之事件和監(jiān)聽(tīng)器
  6. Java類(lèi)中域和方法設(shè)置中的常見(jiàn)錯(cuò)誤
責(zé)任編輯:yangsai 來(lái)源: JavaEye博客
相關(guān)推薦

2024-04-24 12:50:46

云端LLMs語(yǔ)言模型

2022-04-02 09:00:00

GitOps開(kāi)發(fā)團(tuán)隊(duì)

2023-04-26 11:14:11

IT領(lǐng)導(dǎo)者遠(yuǎn)程工作

2018-03-01 14:49:53

多云云計(jì)算混合云

2020-06-11 09:00:27

SDN網(wǎng)絡(luò)架構(gòu)網(wǎng)絡(luò)

2010-05-19 18:11:05

2013-04-10 18:36:41

2009-07-22 18:08:00

ASP.NET基類(lèi)

2021-06-16 12:53:57

Java編程語(yǔ)言

2012-01-06 11:13:02

SinatraJava框架

2023-11-01 08:07:42

.NETC#

2021-12-23 10:05:43

機(jī)器學(xué)習(xí)人工智能黑盒模型

2023-12-25 13:59:14

2013-04-09 17:43:33

2018-02-25 07:23:23

2010-09-02 16:46:52

SOAP協(xié)議

2022-02-21 14:14:03

SSH加密密鑰

2022-06-22 08:50:53

ERP系統(tǒng)CTO

2023-09-08 20:52:02

數(shù)字孿生測(cè)試驅(qū)動(dòng)開(kāi)發(fā)

2024-03-19 14:14:27

線程開(kāi)發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)