Java虛擬機(jī)內(nèi)存中的永久區(qū)和方法區(qū)是什么?永久區(qū)和方法區(qū)是Java虛擬機(jī)內(nèi)存中的兩個比較重要的區(qū)域,下面將對其進(jìn)行詳細(xì)的介紹。
永久區(qū)(Permanent Generation)是Java虛擬機(jī)內(nèi)存中的一個區(qū)域,主要用于存儲類的元信息、常量池等數(shù)據(jù)。永久區(qū)在Java虛擬機(jī)啟動時被創(chuàng)建,所有的類加載后所產(chǎn)生的類、對象、方法、接口等元素都會被存放在這里,直到虛擬機(jī)停止運(yùn)行。在JDK1.8之前,永久區(qū)比較容易出現(xiàn)內(nèi)存溢出的問題,所以在JDK1.8中,永久區(qū)已經(jīng)被移除,被稱為元空間(Metaspace)。
//Java中通過System類的getProperty方法獲取永久區(qū)的大小 String size = System.getProperty("sun.jnu.encoding"); System.out.println("永久區(qū)大小為:" + size);
方法區(qū)(Method Area)是Java虛擬機(jī)內(nèi)存中的另一個區(qū)域,主要用于存儲類的字段信息、方法信息、接口信息、運(yùn)行時常量池等數(shù)據(jù)。方法區(qū)和永久區(qū)是相互依存的,在JDK1.8之前,永久區(qū)和方法區(qū)在內(nèi)存中的分布是一樣的,所以一旦永久區(qū)出現(xiàn)內(nèi)存溢出的問題,方法區(qū)也會受到影響。但是在JDK1.8之后,由于永久區(qū)被移除,方法區(qū)的內(nèi)存分配和回收將與Java堆一樣,所以方法區(qū)也被稱為元數(shù)據(jù)區(qū)(Metadata Area)。
//Java中通過Runtime類的totalMemory方法獲取方法區(qū)的大小 Runtime runtime = Runtime.getRuntime(); long size = runtime.totalMemory(); System.out.println("方法區(qū)大小為:" + size);
總之,永久區(qū)和方法區(qū)都是Java虛擬機(jī)內(nèi)存中比較重要的區(qū)域,對于Java的開發(fā)者來說,了解這兩個區(qū)域的作用和特點(diǎn)是很有必要的。