Java stackoverflow error
本文想记录一下尝试产生stackoverflow的程序
1 -Xss=1k, 设置stack大小1024个字节,产生515个long,想把stack撑爆。
2 嵌套调用
3 创建大量线程
1 -Xss=1k, 设置stack大小1024个字节,产生515个long,想把stack撑爆。
结论:不可能
1 Java里面的stack是动态扩展的,不是固定设死的。因此无法实施
2 Java的对象都是引用,不会在栈上分配空间。这个从C++过来的人,一定要注意。
3 在有些操作系统上,分配的stacksize是固定的,容易撑爆stack。
public class MyMain {
public static void main(String[] args) {
System.out.println("stack overflow");
//MyMain main; 这个是变量声明,不分配内存空间。
//long aa[] = {,,,,,,,,,,,,,}; 注意这个虽然是基本变量的数组,但是也是在heap
//String str = "hello world"; 这个是在方法区/常量区分配
long a0 = ;
long a1 = ;
long a2 = ;
......
15 long a514 = ;
}
}
2 嵌套调用
结论:可以撑爆stack
函数的嵌套调用是有深度的,如果结束条件设置不恰当,那么很容易stack overflow
public class MyMain {
private static void foo(){
foo();
}
public static void main(String[] args) {
System.out.println("stack overflow");
foo();
}
}
3 创建大量线程
结论:在我的机器上,没有观察到.
设置-Xss=100M,只看到内存100M的速度增加,但是增加到7.9G多的时候就不动了,没有发生OutOfMemoryError。这个原因目前还不清楚。
在书《深入理解java虚拟机》中提到可以观察到OutOfMemoryError。
public class MyMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("stack overflow");
while(true){
Thread th = new Thread(new Runnable(){
@Override
public void run() {
while(true){
System.out.println("do not stop");
}
}
});
th.start();
}
}
}
Java stackoverflow error的更多相关文章
- idea报错:error java compilation failed internal java compiler error
idea下面报如下问题 error java compilation failed internal java compiler error 解决办法:Setting->Compiler-> ...
- idea Error:java: Compilation failed: internal java compiler error
idea 遇到Error:java: Compilation failed: internal java compiler error 是提示说你当前使用的编译器jdk版本不对. 按住Ctrl+Alt ...
- idea之internal java compiler error
启动错误:Error:java: Compilation failed: internal java compiler error 解决:将圈选地方改为对应的jdk版本即可
- Error:java:Compilation failed: internal java compiler error
在IDEA中编译时出现这个错误:Error:java:Compilation failed: internal java compiler error! Information:Using javac ...
- OFBIZ bug_ControlServlet.java:233:ERROR
错误日志: [java] 2014-09-26 10:12:17,031 (http-bio-0.0.0.0-8443-exec-5) [ ControlServlet.java:233:ERROR] ...
- OFBIZ bug_ControlServlet.java:239:ERROR
错误日志: [java] 2014-09-23 00:11:34,877 (http-bio-0.0.0.0-8080-exec-4) [ ControlServlet.java:141:INFO ] ...
- java 区分error和exception
1) java.lang.Error: Throwable的子类,用于标记严重错误.合理的应用程序不应该去try/catch这种错误.绝大多数的错误都是非正常的,就根本不该出现的.java.lang. ...
- java中Error与Exception有什么区别
Error类和Exception类都继承自Throwable类. Error的继承关系: java.lang.Object java.lang.Throwable java.lang.Er ...
- org.apache.axis2.AxisFault: java.lang.Error: Unresolved compilation problem:
原创:转载请注明出处 今天遇到以下一个异常,找了好长时间,就是不知道什么原因, 在网上搜了好多,也没搜到相关的解决方法. 1.异常展示, org.apache.axis2.AxisFault: jav ...
随机推荐
- 参考SQLHelper编写的OracleHelper
使用 Oracle.ManagedDataAccess.Client 类库参考SQLHelper编写的OracleHelper: // ================================ ...
- 2013 ACM区域赛长沙 C Collision HDU 4793
题意:在平面上0,0点,有一个半径为R的圆形区域,并且在0,0点固定着一个半径为RM(<R)的圆形障碍物,现在圆形区域外x,y,有一个半径 为r的,并且速度为vx,vy的硬币,如果硬币碰到了障碍 ...
- wxWidgets一个界面与数据分离的简单例子
/*************************************************************** * Name: MyApp.h * Purpose: Defines ...
- poj 1274 The Perfect Stall【匈牙利算法模板题】
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20874 Accepted: 942 ...
- db2 identity列重置,reset/restart
db2中可以对表中的某一个列创建identity列,用于自动填充值,某些情况下(比如删除数据后,需要从最小值开始,并不重复,那可以对标识列进行reset操作) 语法: ALTER TABLE < ...
- 设置button 不可被点击
mGetCode.setEnabled(false);//不可被点击 mGetCode.setEnabled(true);//可被点击 bt.setClickable(true);//设置点击为tru ...
- jmeter控制器
1.仅一次控制器 这个控制器可以保证线程在多次循环跑得情况下只登陆一次 2.循环控制器(Loop Controller:设置循环次数 结果: 3. ForEach控制器(ForEach Contro ...
- linux-centos挂载新硬盘操作
类似的文章网上已经有很多,这里是记录重要操作的命令,精简流程 精简后的命令: fdisk -ldf -hfdisk /dev/vdbfdisk -l /dev/vdbmkfs -t ext4 /dev ...
- HDU1711-----Number Sequence-----裸的KMP
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1711 题目意思: 找出b在a中的起始位置,没有则是-1 解题思路: 裸的KMP,不多说 不会KMP的话 ...
- 基于windows的ngnix基础使用
前言 今天组长一大早心血来潮的跟我说,我希望我们小组电脑做web站点的服务器集群,你搞一搞,就用ngnix吧. 君要臣死,臣不得不死.顺便写个文章做个笔记. 简介 Nginx 是一个高性能的HTTP和 ...