java虛擬機(jī)最大最小內(nèi)存參數(shù)設(shè)置 java虛擬機(jī)內(nèi)存模型?
java虛擬機(jī)內(nèi)存模型?的。方法區(qū)域也被稱為 "永久世代 "和 "非堆 "。它用于存儲虛擬機(jī)加載的類信息、常量和靜態(tài)變量,是每個(gè)線程共享的內(nèi)存區(qū)域。默認(rèn)的最小值是16MB,最大值是64MB??梢杂脜?shù)
java虛擬機(jī)內(nèi)存模型?
的。方法區(qū)域也被稱為 "永久世代 "和 "非堆 "。它用于存儲虛擬機(jī)加載的類信息、常量和靜態(tài)變量,是每個(gè)線程共享的內(nèi)存區(qū)域。默認(rèn)的最小值是16MB,最大值是64MB??梢杂脜?shù)-XXF:MaxPermSize來限制方法區(qū)的大小.運(yùn)行時(shí)常量池:它是方法區(qū)的一部分。除了類的版本、字段、方法、接口等描述信息,還有一個(gè)常量池,用于存儲編譯器生成的各種符號引用,在類加載后會放入方法區(qū)的運(yùn)行時(shí)常量池。?虛擬機(jī)堆棧描述了java方法執(zhí)行的內(nèi)存模型:當(dāng)每個(gè)方法被執(zhí)行時(shí),一個(gè) "堆棧框架和用來存儲局部變量表(包括參數(shù))、操作棧、方法出口等信息。每個(gè)方法都被調(diào)用到執(zhí)行結(jié)束,對應(yīng)一個(gè)棧幀在虛擬機(jī)棧中從進(jìn)入棧到退出棧的過程。聲明期和線程的聲明期一樣,是線程私有的。局部變量表存儲了編譯器已知的各種基本數(shù)據(jù)類型(boolean,byte,char,short,int,*noat,long,double)和對象引用(引用指針,不是對象本身),其中64位的long和double數(shù)據(jù)會占用兩個(gè)局部變量的空間,其余數(shù)據(jù)類型只占用一個(gè)。局部變量表所需的內(nèi)存空間是在編譯過程中分配的。在進(jìn)入一個(gè)方法時(shí),該方法需要在堆??蚣苤蟹峙涠嗌賯€(gè)局部變量是完全確定的,在運(yùn)行時(shí)堆??蚣懿粫淖兙植孔兞勘淼拇笮】臻g。?本地方法?;旧项愃朴谔摂M機(jī)棧,除了虛擬機(jī)棧服務(wù)于由虛擬機(jī)執(zhí)行的java方法,而本地方法棧服務(wù)于Nativ e方法。?堆也叫java堆。GC堆是java虛擬機(jī)管理的最大內(nèi)存區(qū)域,也是所有線程共享的內(nèi)存區(qū)域。它在JVM啟動(dòng)時(shí)創(chuàng)建。這個(gè)內(nèi)存區(qū)域存儲對象實(shí)例和數(shù)組(所有新對象)。其大小由參數(shù)-Xms(最小值)和-Xmx(最大值)設(shè)置,其中-Xms是JVM啟動(dòng)時(shí)請求的最小內(nèi)存,默認(rèn)為操作系統(tǒng)物理內(nèi)存的1/64但小于1g,-Xmx是JVM可以申請的最大內(nèi)存,默認(rèn)為物理內(nèi)存的1/4但小于1G。默認(rèn)情況下,當(dāng)空閑堆內(nèi)存小于40%時(shí),JVM會將堆增加到-xm。當(dāng)空閑堆內(nèi)存大于70%時(shí),JVM會將堆大小減小到-Xms指定的大小,這可以通過xx :maxheap實(shí)現(xiàn)。用于指定該比較列的注釋。對于正在運(yùn)行的系統(tǒng),為了避免在運(yùn)行時(shí)頻繁調(diào)整堆的大小,通常會將-Xm s和-Xmx的值設(shè)置為相同。因?yàn)楝F(xiàn)在的收集者采用分代收集算法,所以堆分為新生代和舊時(shí)代。新生代主要存儲新創(chuàng)建的對象和尚未進(jìn)入舊時(shí)代的對象。舊時(shí)代存儲了許多新一代GC(次要GC)遺留下來的對象。。新生代:程序新創(chuàng)建的對象都是從新生始分配內(nèi)存的,新生代由伊甸園空間和兩個(gè)大小相同的幸存者空間組成(通常稱為S0和S1或者From和T)。),新一代的大小可以通過-Xmn參數(shù)指定,伊甸園空間和幸存者空間的大小也可以通過-xx:survival調(diào)整。Old age:用于存儲經(jīng)歷了許多代GC的對象,比如緩存對象。新創(chuàng)建的對象也可以直接進(jìn)入舊時(shí)代。主要有兩種情況:①。通過設(shè)置啟動(dòng)參數(shù)-xx :p
學(xué)習(xí)java虛擬機(jī)有什么用?
學(xué)習(xí)java虛擬機(jī)主要是了解運(yùn)行時(shí)環(huán)境的原理,以便后期優(yōu)化程序或者虛擬機(jī)本身的時(shí)候用到。
當(dāng)初我們軟件開發(fā)完成后,虛擬機(jī)本身的默認(rèn)配置就足夠了,不需要太多用戶。但是,當(dāng)我們的軟件越來越復(fù)雜,用戶數(shù)量不斷上升的時(shí)候,我們會發(fā)現(xiàn)虛擬機(jī)本身會成為一個(gè)性能瓶頸。然后我們需要優(yōu)化虛擬機(jī)。怎么優(yōu)化呢?當(dāng)然,我們需要知道虛擬機(jī)是如何工作的,內(nèi)存是如何管理的,類是如何加載的等等。然后通過jdk s自己的工具或者其他工具來分析我們的軟件程序,找到瓶頸,進(jìn)行有針對性的優(yōu)化。