OutOfMomeryError 异常实例与处理,zookeeper 面试题总结
实例:
public class StackOOM {
private int stackLength=1;
public void stackLeak(){
stackLength++;
stackLeak();
}
public static void main(String[] args){
StackOOM obj=new StackOOM();
try {
obj.stackLeak();
} catch (Exception e) {
System.out.println("Length:"+obj.stackLength);
throw e;
}
}
}
结果:
Exception in thread "main" java.lang.StackOverflowError
at StackOOM.stackLeak(StackOOM.java:8)
at StackOOM.stackLeak(StackOOM.java:8)
at StackOOM.stackLeak(StackOOM.java:8)
at StackOOM.stackLeak(StackOOM.java:8)
at StackOOM.stackLeak(StackOOM.java:8)
at StackOOM.stackLeak(StackOOM.java:8)
at StackOOM.stackLeak(StackOOM.java:8)
at StackOOM.stackLeak(StackOOM.java:8)
......
《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源
像这种栈溢出的问题,通过扩大栈的内存是没有太大的意义的,需要对代码进行优化处理。
[](()方法区和本地运行时常量池溢出
我们可以通过-XX:PermSize 和-XX:MaxPermSize 来设置方法区的大小
实例 jdk1.6 上可以测试,1.7 测试不了想要的结果
import java.util.ArrayList;
import java.util.List;
public class RuntimeConstantPoolOOM {
public static void main(String[] args) {
List<String> list=new ArrayList<>();
int i=0;
while(true){
list.add(String.valueOf(i++).intern());
}
}
}
然后书中写的那个测试用例,没有看明白需要导入其他的 jar 包就没有进行测试了。下次有机会再来研究。
总结:主要都是堆栈的溢出。堆溢出是不断的创建对象,且保证创建的对象不被 GC,栈溢出是不断的压栈而不出栈,递归调用且不停止会导致栈溢出。
Java 开源项目【ali1024.coding.net/public/P7/Java/git】 * *
如何快速更新自己的技术积累?
在现有的项目里,深挖技术,比如用到 netty 可以把相关底层代码和要点都看起来。
如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
学习以后不知道有没有学成,则可以通过面试去检验。
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目
评论