我有一个使用Java堆的程序。
-Xms5g -Xmx12g
我已设置初始的Java堆大小为5gb,最大堆大小为12gb。
但是当我查看任务管理器或资源监视器时,我的程序仅使用了400mb的RAM。
所以这里有我的问题:
- 什么是初始的Java堆大小?
- 如果我将初始的Java堆大小设置为5gb,为什么我只看到程序使用了400mb的RAM?难道不应该是5gb吗?因为初始堆大小意味着最小大小,对吧?
我有一个使用Java堆的程序。
-Xms5g -Xmx12g
我已设置初始的Java堆大小为5gb,最大堆大小为12gb。
但是当我查看任务管理器或资源监视器时,我的程序仅使用了400mb的RAM。
所以这里有我的问题:
-Xmx
最大堆大小是堆能够增长到的最大大小。
-Xms
初始堆大小是堆的范围。它不会在没有触发完整GC的情况下使用超过这个空间量。main
之前也会使用相当多)。一些大型对象直接进入tenured空间,但对于大多数应用程序,tenured空间主要由较小的长寿命对象占用。假设经过许多次minor collection后,约有100 MB的对象被提升到了tenured空间。-XX:+ AlwaysPreTouch
和-Xms5g
应该立即占用约5 GB的内存。 - Aleksey Shipilev