1. 程式人生 > >jvm記憶體區域----執行緒共享區

jvm記憶體區域----執行緒共享區

一、堆的含義

    jvm堆的區域主要是用來存放物件的例項,它的空間大小是JVM記憶體區域中佔比重最大的,也是jvm最大的記憶體管理模組,最重要的是,這個區域是垃圾收集器主要管理的區域,這意味著我們在考慮垃圾回收優化的時候,首先就要想到堆中的區域。

二、方法區

    方法區同樣是jvm的記憶體區域,它和堆一樣,都是執行緒共享區中的記憶體區域。方法區都主要存放的是jvm載入的類資訊、常量、靜態變數、及時編譯的程式碼類資訊(這裡面主要有:1.型別的版本 2欄位 3方法 4介面 5常量池)。在方法區中,一般不進行垃圾回收,因為回收效率比較低。

 

 

三、常量池

 

    我們知道,方法區中及時編譯的程式碼中有一個常量池,那什麼是常量池呢?一般來說,所有的字串建立後都會放進常量池,常量池的資料結構是類似於HashSet的一種資料結構,我們知道HashSet的特點是無序、不重複的,那麼常量池也是這樣。但是,如果某個字串是通過new關鍵字建立的,那麼這個字串是在新的堆空間,是不會進入到常量池的,如果要想把這個字串放進常量池,可以考慮使用intern方法,而用這個方法放進的常量池成為執行時常量池。

四、直接記憶體

   直接記憶體是jvm外的記憶體,它不會受到jvm堆、棧的分配。java中的N I/O就是使用的直接記憶體。考慮到直接記憶體,是因為現在的tomcat9預設採用的是N I/O技術,而且直接記憶體的調控在硬體效能較差時有特別明顯的優點,它能夠很好的優化程式,使其能夠在理論基礎上滿足硬體效能較差的伺服器上。