写点什么

OutOfMomeryError 异常实例与处理,zookeeper 面试题总结

  • 2022 年 4 月 22 日
  • 本文字数:988 字

    阅读完需:约 3 分钟

实例:


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 可以把相关底层代码和要点都看起来。

  • 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。

  • 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。

  • 学习以后不知道有没有学成,则可以通过面试去检验。


我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!


以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目




用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
OutOfMomeryError异常实例与处理,zookeeper面试题总结_Java_爱好编程进阶_InfoQ写作社区