jvm(1)

學到jvm一頭霧水,不知道是幹啥用的。後來度娘了一下,有點了解了,大概意思就是說用java編寫的源代碼,要通過jdk這個工具進行編輯,編譯成java虛擬機能夠識別的語言,才能夠運行。初步瞭解是這麼個意思。java

jvm是java程序運行的環境,有本身運行的生命週期數組

想要了解jvm和內存溢出有什麼關係,先了解一下什麼是內存溢出緩存

內存溢出:就是你要求分配的java虛擬機的內存超出了系統給你的,系統不能知足,因此溢出。服務器

內存泄露:指你向系統申請的分配的內存進行使用,能夠使用完了又沒有進行歸還,沒有delete,結果被申請分配的那塊內存本身也不能再訪問,沒法再被從新使用,隨着服務器不斷的消耗內存,會產生沒法使用的內存會愈來愈多,系統也不能將他在分配給其餘的須要程序去使用,產生內存泄露,一直下去,程序無內存使用,就會產生內存溢出。jvm

sun jdk遵守jvm規範,將內存劃分爲方法區、堆、jvm方法棧、本地方法棧和pc寄存器xss

方法區:存放要加載的類和接口的信息,static變量、常量、經過class對象獲取的相關數據,這塊區域成爲持久帶,默認最小值16mb,最大值64mb,可經過-xx:permsize 及 xx:maxpermsize 來設置最大值和最小值工具

堆:heap memory,存放實例和數組值,heap中的對象所佔用的內存由gc進行回收,在32位系統中最大爲2G,64位系統大小無限制,可經過-xms 和-xmx控制,-xms是jvm啓動時申請的最小的heap內存,-xmx是jvm可申請的最大的內存。spa

方法棧:每一個線程都對建立pc寄存器和方法棧,方法棧爲線程私有,放方法運行完畢後,該方法的站貞所佔用的空間會自動釋放,方法棧空間不足,可經過-xss進行設置線程

新生代由伊甸園區和兩個大小相同的survivor space構成,可經過-xmn制定新生代的大小,對象

對象由新生代建立,在伊甸園區進行存放數據,當伊甸園區滿了的時候,jvm垃圾回收器對其進行回收,不被使用的對象將對其進行銷燬,仍然被使用的對象轉移到s0區,s0區滿後,轉移到s1區。

舊生代中存放通過屢次垃圾回收後仍然被使用存活的對象,例如緩存對象,佔用大小爲,xmx值-xmn的值

相關文章
相關標籤/搜索