JVM |
您所在的位置:网站首页 › jvm参数配置 › JVM |
![]() JVM-08垃圾收集Garbage Collection【GC常用参数】 ![]() = 1.8 核心参数![]() ![]() 默认1M , 不足的话 StackOverflowError -Xss设置越小 ,说明一个线程栈里能分配的栈帧就越少,但是对JVM整体来说能开启的线程数会更多 ,当然了,线程多了并不一定性能就高,只是理论上是这样的。 方法区(元空间)代码语言:javascript复制 -XX:MetaspaceSize=N -XX:MaxMetaspaceSize=N【参数解读】 -XX:MaxMetaspaceSize: 元空间最大值, 默认不限制, 取决于机器本身的内存-XX:MetaspaceSize: 元空间的初始空间大小, 默认21M,达到该值就会触发full gc进行类型卸载, 同时GC收集器会对该值进行调整: 如果释放了大量的空间, 就适当降低该值; 如果释放了很少的空间, 那么在不超过MaxMetaspaceSize的情况下, 适当提高该值的大小(类似自动扩容)。对于64位JVM来说,元空间的默认初始大小是21MB,若不足,GC后自动扩容,无上限,取决于操作系统的内存大小。 【经验之谈】 一般建议在JVM参数中将MetaspaceSize和MaxMetaspaceSize设置成一样的值 ,8G物理内存的机器来说,可以将这两个参数设置为256M 如果应用启动比较慢,可以看下是不是因为方法区的JVM参数没有设置(默认值21 ,频繁GC,自动扩容)导致的。 栈溢出案例 StackOverflowError代码语言:javascript复制/** * ‐Xss验证 */ public class StackOverFlowErrorTest { private static int count = 0 ; public static void main(String[] args) { try { doCall(); }catch (Throwable e){ e.printStackTrace(); System.out.println("递归调用次数:" + count); } } private static void doCall() { count++; // 递归调用,压入线程栈 doCall(); } }默认配置 -Xss1m 代码语言:javascript复制java.lang.StackOverflowError at com.artisan.gof.test.StackOverFlowErrorTest.doCall(StackOverFlowErrorTest.java:23) ........ ........ ........ at com.artisan.gof.test.StackOverFlowErrorTest.doCall(StackOverFlowErrorTest.java:23) 递归调用次数:20898![]() ![]() 原因分析 ![]() 递归调用导致栈溢出~ |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |