My java——JVM(內存)二

    續 My java——JVM(java 虛擬機)一 http://my.oschina.net/mynote/blog/113572 這裏繼續對java作深刻的理解。
    從(一)中說明了JVM就等同於操做系統,咱們在學習操做系統的時候就會理解內存,那麼JVM也有內存處理嗎?
    其實每一個單獨java程序都會啓動一個JVM,同時也指定JVM的內存大小,因此若是程序太大,就會報錯「java.lang.OutOfMemoryError」。有事咱們在運行Tomcat中的web程序就會出現這個緣由,由於Tomcat默認也是使用的是JVM默認的內存,通常是物理內存的1/4,因此若是是4G的物理內存,JVM默認最大的使用內存是1G,超過1G就會報錯。也許咱們在用Eclipse的時候,也會起動JVM,咱們能夠看配置文件eclipse.ini中有 java

-Xms40m
-Xmx512m

這個也就是表明咱們在起動eclipse的時候默認啓動內存是40M,最大內存512M,因此咱們的eclipse的內存就運行在之間。配置JVM通常有四個參數: c++

-Xmx    Java Heap最大值,默認值爲物理內存的1/4,
        最佳設值應該視物理內存大小及計算機內其餘內存開銷而定;

-Xms    Java Heap初始值,Server端JVM最好將-Xms和-Xmx設爲相同值,
        開發測試機JVM能夠保留默認值;

-Xmn    Java Heap Young區大小,不熟悉最好保留默認值;

-Xss    每一個線程的Stack大小,不熟悉最好保留默認值;
咱們能夠在命令行中來設置運行JAVA的JVM信息。

java -Xmx128m -Xms64m -Xmn32m -Xss16m Test   
這裏的Test就一個科=可運行的class文件
固然若是用eclipse運行,也能夠配置,以下圖:


因此JVM的啓動都會有相應的內存指定。 web

其實-Xmx的配置不是能夠無限的設置的,除了本機的內存還與系統有關,能夠參考jvm在不一樣系統中的最大內存空間地址    好比在windows下2G的內存最多把-Xmx1500M左右,其實咱們通常寫的程序1G的最多空間以足以,空間越大,垃圾回收就用時了,因此按照本身配置-Xmx。 編程

    配置很少說,前面有兩個-Xmn、-Xss還不知道是是麼?那咱們就看一下JVM有哪些分類。咱們學過操做系統,內存都有不少分類寄存器、RAM、ROM、DRAM……到目前我仍是沒有分清楚,那麼JVM也有內存分類嗎? windows

    其實JVM也有五個地方能夠存儲數據。 eclipse

1、寄存器,這裏是最快的,咱們都知道這個是CUP中的存儲區域,固然最快。但咱們寫JAVA程序就不能控制寄存器,也感受不到她的存在(c、c++是能夠的)。因此在咱們編程中與它的關係不大,不過它的確存在。 jvm

2、堆棧,存儲java的一些特殊的對象。 學習

3、,存儲咱們new的對象,所說的垃圾回收,應該就是處理這個堆把。 測試

4、常量存儲(不懂) spa

5、非RAM存儲(不懂)

ok,內存值得學習,一下,繼續研究。

相關文章
相關標籤/搜索