【JVM】2_测试虚拟机栈和本地方法栈溢出
2017-10-30 17:17
288 查看
/** * 区域虚拟机栈、本地方法栈 * VM参数 : -Xss128k * -Xss栈内存容量 * 单线程下只会出现StackOverflowError异常 * */ public class Main { public static void main(String[] args) { StackTest st = new StackTest(); try { st.stackTest(); } catch (Throwable e){ System.out.println("stackLength:" + st.stackLength); throw e; } } } class StackTest{ //栈的深度 public int stackLength = 1; public void stackTest(){ stackLength++; stackTest(); } }
运行结果:
stackLength:1002
Exception in thread "main" java.lang.StackOverflowError
at sun.misc.Unsafe.compareAndSwapLong(Native Method)
at java.util.concurrent.ConcurrentHashMap.addCount(ConcurrentHashMap.java:2259)
at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1070)
at java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1535)
at java.lang.ClassLoader.getClassLoadingLock(ClassLoader.java:463)
at java.lang.ClassLoader.loadClass(ClassLoader.java:404)
at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at StackTest.stackTest(Main.java:27)
at StackTest.stackTest(Main.java:27)
/**
* VM参数 : -Xss2m (栈内存分配越大,越容易发生内存溢出)
* 多线程可以导致OutOfMemoryError
* 此方法可能导致系统假死,注意保存
*
* */
public class Main {
public static void main(String[] args) {
StackOOMTest st = new StackOOMTest();
st.stackLeakByThread();
}
}
class StackOOMTest{
private void dontStop(){
while (true){
}
}
public void stackLeakByThread(){
while (true) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
dontStop();
}
});
thread.start();
}
}
}
运行结果:
Exception in thread"main"java.lang.OutOfMemoryError:unable to create new native thread
相关文章推荐
- jvm_内存溢出_虚拟机栈和本地方法栈溢出
- JVM【第六回】:【OutOfMemoryError异常之虚拟机栈和本地方法栈溢出】
- JVM 内存基础概念之程序计数器与 Java 虚拟机栈和本地方法栈
- 方法栈和本地方法栈内存溢出异常测试
- 虚拟机栈和本地方法栈溢出
- 虚拟机栈和本地方法栈溢出
- 虚拟机栈和本地方法栈溢出
- 【JVM】4_利用GCLib测试方法区溢出
- 栈内存--虚拟机栈、本地方法栈溢出-----以Hotspot虚拟机为例
- 安卓之创建,读写文件,本地收藏,访问文件的权限和产品测试种类(方法)
- 在AIX上用IBM的JVM,内存溢出时默认地会产生javacore文件(关于cpu的)和heapdump文件(关于内存的)。手动产生堆栈文件的方法是使用kill -3
- Linux Kernel 2.6x 本地溢出代码 今天测试了一下,效果不错
- Document share of Oracle VM VirtualBox(ubuntu) and Windows 7(虚拟机与本地主机实现文件夹的共享方法)
- 用虚拟机实现"本地试用软件无限期使用通用方法"
- JVM学习笔记-虚拟机栈和本地方法栈溢出
- 【已解决】本地测试时,MUI的AJAX方法不能获取数据的问题。
- C#局域网中引用他人的WebService报“测试窗体只能用于来自本地计算机的请求方法”错的解决办法
- web前端本地测试方法
- 本地模拟正式环境自动预警邮件发送的测试方法
- JVM性能测试与内存溢出