JVM面试问题总结
一什么是JVM1定义JVM指的是Java虚拟机。JVM本质上是一个运行在计算机上的程序他的职责是运行Java字节码文件。2作用为了支持Java中一次编写到处运行的跨平台特性。3JVM功能4JVM的组成二字节码文件的组成文件的头几个字节文件头称为魔数用来校验文件类型Java版本号主版本号-44。三运行时数据区1程序计数器2栈3堆垃圾回收器以及垃圾回收算法详情见下文。4方法区方法区在不同的JDK版本位置有所不同在JDK7及以前方法区位于对内存的永久代中在JDK8及之后位于元空间中脱离了堆位于操作系统管理的直接内存中。如图所示使用元空间替换永久代的原因四哪些区域会出现内存溢出在JVM中只有程序计数器不会出现内存溢出因为每个线程的程序计数器只保存一个固定长度的内存地址。五类的生命周期类的生命周期分为加载—连接—初始化—使用—卸载。其中连接又可分为 验证准备解析1加载2连接之验证3连接之准备4连接之解析5初始化6卸载六什么是双亲委派机制1、当一个类加载器去加载一个类的时候会先自下向上查看这个类是否被加载过如果被加载过就直接返回如果没被加载过就自上向下加载2、自定义类加载器的父类是应用程序类加载器应用程序类加载器的父类是扩展类加载器扩展类加载器的父类是启动类加载器3、双亲委派机制的好处是避免恶意代码替换JDK中的核心类库保证类加载的安全性避免一个类被重复加载。七如何打破双亲委派机制八如何判断堆上的对象没有被引用1引用计数法2可达性分析法九JVM中的引用类型十有哪些常见的垃圾回收算法1标记-清除算法2复制算法3标记-整理算法4分代GC分代GC的优点十一有哪些常用的垃圾回收器十二ThreadLocal中为什么要使用弱引用当创建ThreadLocal对象时会有一条强引用链指向ThreadLocal对象当给对象赋值时实际是以当前ThreadLocal为key值为value存入ThreadLocalMap中当对象使用完毕后强引用关系解除由于Entry对象的key是弱引用指向ThreadLocal所以在垃圾回收时会回收掉ThreadLocal对象但此时还存在key为null值为value的Entry对象这也是ThreadLocal会造成内存泄露的原因所以在ThreadLocal使用结束后还必须手动调用remove方法进行删除。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2444756.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!