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多執行緒併發操作時,每個執行緒都有自己的計數...