日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux和java_java内存和linux关系

發布時間:2025/4/16 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux和java_java内存和linux关系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

運行個JAVA 用sleep去hold住

package org.hjb.test;

public class TestOnly {

public static void main(String[] args) {

System.out.println("sleep ..");

try {

Thread.sleep(10000000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

java -Xmx10m -Xms10m org/hjb/test/TestOnly

從Jvm進程的角度觀察

查看JAVA進程的總體內存大小

原始參數 ? ? ? ? java -Xmx10m -Xms10m org/hjb/test/TestOnly ??后觀察結果:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

27182 root 20 0 1182152 40452 13596 S 0.0 1.0 :00.27 java

變換參數 ? ? ? ? ?java -Xmx1024m -Xms1024m org/hjb/test/TestOnly ? 后觀察

繼續變換參數 ??java -Xmx2024m -Xms2024m org/hjb/test/TestOnly ? 后觀察

27297 root 20 0 3319832 34876 13668 S 0.0 0.9 0:00.10 java

上面觀察可以得出

提高JAVA的堆內存分配,影響的只是VIRT內存的使用情況。?詳附1

實驗二:

觀察JAVA的實際使用內存, ?JAVA進程的實際使用內存應該包括, JVM的內存+JAVA程序的內存。?詳附2

運行 java -Xmx2048m -Xms2048m org/hjb/test/TestOnly ?觀察

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

27406 root 20 0 3345308 35000 13716 S 0.0 0.9 0:00.21 java

修改程序

package org.hjb.test;

public class TestOnly {

public static void main(String[] args) {

System.out.println("sleep ..");

try {

byte[] buf = new byte[1024 * 1024 * 1024]; //1g 增大其內存

Thread.sleep(10000000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

運行 java -Xmx2048m -Xms2048m org/hjb/test/TestOnly ?觀察

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

27445 root 20 0 3345308 1.034g 13688 S 0.0 26.8 0:00.89 java

上面觀察可以得出

JAVA 程序中實際使用內存才會占用到內存,此時查看JAVA的內存

通過實驗,設想只有當前用到了內存才會進RES?

后面是通過線上問題發現不是如此, 因為如果沒有釋放的內存,還是在RES的, 比如JDK的沒觸發,那么內存就一直占用 了RES. ?所以內存大小還是可以直接影響到JAVA進程的大小

JAVA進程內存 = JVM進程內存+heap內存+ 永久代內存+ 本地方法棧內存+線程棧內存?+堆外內存 +socket 緩沖區內存

linux內存和JAVA堆中的關系

RES = JAVA正在存活的內存對象大小 + 未回收的對象大小 ?+ 其它

VIART= JAVA中申請的內存大小,即 -Xmx ?-Xms + 其它

其它 =?永久代內存+ 本地方法棧內存+線程棧內存?+堆外內存 +socket 緩沖區內存 +JVM進程內存

附1:

VIRT:virtual memory usage

1、進程“需要的”虛擬內存大小,包括進程使用的庫、代碼、數據等

2、假如進程申請100m的內存,但實際只使用了10m,那么它會增長100m,而不是實際的使用量

RES:resident memory usage 常駐內存

1、進程當前使用的內存大小,但不包括swap out

2、包含其他進程的共享

3、如果申請100m的內存,實際使用10m,它只增長10m,與VIRT相反

4、關于庫占用內存的情況,它只統計加載的庫文件所占內存大小

SHR:shared memory

1、除了自身進程的共享內存,也包括其他進程的共享內存

2、雖然進程只使用了幾個共享庫的函數,但它包含了整個共享庫的大小

3、計算某個進程所占的物理內存大小公式:RES – SHR

4、swap out后,它將會降下來DATA1、數據占用的內存。如果top沒有顯示,按f鍵可以顯示出來。

2、真正的該程序要求的數據空間,是真正在運行中要使用的。

附2:

總結

以上是生活随笔為你收集整理的linux和java_java内存和linux关系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。