在本文中,我们将向您展示如何使用-XX:+PrintFlagsFinal
来查找堆大小的详细信息。 在Java中,默认堆大小和最大堆大小是根据此– 人机工程学算法分配的。
堆大小
初始堆大小为物理内存的1/64,最大为1Gbyte
最大堆大小为物理内存的1/4,最大为1GB
但是,以上算法仅供参考,在不同的VM中可能有所不同。
1. Java内存概述
快速回顾一下Java内存结构:
1. Java堆大小
存放Java应用程序创建的对象的地方,这是进行Java应用程序使用的内存的垃圾收集的地方。 对于繁重的Java进程,堆大小不足将导致流行的java.lang.OutOfMemoryError: Java heap space
。
-Xms<size> - Set initial Java heap size
-Xmx<size> - Set maximum Java heap size
$ java -Xms512m -Xmx1024m JavaApp
2.烫发代大小
存放已加载的类定义和元数据的地方。 如果加载了大型代码库项目,则Perm Gen大小不足将导致流行的Java.Lang.OutOfMemoryError: PermGen
。
-XX:PermSize<size> - Set initial PermGen Size.
-XX:MaxPermSize<size> - Set the maximum PermGen Size.
$ java -XX:PermSize=64m -XX:MaxPermSize=128m JavaApp
3. Java堆栈大小
Java线程的大小。 如果项目中有大量线程要处理,请尝试减小堆栈大小,以免耗尽内存。
-Xss =设置Java线程堆栈大小
$ java -Xss512k JavaApp
注意
堆大小,perm gen或堆栈大小的默认值与不同的JVM不同。 最佳做法是始终定义自己的价值。