a)我知道-Xmx
代表最大堆
它是年轻一代(伊甸园+幸存者)和终身一代(老一代)和烫发者的组合吗?
b)我现在怎么能在UAT / Prod中应用程序的不同内存空间的最小/最大大小
1)伊甸园空间
2)行人空间
3)终身任
4)perm gen
答案 0 :(得分:2)
您可以使用jstat
在外部观看这些尺寸jstat -gc {pid} 10s
您可以使用
找出pidjps -lvm
答案 1 :(得分:1)
Perm生成是通过MaxPermSize
分配的单独空间。这不包含在-Xmx
-Xmx
包括一个伊甸园空间,两个幸存者空间和老一代。
您甚至可以通过--xx:NewRation:
来计算单个空格。这是年轻一代和老一代之间的比例。例如,如果n
为3
,则比率为1:3
,Eden
和survivor
空格的总大小为 one forth
年轻一代的总体规模很大。
您还可以使用 jstat
命令了解各个尺寸, VisualVM 等工具也可以为您提供帮助。只需查看图片,其中列出了各个空间细节的图形表示。
答案 2 :(得分:1)
如果您想知道这些空间的大小,请使用java选项-verbose:gc -XX:+PrintGCDetails
。
这个documentation将帮助您了解不同代的工作方式。
答案 3 :(得分:0)
通过-Xmx
分配的最大堆大小是年轻代和终身代的组合。使用JVM的-XX:MaxPermSize
选项单独分配permgen空间。这个问题在这里得到解答:
确定JVM中堆中不同代的大小(特别是在远程服务器上)的一种好方法是使用jmap命令:
http://docs.oracle.com/javase/6/docs/technotes/tools/share/jmap.html
以下是我管理的服务器的一些示例输出:
$ sudo jmap -heap 28579
Attaching to process ID 28579, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 1.5.0_07-b03
using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 6127878144 (5844.0MB)
NewSize = 2147483648 (2048.0MB)
MaxNewSize = 2147483648 (2048.0MB)
OldSize = 3980394496 (3796.0MB)
NewRatio = 15
SurvivorRatio = 1024
PermSize = 314572800 (300.0MB)
MaxPermSize = 314572800 (300.0MB)
Heap Usage:
New Generation (Eden + 1 Survivor Space):
capacity = 2145452032 (2046.0625MB)
used = 2130014864 (2031.3404693603516MB)
free = 15437168 (14.722030639648438MB)
99.28047014010332% used
Eden Space:
capacity = 2143420416 (2044.125MB)
used = 2130014864 (2031.3404693603516MB)
free = 13405552 (12.784530639648438MB)
99.37457197384462% used
From Space:
capacity = 2031616 (1.9375MB)
used = 0 (0.0MB)
free = 2031616 (1.9375MB)
0.0% used
To Space:
capacity = 2031616 (1.9375MB)
used = 0 (0.0MB)
free = 2031616 (1.9375MB)
0.0% used
concurrent mark-sweep generation:
capacity = 3980394496 (3796.0MB)