[英]initial Java heap size means?
所以我有一個使用Java堆的程序
-Xms5g -Xmx12g
我已將初始Java堆大小設置為5gb,將最大堆大小設置為12gb
但是當我查看任務管理器或資源監視器時,我的程序僅使用400mb。
所以這是我的問題:
-Xmx
最大堆大小是堆可以增長到的最大大小。
-Xms
初始堆大小是堆范圍的大小。 在不觸發完整GC的情況下,它不會使用超過此數量的空間。
但是,該堆分為多個區域,例如說您有一個5 GiB的初始堆,
當您開始使用內存時,在Linux上按需分配了被觸摸的頁面(4 KiB區域)(除非您使用選項來對它們全部進行預修飾)
您的Eden空間將很快被使用,因此前200 MB的使用速度非常快(如果在調用main
之前就已經使用了很多)。 幸存者空間將在幾次較小的收集之后使用,但是最初它們可能不會被全部使用,例如說它們從未填充到超過50 MB(100 MB可用空間中),此時觸摸的總內存為200 MB + 2 * 50 MB。
一些大的對象直接進入租用空間,但是對於大多數應用程序,租用空間在很大程度上占用了較小的,壽命長的對象。 可以說,在進行了許多次較小的收集之后,大約100 MB的對象已被提升到永久性空間。
此時,即使擴展區為5 GB,也只能觸摸或分配200 + 2 * 50 + 100 MB的內存。
簡而言之,Linux延遲分配頁面,因此您必須寫頁面以使用內存。
下面以-Xms5g
參數-Xms5g
的最簡單的程序占用5 GB以上的內存
public static void main(String[] args) throws Exception {
Thread.currentThread().join();
}
您正在查看錯誤的流程,或者平台有一些非常特殊的東西。 可能是因為您在Windows上,而是在查看“工作集”而不是“專用字節” ?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.