深入理解jvm記憶體區域

2021-10-08 20:52:11 字數 665 閱讀 1430

jvm 執行記憶體的整體流程

jvm 向作業系統申請記憶體

jvm 獲得記憶體空間後,會根據配置引數分配堆、棧以及方法區的記憶體大小

xms30m -xmx30m -xss1m -xx:maxmetaspacesize=30m

類載入這裡主要是把 class 放入方法區、還有 class 中的靜態變數和常量也要放入方法區

執行方法及建立物件

常量池

class 常量池(靜態常量池)

在 class 檔案中除了有類的版本、字段、方法和介面等描述資訊外,還有一項資訊是常量池 (constant pool table),用於存放編譯期間生成的各種字面量和符號引用。

字面量:string a=「b」 ,這裡「b」就是字串字面量,同樣類推還有整數字面值、浮點型別字面量、字元字面量。

符號引用 :符號引用以一組符號來描述所引用的目標。

執行時常量池

執行時常量池是在類載入完成之後,將== class 常量池中的符號引用替換成直接引用==。

字串常量池

string intern() 方法

intern() : 傳送門

常量池乙個鏈結

還是乙個鏈結

深入理解Java虛擬機器 JVM記憶體洩漏

jvm記憶體洩漏 記憶體洩漏就是存在一些物件沒有被 這些物件是可達的,但是這些物件是無用的,那麼這些物件就存在記憶體洩漏,即不會被gc 但是卻占用記憶體。記憶體溢位主要分為以下幾種 1.靜態集合類引起記憶體洩漏 像hashmap vector等的使用最容易出現記憶體洩露,這些靜態變數的生命週期和應用...

深入理解JVM 類載入器

protected class loadclass string name,boolean resolve throws classnotfoundexception else catch classnotfoundexception e if c null if resolve return c ...

二。JVM記憶體區域

jdk1.8之前,代表jvm內一塊區域。jdk1.8之後,也就是元空間metaspace。存放類,靜態變數,常量池。總之與類有關的都在方法區。類一般先載入進方法區。寫好的 被翻譯成位元組碼,對應各種位元組碼指令。計數器就是記錄當前位元組碼指令的位置。jvm多執行緒併發操作時,每個執行緒都有自己的計數...