<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    歲月如哥
    人生非夢
    posts - 50,comments - 144,trackbacks - 0
    首先引用jdk1.5api的doc:
    內(nèi)存 
    Java 虛擬機的內(nèi)存系統(tǒng)管理以下類型的內(nèi)存:
    1. 堆 
    Java 虛擬機具有一個堆,堆是運行時數(shù)據(jù)區(qū)域,所有類實例和數(shù)組的內(nèi)存均從此處分配。堆是在 Java 虛擬機啟動時創(chuàng)建的。對象的堆內(nèi)存由稱為垃圾回收器 的自動內(nèi)存管理系統(tǒng)回收。
    堆的大小可以固定,也可以擴大和縮小。堆的內(nèi)存不需要是連續(xù)空間。

    2. 非堆內(nèi)存
    Java 虛擬機管理堆之外的內(nèi)存(稱為非堆內(nèi)存)。 
    Java 虛擬機具有一個由所有線程共享的方法區(qū)。方法區(qū)屬于非堆內(nèi)存。它存儲每個類結(jié)構(gòu),如運行時常數(shù)池、字段和方法數(shù)據(jù),以及方法和構(gòu)造方法的代碼。它是在 Java 虛擬機啟動時創(chuàng)建的。 

    方法區(qū)在邏輯上屬于堆,但 Java 虛擬機實現(xiàn)可以選擇不對其進行回收或壓縮。與堆類似,方法區(qū)的大小可以固定,也可以擴大和縮小。方法區(qū)的內(nèi)存不需要是連續(xù)空間。

    除了方法區(qū)外,Java 虛擬機實現(xiàn)可能需要用于內(nèi)部處理或優(yōu)化的內(nèi)存,這種內(nèi)存也是非堆內(nèi)存。例如,JIT 編譯器需要內(nèi)存來存儲從 Java 虛擬機代碼轉(zhuǎn)換而來的本機代碼,從而獲得高性能。

      在網(wǎng)上找到如下的jsp來監(jiān)視內(nèi)存使用情況:
     
    <%@ page import="java.lang.management.*" %>
    <%@ page import="java.util.*" %>
    <html>
    <head>
      
    <title>JVM Memory Monitor</title>
    </head>

    <body>
    <table border="0" width="100%">
    <tr><td colspan="2" align="center"><h3>Memory MXBean</h3></td></tr>
    <tr><td
    width="200">Heap Memory Usage</td><td><%=
    ManagementFactory.getMemoryMXBean().getHeapMemoryUsage()
    %></td></tr>
    <tr><td>Non-Heap Memory
    Usage
    </td><td><%=
    ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage()
    %></td></tr>
    <tr><td colspan="2">&nbsp;</td></tr>
    <tr><td colspan="2" align="center"><h3>Memory Pool MXBeans</h3></td></tr>
    <%
            Iterator iter 
    = ManagementFactory.getMemoryPoolMXBeans().iterator();
            
    while (iter.hasNext()) {
                MemoryPoolMXBean item 
    = (MemoryPoolMXBean) iter.next();
    %>
    <tr><td colspan="2">
    <table border="0" width="100%" style="border: 1px #98AAB1 solid;">
    <tr><td colspan="2" align="center"><b><%= item.getName() %></b></td></tr>
    <tr><td width="200">Type</td><td><%= item.getType() %></td></tr>
    <tr><td>Usage</td><td><%= item.getUsage() %></td></tr>
    <tr><td>Peak Usage</td><td><%= item.getPeakUsage() %></td></tr>
    <tr><td>Collection Usage</td><td><%= item.getCollectionUsage() %></td></tr>
    </table>
    </td></tr>
    <tr><td colspan="2">&nbsp;</td></tr>
    <%%>
    </table>
    </body>
    </html>

    使用的結(jié)果(JDK1.5)正如doc描述:
      
    從檢測的結(jié)果來看,non-heap memory中,包含了perm gen和一部分jvm自用的內(nèi)存
    其中heap memory的最大值即我們指定的啟動參數(shù) -Xmx1024m所指定的1024m
    而Perm Gen的最大值即為我們指定的啟動參數(shù) -XX:MaxPermSize=128m 所指定的128m(不指定默認為64m)
    一般的OutOfMemory大部分是因為上面兩個配置參數(shù)不夠引起的。
    當然native heap 也可以產(chǎn)生OutOfMemory,如果os的java可用內(nèi)存全部分給heap了。

    如果發(fā)生oom,個人覺得首先是調(diào)整參數(shù),比如:-server -Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=128m
    如果參數(shù)調(diào)整之后還是oom,則需要考慮優(yōu)化程序了(當然首先要把死遞歸,死循環(huán)排除),最好是用工具監(jiān)測一下。

    附我們tomcat配置參數(shù)修改方案:
     

    ²     Tomcat配置的修改(%tomcat%表示tomcat實際安裝目錄)

    如果tomcat安裝在Solaris環(huán)境下,打開 %tomcat%\bin\catalina.sh 文件,在文件的前面加下面紅色字體的內(nèi)容(注意有雙引號):

        LANG=zh_CN.GB18030
                 
    export LANG
                  
    JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=128m"
                  
    export JAVA_OPTS
                  
    JAVA_OPTS="$JAVA_OPTS   -Djava.awt.headless=true"
                   
    echo $JAVA_OPTS   

    如果tomcat安裝在Windows環(huán)境下,打開 %tomcat%\bin\catalina.bat 文件,在文件的前面加下面紅色字體的內(nèi)容(注意沒有雙引號):

    set JAVA_OPTS=-server -Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=128m

    打開 %tomcat%\conf\server.xml 文件,下面這行:

          maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

    改成:

          maxThreads="250" minSpareThreads="25" maxSpareThreads="100"


    posted on 2008-09-21 20:13 歲月如歌 閱讀(5265) 評論(4)  編輯  收藏 所屬分類: java

    FeedBack:
    # re: 對jvm內(nèi)存的一些理解
    2008-09-21 21:52 | YYX
    還有stack呢,用-Xss可以調(diào)整大小  回復(fù)  更多評論
      
    # re: 對jvm內(nèi)存的一些理解
    2008-09-22 09:20 | #
    對的,還有stack,每個線程都有一個stack,好像是在《java虛擬機規(guī)范》第二版的第三章中對jvm內(nèi)存有比較詳細的解釋說明  回復(fù)  更多評論
      
    # re: 對jvm內(nèi)存的一些理解
    2008-09-22 09:23 | 小趙
    Code Cache是Non-heap memory  回復(fù)  更多評論
      
    # re: 對jvm內(nèi)存的一些理解
    2008-09-22 12:19 | 向左走向右走
    @小趙

    謝謝提醒哈,等有時間了會重新更新一下這個圖片的,會有更詳細的說明
      回復(fù)  更多評論
      
    主站蜘蛛池模板: 亚洲高清视频免费| 亚洲色偷偷偷鲁综合| 亚洲狠狠成人综合网| 青青视频观看免费99| 亚洲国产综合人成综合网站00| 91免费国产精品| 亚洲国产成AV人天堂无码| 97视频免费观看2区| 91亚洲导航深夜福利| 久久久久久久91精品免费观看| 亚洲国产综合在线| 97无码免费人妻超级碰碰碰碰 | 免费高清在线爱做视频| 未满十八私人高清免费影院| 国产成人青青热久免费精品| 免费看一级毛片在线观看精品视频| 性做久久久久免费看| 青青草97国产精品免费观看| 青青草原亚洲视频| 久操免费在线观看| 午夜成人免费视频| 在线观看亚洲精品专区| 精品亚洲一区二区三区在线观看 | 暖暖免费日本在线中文| 亚洲视频免费播放| 成人在线免费观看| 羞羞视频网站免费入口| 亚洲深深色噜噜狠狠爱网站| 1000部拍拍拍18勿入免费视频下载| 亚洲卡一卡二卡乱码新区| 人人狠狠综合久久亚洲高清| 久久国产乱子精品免费女| 亚洲的天堂av无码| 免费va人成视频网站全| 久久精品视频免费| 亚洲Av永久无码精品黑人| 韩国免费一级成人毛片| 免费无毒a网站在线观看| 久久夜色精品国产噜噜噜亚洲AV| 性短视频在线观看免费不卡流畅| 免费人成网站永久|