这里说-Xss是用来“设置线程堆栈大小”,这到底是什么意思?有人能帮我解释一下吗?
Java应用程序中的每个线程都有自己的堆栈。堆栈用于保存返回地址、函数/方法调用参数等。因此,如果一个线程倾向于通过递归算法处理大型结构,那么它可能需要一个大型堆栈来处理所有那些返回地址等。使用Sun JVM,您可以通过该参数设置大小。
它确实设置了JVM上的堆栈大小。
在以下两种情况下,你都应该触摸它:
StackOverflowError(堆叠大小大于限制),增加值 OutOfMemoryError:无法创建新的本机线程(线程太多,每个线程都有一个大的堆栈),减少它。
后者通常发生在你的Xss设置太大的时候——然后你需要平衡它(测试!)
在这里补充我的意见,除了上面提到的,我们可以写一个简单的演示来展示设置Xss的效果。
一般来说,它控制分配给每个线程的堆栈大小。
public static void main(String[] args) {
try{
recur();
}catch (StackOverflowError e){
System.out.println(depth);
}
}
static int depth = 1;
public static void recur(){
depth++;
recur();
}
编译以上代码后,您将看到深度(调用层次结构)随着传递的Xss设置一起增长。
在我的本地机器上,java -Xss1m com.eugene.Main的输出是21638,java -Xss2m com.eugene.Main的输出是48325。
推荐文章
- Java 8接口方法中不允许“同步”的原因是什么?
- 如何找到Java堆大小和内存使用(Linux)?
- 使用Enum实现单例(Java)
- RabbitMQ与通道和连接之间的关系
- buildSessionFactory()配置方法在Hibernate中已弃用?
- Spring MVC -如何获得所有的请求参数在一个地图在Spring控制器?
- 如何在Java中按两个字段排序?
- 文件之间的差异。路径中的分隔符和斜杠
- 在方法参数中使用NotNull注释
- Spring MVC中处理可选参数的@RequestParam
- Tomcat:如何查找正在运行的Tomcat版本?
- “java”、“javaw”和“javaws”之间有什么区别?
- 将Date对象转换为日历对象
- 在Java中保存最后N个元素的大小有限的队列
- 如何运行一个类从Jar不是主类在其清单文件