av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

詳解JVM內(nèi)存模型使用

你對JVM內(nèi)存模型是否熟悉,這里和大家分享一下,主要包括棧和堆兩部分內(nèi)容,Java棧是與每一個線程關(guān)聯(lián)的,JVM在創(chuàng)建每一個線程的時候,會分配一定的棧空間給線程。它主要用來存儲線程執(zhí)行過程中的局部變量,方法的返回值,以及方法調(diào)用上下文。Java中堆是由所有的線程共享的一塊內(nèi)存區(qū)域,堆用來保存各種JAVA對象,比如數(shù)組,線程對象等。

JVM內(nèi)存模型

  1.1Java棧

  Java棧是與每一個線程關(guān)聯(lián)的,JVM在創(chuàng)建每一個線程的時候,會分配一定的??臻g給線程。它主要用來存儲線程執(zhí)行過程中的局部變量,方法的返回值,以及方法調(diào)用上下文。??臻g隨著線程的終止而釋放。StackOverflowError:如果在線程執(zhí)行的過程中,棧空間不夠用,那么JVM就會拋出此異常,這種情況一般是死遞歸造成的。

  1.2堆

  Java中堆是由所有的線程共享的一塊內(nèi)存區(qū)域,堆用來保存各種JAVA對象,比如數(shù)組,線程對象等。

  1.2.1Generation

  JVM內(nèi)存模型中JVM堆一般又可以分為以下三部分:

  ◆Perm

  Perm代主要保存class,method,filed對象,這部門的空間一般不會溢出,除非一次性加載了很多的類,不過在涉及到熱部署的應(yīng)用服務(wù)器的時候,有時候會遇到j(luò)ava.lang.OutOfMemoryError:PermGenspace的錯誤,造成這個錯誤的很大原因就有可能是每次都重新部署,但是重新部署后,類的class沒有被卸載掉,這樣就造成了大量的class對象保存在了perm中,這種情況下,一般重新啟動應(yīng)用服務(wù)器可以解決問題。

  ◆Tenured

  Tenured區(qū)主要保存生命周期長的對象,一般是一些老的對象,當(dāng)一些對象在Young復(fù)制轉(zhuǎn)移一定的次數(shù)以后,對象就會被轉(zhuǎn)移到Tenured區(qū),一般如果系統(tǒng)中用了application級別的緩存,緩存中的對象往往會被轉(zhuǎn)移到這一區(qū)間。

  ◆Young

  Young區(qū)被劃分為三部分,Eden區(qū)和兩個大小嚴(yán)格相同的Survivor區(qū),其中Survivor區(qū)間中,某一時刻只有其中一個是被使用的,另外一個留做垃圾收集時復(fù)制對象用,在Young區(qū)間變滿的時候,minorGC就會將存活的對象移到空閑的Survivor區(qū)間中,根據(jù)JVM的策略,在經(jīng)過幾次垃圾收集后,任然存活于Survivor的對象將被移動到Tenured區(qū)間。

  1.2.2SizingtheGenerations參考資料:

  JVM內(nèi)存模型中提供了相應(yīng)的參數(shù)來對內(nèi)存大小進(jìn)行配置。正如上面描述,JVM中堆被分為了3個大的區(qū)間,同時JVM也提供了一些選項對Young,Tenured的大小進(jìn)行控制。

  ◆TotalHeap

  -Xms:指定了JVM初始啟動以后初始化內(nèi)存

  -Xmx:指定JVM堆得***內(nèi)存,在JVM啟動以后,會分配-Xmx參數(shù)指定大小的內(nèi)存給JVM,但是不一定全部使用,JVM會根據(jù)-Xms參數(shù)來調(diào)節(jié)真正用于JVM的內(nèi)存參考資料:

  -Xmx-Xms之差就是三個Virtual空間的大小

  ◆YoungGeneration

  -XX:NewRatio=8意味著tenured和young的比值8:1,這樣eden+2*survivor=1/9

  堆內(nèi)存

  -XX:SurvivorRatio=32意味著eden和一個survivor的比值是32:1,這樣一個Survivor就占Young區(qū)的1/34.

  -Xmn參數(shù)設(shè)置了年輕代的大小

  ◆PermGeneration

  -XX:PermSize=16M-XX:MaxPermSize=64M

  ThreadStack

   -XX:Xss=128K

  1.3堆棧分離的好處

  其它的先不說了,就來說說面向?qū)ο蟮脑O(shè)計吧,當(dāng)然除了面向?qū)ο蟮脑O(shè)計帶來的維護(hù)性,復(fù)用性和擴(kuò)展性方面的好處外,我們看看面向?qū)ο笕绾吻擅畹睦昧硕褩7蛛x。如果從JAVA內(nèi)存模型的角度去理解面向?qū)ο蟮脑O(shè)計,我們就會發(fā)現(xiàn)對象它***的表示了堆和棧,對象的數(shù)據(jù)放在堆中,而我們編寫的那些方法一般都是運行在棧中,因此面向?qū)ο蟮脑O(shè)計是一種非常***的設(shè)計方式,它***的統(tǒng)一了數(shù)據(jù)存儲和運行。


分享文章:詳解JVM內(nèi)存模型使用
標(biāo)題網(wǎng)址:http://uogjgqi.cn/article/dpidjde.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流