linux應用實際內存大於 jvm xmx


文章來源: http://www.cnblogs.com/guozp/p/7845605.html

1、雖然你jvm參數設置了-Xms6g -Xmx6g,但操作系統不並會馬上分配6G的物理內存,而是確實要使用了才分配。所以就內存使用率在應用啟動的時候,就相對較低,后續會出現攀爬現象。 

 

2、為什么我們系統進程占用的物理內存(Res/Rss)會遠遠大於設置的Xmx值,比如Xmx設置1.7G,但是top看到的Res的值卻達到了3.0G?

     -Xms :初始堆大小 此值可以設置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內存。

     -Xmx :最大堆大小  

     以上配置只用於指定Java heap的大小,不包括持久代,也不包括CodeCache和堆外內存,JVM本身,還有一些其他內存也不會算在內等,你看的“占用內存量”是進程的private working set,這包括該進程所有獨占(不與其它進程共享)的內存,不只是Java heap,因此理論上我們看到物理內存大於Xmx也是可能的,不過超過太多估計就可能有問題了。

 或者這么理解:

     JVM的內存分為兩部分,本地內存+Heap內存(Java程序在運行過程中的對象是保存在JVM的堆內存中的) ,首先JVM本身是一個應用程序,一般是通過C、C++實現的,這個程序要運行,是一定要向操作系統申請內存的,維持這個進程正常運行的內存,即可以理解成本地內存。 

    JVM本身要對堆內存進行維護和管理,還負責垃圾回收,這些也同時會消耗本地內存,JVM在啟動過程中,會依賴一些動態庫,這同樣也消耗本地內存。 

   -Xmx 這個只是用於設置堆內存的大小,而JVM運行過程中到底會向操作系統申請多少內存,這個是由JVM在運行過程中動態決定的,我們無法設置

 

  文章來源: http://www.cnblogs.com/guozp/p/7845605.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM