JVM优化系列(-Xss调整Stack Space的大小)
来源:互联网 发布:白鲨淘宝外设店 编辑:程序博客网 时间:2024/05/20 05:07
Java程序中,每个线程都有自己的Stack Space(堆栈)。这个Stack Space不是来自Heap的分配。所以Stack Space的大小不会受到-Xmx和-Xms的影响,这2个JVM参数仅仅是影响Heap的大小。
通过上面的程序,你可以观察到你的JVM Stack Space是如何耗尽的,以及进入嵌套的层深。
Stack Space用来做方法的递归调用时压入Stack Frame(栈帧)。所以当递归调用太深的时候,就有可能耗尽Stack Space,爆出StackOverflow的错误。
-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆 栈大小为1M,以前每个线程堆栈大小为256K。根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一 个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
线程栈的大小是个双刃剑,如果设置过小,可能会出现栈溢出,特别是在该线程内有递归、大的循环时出现溢出的可能性更大,如果该值设置过大,就有影响到创建栈的数量,如果是多线程的应用,就会出现内存溢出的错误.
JVM可创建的最大线程数限制因素:
线程堆栈大小——》进程的最大内存——》操作系统位数
package org.thinking.jvm;
public class TestXSS {
private static long count = 0;
public static void main(String[] args) {
infinitelyRecursiveMethod(1);
}
public static void infinitelyRecursiveMethod(long a){
System.out.println(count++);
infinitelyRecursiveMethod(a);
}
}
public class TestXSS {
private static long count = 0;
public static void main(String[] args) {
infinitelyRecursiveMethod(1);
}
public static void infinitelyRecursiveMethod(long a){
System.out.println(count++);
infinitelyRecursiveMethod(a);
}
}
通过上面的程序,你可以观察到你的JVM Stack Space是如何耗尽的,以及进入嵌套的层深。
0 0
- JVM优化系列(-Xss调整Stack Space的大小)
- JVM优化系列之一(-Xss调整Stack Space的大小)
- JVM优化系列之一(-Xss调整Stack Space的大小)
- JVM优化系列之一(-Xss调整Stack Space的大小)
- JVM堆大小的调整
- JVM堆大小的调整
- JVM 默认Xss大小
- Sun HotSpot JVM堆大小的调整
- Java 调整JVM内存的大小
- 调整JVM大小
- 调整jvm大小
- 修改tomcat jvm permGen 大小的方法(tomcat报错java.lang.OutOfMemoryError:PermGen space)
- JVM内存调整优化
- Sun HotSpot 1.4.1 JVM堆大小的调整
- 调整Java虚拟机JVM的最大内存使用大小
- java OutOfMemoryError 调整是jvm 的堆大小
- Sun HotSpot 1.4.1 JVM堆大小的调整
- jvm系列 (三) ---锁的优化
- android Handler机制
- Java基础类型总结
- 27、(知识篇)SpringMVC04 SpringMVC 传值/SessionAttributes
- SpringMVC工作原理
- spring MVC原理
- JVM优化系列(-Xss调整Stack Space的大小)
- Android studio 如何生成秘钥
- Java学习笔记八——Java多线程初步
- Linux设备驱动第七天(原子性:中断屏蔽、自旋锁、信号量)
- 学习封装mvc系列(五)控制器中连接数据库
- Codeforces #389 DIv.2 problem A
- 【善用工具】SourceInsight 使用技巧
- Activity的生命周期
- 28、(知识篇)SpringMVC05 Spring 注解@ModelAttribute