jvm面试题
1、虚拟机的类加载机制
1.1、什么是虚拟机的类加载机制
在代码编译后,就会生成JVM(Java虚拟机)能够识别的二进制字节流文件(*.class)。而JVM把Class文件中的类描述数据从文件加载到内存,并对数据进行校验、准备、解析、初始化,使这些数据 最 终成为可以被JVM直接使用的Java类型,这个说来简单但实际复杂的过程叫做JVM的类加载机制。
从二进制字节流从加载到内存,到卸载出内存过程中有7个生命周期阶段,而类加载机制包括前五个阶段
如下图所示:
其中,加载、验证、准备、初始化、卸载的开始顺序是确定的,注意,只是按顺序开始,进行与结束的顺序并不一定。解析阶段可能在初始化之后开始。
2、 如何实现JAVA 类的动态加载
3、述一下JVM加载CLASS文件的原理机制
4、谈谈JAVA内存模型
java虚拟机规范中试图去定义一种方式,来屏蔽掉各种硬件和操作系统内存访问差异,来显现java程序在不同的平台都能够达到一致的内存访问效果,java内存主要目标是定义内存中各个变量的访问规则,规定所有变量都存储在主内存,每个线程都要自己工作内存(高速缓存,与主存是两个东西),对变量的所有操作都要在线程自己的工作内存中,操作完再放回到主内存中
5、如何分析JVM的异常
6、谈一下你GC?
GC指的是垃圾收集,GC需要完成三件事情
- 那些内存需要回收
- 什么时候回收
- 如何回收
引用计数法算法
- jvm给对象中添加一个 引用计数 器,每当有一个地方引用对象时,计数器就加1,当引用失效时,计数器就减1,计数器为0的对象,就说明需要回收
可达性分析算法
- 实际中jvm是通过可达性分析算法来判断哪些对象需要被回收的,这个算法基本的思路是 GC Roots的对象作为起始点,从在这些节点开始向下搜索,搜索走过的路径称为引用链,当一个对象到
- GC Ronts对象没有任何引用链相连时,表示对象不可达。
(1) 标记-清除算法
这个算法分为标记和清除两个阶段,首先标记出所有需要回收的对象,然后统一回收被 标记的对象,这个算法有两个问题,首先是效率问题,另一个是空间问题,标记清除之后,会产生大量的内存
碎片,空间碎片太多,以后在程序运行的过程,如果需要分配较大对象时,无法找到足够的连续内存而不得不触发另一次GC操作
(2) 复制算法
这个算法是解决标记-清除算法带来的空间太多碎片问题,将内存按容量划分为大小相等的两块 ,每次只使用其中的一块,当前块要用完时,就将还存活 的 对象,移动到另外一块上面,然后将当前块的内存空间一次清理掉。现在商业虚拟机都是采用复制算法来处理新生代,不过容量划分比例不是1:1,而是将内存划分为一块较大的eden空间和两块小的survivor(幸存者区),每次使用Eden和其中一块幸存者区间,当GC回收时,将eden和一块survivor中存活的对象,移动到另外一块Survivor空间上,最后清理掉eden区和刚才用过的幸存者区,像hotspot虚拟机eden区和survivor的比例是8:1。
(3) 标记整理算法
复制收集算法在对象存活率较高时要进行较多复制操作,效率会变低,有人就提出标记整理算法,标记整理不去划分内存空间,分为三个阶段,首先是把一块空间中可回收,存活的对象给标记出来, 然后把存存活的对象移动到当前块空间内的一端,然后清除掉边界以外的对象。
(4) 分代收集
当前商业虚拟机的垃圾收集都是采用分带收集,这种算法不是什么新的 思想,只是根据对象的存活周期,将不同的内存划分为几块,比如hotspot虚拟机,将java堆分为eden sapce(伊甸园) 、survivor space(幸存者区)、tenured Gen(老年代),伊甸园和幸存者区采用复制算法,老年代采用标记整理算法。
7、两个对象相互引用,会不会被GC?
首先两个对象相互引用,和会不会被GC没有直接关系。jvm是采用对象到GC Roots可达性来决定是否会被GC回收的。
8、什么是双亲委派模型?
在ClassLoader
的结构中,还有一个重要的字段parent
,它也是一个ClassLoader
的实例,这个字段表示的ClassLoader
也成为这个ClassLoader
的双亲,自上而下,有启动类加载器,拓展类 加载器,应用加载器,自定义类加载器,jvm加载类是,默认会使用双亲委派模式
.如果一个类加载器收到类加载请求,系统会判断当前类是否已经被加载,如果被加载,就会直接返回可用的类,否则就会先请求自己父类去加载,如果双亲加载失败,则会自己加载,每一个层次的类在加载器的都是如此。
9、java中的内存溢出是如何造成的?
https://www.cnblogs.com/lcword/p/5857909.html
10、HotSpot jvm包含哪些垃圾收集器?
- Serial收集器 (单线程新生代收集器,使用复制算法)
- parNew收集器(多线程并行新生代收集器,使用复制算法)
- parallel Scavenge收集器 (多线程并行新生代收集器,使用复制算法)
- Serial Old收集器(Serial收集器老年代版本单线程老年代收集器,使用标记-整理算法)
- parallel Old收集器(parallel Scavenge收集器老年代版本,采用标记-整理算法)
- CMS收集器(Concurrent Mark Sweep,多线程并发收集器,低停顿,采用标记-清除)
参考:http://blog.csdn.net/wfh6732/article/details/57490195?utm_source=itdadao&utm_medium=referral
11、CMS收集器的标记流程是什么?
- 初始标记
- 并发标记
- 重新标记
- 并发清除
12、jvm 什么情况下会触发minor gc?
当 JVM 无法为一个新的对象分配空间时会触发 Minor GC,比如,堆内存分为年轻代 又分为 eden 区和 survivor 区,当eden满时 ,就会触发minor GC
13、jvm什么情况下回触发full gc?
首先理一下概念,CMS和Parnew只是一种垃圾回收算法,Parnew作用在新生代,CMS则作用在老年代。至于是在什么情况会发生Full GC?
根据经验来看存在以下几种情况什么发生FullGC:
1. 老年代的使用率达到阈值(通过JVM参数:CMSInitiatingOccupancyFraction设定,默认为92%)
2、永久代的使用率到达阈值CMSInitiatingPermOccupancyFraction设定,默认为92%)
3、当新生代对象沉淀到老年代时担保失败
https://blog.csdn.net/scugxl/article/details/50935863
14、jdk1.7 永久代和jdk1.8元空间的区别?
http://www.cnblogs.com/paddix/p/5309550.html
jvm面试题的更多相关文章
- 这道面试必问的JVM面试题70%的Java程序员会做错
前言 聊聊JVM,一个熟悉又陌生的名词,从认识Java的第一天起,我们就会听到这个名字,在参加工作的前一两年,面试的时候还会经常被问到JDK,JRE,JVM这三者的区别. JVM可以说和我们是老朋友了 ...
- 两道JVM面试题,竟让我回忆起了中学时代!
作者:肥朝 原文链接:https://mp.weixin.qq.com/s/4wJ6ANal0blLOseasfIuVw 中学授课模式 考虑到可能有部分粉丝对JVM参数不清楚,所以我们参照中学的授课模 ...
- JVM 面试题汇总
JVM 面试题汇总 1.什么是 JVM?它有什么作用? 答:JVM 是 Java Virtual Machine(Java 虚拟机)的缩写,顾名思义它是一个虚拟计算机,也是 Java 程序能够实现跨平 ...
- 史上最全!2020面试阿里,字节跳动90%被问到的JVM面试题(附答案)
前言:最近老是收到小伙伴的私信问我能不能帮忙整理出一份JVM相关的面试题出来,说自己在大厂去面试的时候这一块问的是特别多的,每次自己学的时候每次都学不到重点去.这不他来了,一份详细的JVM面试真题给大 ...
- 常见JVM面试题及答案整理
常见JVM面试题及答案整理 1.什么情况下会发生栈内存溢出 2.JVM内存模型 3.JVM内存为什么要分成新生代,老年代,持久代.新生代中为什么要分为Eden和Survivor. 3.1共享内存区划分 ...
- JVM面试题(史上最强、持续更新、吐血推荐)
文章很长而且持续更新,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三部 ...
- 014 JVM面试题
转自:http://www.importnew.com/31126.html 本文从 JVM 结构入手,介绍了 Java 内存管理.对象创建.常量池等基础知识,对面试中 JVM 相关的基础题目进行了讲 ...
- 面试半年,凭借这份JVM面试题,我终于拿到了字节跳动的offer!
内存区域 虚拟机栈生命周期与线程相同,描述的是Java 方法执行的内存模型,每个方法在执行的时候都会创建一个栈帧,用于存取局部变量表.操作数栈.动态链接.方法出口等信息本地方法栈与虚拟机栈作用相似,只 ...
- 30道 有趣的 的 JVM 面试题
目录 1.JVN内存结构 2.对象分配规则 3.解释内存中的栈(stack).堆(heap)和静态区(static area)的用法 4.Perm Space中保存什么数据?会引起OutOfMemor ...
- JVM 面试题,安排上了!!!
肝了一篇非常硬核的 JVM 基础总结,写作不易,小伙伴们赶紧点赞.转发安排起来! 原文链接 据说看完这篇 JVM 要一小时 JVM 的主要作用是什么? JVM 就是 Java Virtual Mach ...
随机推荐
- 安卓sdk安装慢解决办法
1.上图SDK Manager 的 Tools ->Options打开SDK Manager的Settings, 选中“Force https://… sources to be fetched ...
- 嵌入式Linux下MP4视频录制库MP4V2移植和简单介绍
**************************************************************************************************** ...
- 安装和配置SharePoint 2013 Workflow
SharePoint 2013中的工作流概述 在SharePoint 2013中,Workflow(建立在Windows Workflow Foundation 4.5)和WCF承载在Workflow ...
- 【转载并整理】JAVA解析或生成xml的四种方法
参考文章 1:http://blog.csdn.net/clemontine/article/details/53011362 2:http://www.jb51.net/article/98456. ...
- Android RGB颜色查询对照表
因为兼容性问题,色阶板功能只能在IE浏览器中运行 RGB颜色对照表 #FFFFFF #FFFFF0 #FFFFE0 #FFFF00 #FFFAFA #FFFAF0 #FFF ...
- [转]学习笔记_springmvc注解形式的开发参数接收
springmvc基于注解的开发 注解第一个例子 1. 创建web项目 2. 在springmvc的配置文件中指定注解驱动,配置扫描器 <!-- sprimgmvc 注解驱动 --> &l ...
- Appium 点击屏幕
由于版本变更,appium 点击屏幕方法已经改变, TouchAction action = new TouchAction(driver); Duration duration = Duration ...
- MySql(十):MySQL性能调优——MySQL Server性能优化
本章主要通过针对MySQL Server( mysqld)相关实现机制的分析,得到一些相应的优化建议.主要涉及MySQL的安装以及相关参数设置的优化,但不包括mysqld之外的比如存储引擎相关的参数优 ...
- Android:UI 沉浸式体验,适合第一屏的引导图片、预览图片。
链接:http://www.cnblogs.com/liushilin/p/5799381.html
- 使用MySQL Proxy和MySQL Replication实现读写分离
MySQL Replication可以将master的数据复制分布到多个slave上,然后可以利用slave来分担master的读压力.那么对于前台应用来说,就要考虑如何将读的压力分布到多个slave ...