常遇到的JVM错误,知道出错原因并能演示,后边才能想办法解决它。
堆空间不足异常
jvm参数指定最大堆内存为10M,再加载10M的byte[]数组就会空间不足而出错。
1 | //java.lang.OutOfMemoryError: Java heap space |
栈溢出异常
虚拟机栈,给每个线程分配的空间默认是1M,可通过参数-Xss1M设置;
java方法运行时,jvm会为每个线程分配一个jvm栈,每个方法有自己的栈帧(栈帧里记录了局部变量和方法出口等信息),
栈长度超过jvm允许的最大深度的就会报StackOverflowError异常。
1 | //java.lang.StackOverflowError |
方法区异常
jvm方法区记录着被jvm所加载的类信息。
所以当类加载器加载过多类时,就会异常报错
依赖asm wget https://repo1.maven.org/maven2/asm/asm/3.1/asm-3.1.jar
vim T3_oom.java
1 | import org.objectweb.asm.Opcodes; |
编译 javac -cp asm-3.1.jar T3_oom.java
运行 java -cp asm-3.1.jar:. T3_oom
String字面量
1 | public class StringOomMock { |