JVM

28 阅读1分钟

1.什么情况发生栈内存溢出?

  • 栈:线程私有,方法递归调用会出现栈内存溢出

2.jvm内存模型是怎么样?

  • 线程私有内存:本地方法栈,栈,程序计数器
  • 线程共享内存:堆(垃圾回收)
  • 方法区:直接内存,元空间(常量池,类加载信息)

3.垃圾回收算法有哪些?

  • 标记清除算法:1.标记,2.清除,缺点:有碎片,
  • 标记整理法:1.标记,2整理,优点:无碎片
  • 复制算法:无碎片
  • 分代收集算法

4.如何判断对象是否存活?

  • 引用计数法
  • 可达性分析

5.CMS和G1的区别?

  • CMS:标记清除算法
  • G1:标记整理,复制算法

6.类加载器有哪些,类加载过程是怎样?

  • 启动类加载器,扩展类加载器,系统类加载器,自定义类加载器
  • 加载过程:加载(方法区生产class文件),验证,准备(分配内存),解析,初始化(在堆中生成对象),使用,卸载。

7.为什么需要双亲委派机制?如何打破双亲委派?

  • 父类加载器先加载,自定义类加载器可以打破双亲委派机制

8.如何优化JVM?

  • 问题:CPU100% 内存100% mysql,redis连接池100%,大对象无法释放
  • 优化: 增加堆内存,减少标记停顿时长,bio转nio,优化对象(list)