java虚拟机之常见的报错
2021-07-11 19:07
标签:flow while lis 溢出 进程 arraylist 简单 thread stl 1、最简单的内存溢出 2、虚拟机栈和本地方法栈溢出(-Xss:栈内存容量) 两种异常: 如果线程请求的深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常。 如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常。 单线程时栈溢出: 多线程下的栈溢出: 通过不断建立线程的方式可以产生内存溢出异常。在这种情况下,为每个线程的栈分配的内存越大,越容易产生内存溢出异常。 原因是:操作系统分配给每个进程的内存是有限制的,譬如32位的Windows限制为2GB。虚拟机提供了参数来控制Java堆和方法区的两部分内存的最大值。剩余的内存为2GB减去Xmx(最大堆容量),再减去MaxPermSize(最大方法区容量) 3、 java虚拟机之常见的报错 标签:flow while lis 溢出 进程 arraylist 简单 thread stl 原文地址:https://www.cnblogs.com/yaohuiqin/p/9550254.htmlpublic class HeapOOM {
HeapOOM[] testlist= new HeapOOM[100000];
public static void main(String[] args) {
List
public class StackOverflow {
private int stackLength = 1;
public void stackLeak(){
stackLength++;
stackLeak();
}
public static void main(String[] args) throws Throwable {
StackOverflow stackOverflowError = new StackOverflow();
try {
stackOverflowError.stackLeak();
}catch (Throwable e){
System.out.println("stack 深度:"+stackOverflowError.stackLength);
throw e;
}
}
}
public class StackOverThread {
private void donnotStop(){
while (true){
donnotStop();
}
}
public void stackLeakByThread(){
while (true){
Thread thread = new Thread(new Runnable() {
public void run() {
donnotStop();
}
});
thread.start();
}
}
public static void main(String[] args) {
StackOverThread stackOverThread = new StackOverThread();
stackOverThread.stackLeakByThread();
}
}
上一篇:C++ 输入输出重定向
下一篇:Python IF 条件判断