當前位置:編程學習大全網 - 源碼下載 - JVM基礎和內存區域剖析

JVM基礎和內存區域剖析

概念

特點

先進後出

虛擬機棧:用戶描述Java方法執行的內存模型

棧幀:虛擬機棧中的棧元素(用於支持虛擬機進行方法調用和方法執行的數據結構)包括局部變量表、操作數棧、動態鏈接、方法出口

1.主要存儲:

2.數據過多會導致OutOfMemoryError異常

< JDK 1.8

>=JDK1.8

和永久代的區別:

1.存儲位置不同,永久代物理上是堆的壹部分,和新手代,老年代地址是連續的,而元空間屬於本地內存;

2.存儲內容不同,元空間存儲類的元信息,靜態變量和常量池等並入堆中;

3.相當於永久代的數據被分到了堆和元空間中

直接內存:避免native空間和java堆中來回進行復制

虛擬機啟動時創建,用於存放對象實例,幾乎所有的對象(包含常量池)都在堆上分配內存,當對象無法再該空間申請到內存時將拋出OutOfMemoryError異常。同時也是垃圾收集器管理的主要區域。可通過 -Xmx –Xms 參數來分別指定最大堆和最小堆

GC主要管理區域,可以通過-Xmx和Xms來設置最大和最小值,也可以通過-XX:NewSize -XX:MaxNewSize設置年輕代初始大小

超出空間大小會拋出OutOfMemoryError異常

新生區

新生區分為兩個部分:伊甸區(Eden space)和幸存者區(survivor space)

伊甸區(Eden space)

大部分對象都會在Eden區誕生,並且壹段時間不使用就會被GC回收

幸存者區(survivor space)

存在壹段時間還在使用的對象會進入survivor區,survivor區包含壹個相對的From區和to區,兩者來回copy,回收沒用的對象,用來延長對象的生命周期。

老年區(old FullGC)

經過多次GC仍然存在的對象會移動到老年區中,若老年區也滿了,則會產生MajorGC(Full GC),對老年區進行內存清理(STW),若老年區執行了Full GC之後發現還是無法進行對象的報錯,那麽就會產生OOM異常”OutOfMemoryError“

問題:空間不連續,浪費空間

復制算法有2塊壹樣大小的空間,情況對象時將可用的對象移動到to區裏,復制算法內存空間連續

問題:要用2塊空間,所以內存的模型from和to非常的小

只用壹塊空間,先進行標記無用對象,然後整理內存空間地址,最後清除

它只有壹條GC線程,且就像前面說的,它在運行的時候需要暫停用戶程序(stop the world)STW

它有多條GC線程,且它也需要暫停用戶程序(stop the world)STW

它有壹條或多條GC線程,且它需要在部分階段暫停用戶程序(stop the world),部分階段與用戶程序並發執行

serial(用於新生代,采用復制算法)、serial old(用於年老代,采用標記/整理算法)

parNew(用於新生代,采用復制算法)、Parallel

Scavenge(用於新生代,采用復制算法)、Parallel

old(用於年老代,采用標記/整理算法)

concurrent mark sweep[CMS] (用於年老代,采用標記/清除算法)

  • 上一篇:潮汕拜神風俗有哪些?
  • 下一篇:如何獲取Lucene索引文件中的所有關鍵詞
  • copyright 2024編程學習大全網