例如,如果我在没有定义的情况下从IDE运行/调试简单的spring boot应用程序,那么将设置初始堆大小,最大堆大小和堆栈大小(-Xms,-Xmx,-Xss)的大小?
答案 0 :(得分:11)
默认情况下,Spring Boot应用程序将使用JVM默认内存设置。
默认堆大小
如果您的物理内存大小高达192兆字节(MB),则默认最大堆大小是物理内存的一半。
如果您的物理内存大小超过192兆字节,则默认最大堆大小是物理内存的四分之一。
例如,如果您的计算机具有128 MB的物理内存,则最大堆大小为64 MB,大于或等于1 GB的物理内存会导致最大堆大小为256 MB。
除非程序创建足够的对象来要求它,否则JVM实际上不会使用最大堆大小。在JVM初始化期间分配一个小得多的数量,称为初始堆大小。此数量至少为8 MB,否则为物理内存的1/64,最大物理内存大小为1 GB。
分配给年轻代的最大空间量是总堆大小的三分之一。
您可以使用以下命令检查特定于您的机器的默认值
Linux的:
java -XX:+ PrintFlagsFinal -version | grep HeapSize
视窗:
java -XX:+ PrintFlagsFinal -version | findstr HeapSize
参考:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/parallel.html#default_heap_size
默认线程堆栈大小
默认线程堆栈大小因JVM,OS和环境变量而异。
要了解平台上的默认线程堆栈大小,请使用
在Linux中:
java -XX:+ PrintFlagsFinal -version | grep ThreadStackSize
在Windows中:
java -XX:+ PrintFlagsFinal -version | findstr ThreadStackSize
答案 1 :(得分:2)
如果在Java启动过程中未提供“ Xmx”选项,通常其占总物理内存的25%
在Unix / Linux系统上,您可以这样做
java -XX:+PrintFlagsFinal -version | grep HeapSize
在Windows上,使用以下命令找出默认值
java -XX:+PrintFlagsFinal -version | findstr HeapSize
查找选项MaxHeapSize(对于-Xmx)和InitialHeapSize对于-Xms。
结果输出以字节为单位。