JVM面试题

JVM面试题

面试题参考

  • jvm类加载器有几种?他们在哪些位置?什么是双亲委派机制?类加载过程是怎样?

  • 谈谈JVM的内存结构?

  • 程序计数器有什么作用?

  • 栈区可能出现哪些异常?

    StackOverflowError 栈溢出,发生在一个线程在计算时所需要用到栈大小 > 配置允许最大的栈大小

    OutOfMemoryError 内存不足,发生在栈进行动态扩展时如果无法申请到足够内存

  • 为什么方法区是线程共有的?它里面是主要存放了哪些东西呢?

  • 堆的内存结构是什么?堆分区有哪些区?都有什么特点?

  • 什么样的对象可能会进入老年代?如果一个对象进入到老年代后会怎么样?

  • Minor GC、Full GC 它们的触发条件是什么?(轻GC和重GC分别在什么时候发生?)

  • 垃圾对象的判定方法有哪些?

  • java 中都有哪些引用类型?

  • GC算法有哪些?各有什么特点?优缺点?

  • 复制算法 和 标记整理算法?

  • 为什么不在新生代使用标记整理算法?或者在老年代使用复制算法?

  • 谈谈垃圾收集原理?有听过CMS 和 G1垃圾收集器么?谈谈这两个垃圾收集器

    CMS收集器: 标记清除算法实现

JVM解题

jvm类加载器有几种?他们在哪些位置?什么是双亲委派机制?类加载过程是怎样?

启动类加载器BootstrapClassLoader --jdk的/lib目录下的类

扩展类加载器ExtClassLoader --jdk的/lib/ext目录下的类

应用程序类加载器AppClassLoader 程序自己classpath下的类

用户自定义加载器

双亲委派机制: 如果一个类加载器收到了类加载的请求,他首先不会自己去尝试加载这个类,而是把这个请求委派父类加载器去完成。每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中

怎么破坏双亲委派机制? 重写ClassLoader类的loadClass()方法

哪些场景/框架破坏了双亲委派机制? JDBC和Tomcat

类加载的过程? JVM虚拟机把.class文件中类信息加载进内存,并进行解析生成对应的class对象的过程

谈谈JVM的内存结构

1.运行时数据区(程序计数器、方法区、堆区、栈区、本地方法栈)

2.执行引擎

3.本地库接口

程序计数器是什么作用?

保存程序当前执行指令的地址,通常也叫做行号指示器,它是每个线程私有的

一个线程的执行,是通过字节码解释器改变当前线程的计数器的值,来获取下一条需要执行的字节码指令,从而确保线程的正确执行

方法区是主要存放了哪些东西呢,为什么在jdk1.8之后将永久代换成元空间了?

静态变量、常量、类信息、运行时常量池

因为永久代的大小很难确定,如果太小容易经常重GC,导致OOM

对永久代的调优会变得很困难

堆的内存结构

当Eden区满时,发生一次轻GC(minorGC),然后将Eden去存活的对象和from区的对象复制到to区,在将原from去清空,再将to区和from区交换,保证每次to区都是空的。

那么什么时候对象从新生代到老年代呢?比较大的对象会直接进入老年代,还有就是在新生代待的足够久的对象,也就是每次轻GC都存活并且超过阈值。

image-2020102920102134

怎么判断是否垃圾?java有几种引用类型

引用计数法、根可达性分析法
强引用 gc不会被回收
软引用 内存溢出之前被回收
弱引用 下一次GC被回收
虚引用 GC时返回一个通知

Minor GC、Full GC 它们的触发条件是什么?

轻GC: Eden区满了或者新创建的对象大小大于Eden剩下的空间,

重GC: 当老年区满的时候会发生重GC,重GC之前会先执行轻GC

GC算法有哪些?各有什么特点?优缺点?

复制算法: 将内存分成2块,当一块内存快用完时将活着的对象复制到另一块上,然后将这块对象清空。

标记清除算法: 第一次扫描存活的对象,第二次扫描清除剩下的垃圾对象

标记整理算法: 在标记清除算法上,第三次扫描将活着的对象整理到一边

分代算法: 在新生代采取复制算法,在老年代采取标记整理算法

垃圾收集器
Serial收集器(新生代)
ParNew收集器(新生代)
Parallel Scavenge收集器(新生代)
Serial Old收集器(老年代)
Parallel Old收集器(老年代)
CMS收集器(基于标记清除算法)
G1收集器(基于标记整理算法)

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务