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收集器的标记流程是什么?

  1. 初始标记
  2. 并发标记
  3. 重新标记
  4. 并发清除

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面试题的更多相关文章

  1. 这道面试必问的JVM面试题70%的Java程序员会做错

    前言 聊聊JVM,一个熟悉又陌生的名词,从认识Java的第一天起,我们就会听到这个名字,在参加工作的前一两年,面试的时候还会经常被问到JDK,JRE,JVM这三者的区别. JVM可以说和我们是老朋友了 ...

  2. 两道JVM面试题,竟让我回忆起了中学时代!

    作者:肥朝 原文链接:https://mp.weixin.qq.com/s/4wJ6ANal0blLOseasfIuVw 中学授课模式 考虑到可能有部分粉丝对JVM参数不清楚,所以我们参照中学的授课模 ...

  3. JVM 面试题汇总

    JVM 面试题汇总 1.什么是 JVM?它有什么作用? 答:JVM 是 Java Virtual Machine(Java 虚拟机)的缩写,顾名思义它是一个虚拟计算机,也是 Java 程序能够实现跨平 ...

  4. 史上最全!2020面试阿里,字节跳动90%被问到的JVM面试题(附答案)

    前言:最近老是收到小伙伴的私信问我能不能帮忙整理出一份JVM相关的面试题出来,说自己在大厂去面试的时候这一块问的是特别多的,每次自己学的时候每次都学不到重点去.这不他来了,一份详细的JVM面试真题给大 ...

  5. 常见JVM面试题及答案整理

    常见JVM面试题及答案整理 1.什么情况下会发生栈内存溢出 2.JVM内存模型 3.JVM内存为什么要分成新生代,老年代,持久代.新生代中为什么要分为Eden和Survivor. 3.1共享内存区划分 ...

  6. JVM面试题(史上最强、持续更新、吐血推荐)

    文章很长而且持续更新,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三部 ...

  7. 014 JVM面试题

    转自:http://www.importnew.com/31126.html 本文从 JVM 结构入手,介绍了 Java 内存管理.对象创建.常量池等基础知识,对面试中 JVM 相关的基础题目进行了讲 ...

  8. 面试半年,凭借这份JVM面试题,我终于拿到了字节跳动的offer!

    内存区域 虚拟机栈生命周期与线程相同,描述的是Java 方法执行的内存模型,每个方法在执行的时候都会创建一个栈帧,用于存取局部变量表.操作数栈.动态链接.方法出口等信息本地方法栈与虚拟机栈作用相似,只 ...

  9. 30道 有趣的 的 JVM 面试题

    目录 1.JVN内存结构 2.对象分配规则 3.解释内存中的栈(stack).堆(heap)和静态区(static area)的用法 4.Perm Space中保存什么数据?会引起OutOfMemor ...

  10. JVM 面试题,安排上了!!!

    肝了一篇非常硬核的 JVM 基础总结,写作不易,小伙伴们赶紧点赞.转发安排起来! 原文链接 据说看完这篇 JVM 要一小时 JVM 的主要作用是什么? JVM 就是 Java Virtual Mach ...

随机推荐

  1. linux大文件传输

    Mysql复制,初始化服务器,备份/还原等大文件复制是很常见的任务,他们完成的实际任务可以概括为: 1,(可选)压缩文件 2,发送文件 3,解压文件 4,验证文件一致性 下面介绍几种方法: 1,最简单 ...

  2. golang学习笔记 ---dup

    对文件做拷贝.打印.搜索.排序.统计或类似事情的程序都有一个差不多的程序结构:一个处理输入的循环,在每个元素上执行计算处理,在处理的同时或最后产生输出.我们会展示一个名为 dup 的程序的三个版本 p ...

  3. python的内置下载器

    python有个内置下载器,有时候在内部提供文件下载很好用. 进入提供下载的目录 # ls abc.aaa chpw.py finance.py lsdir.py ping.py u2d-partia ...

  4. 【转】C 编译器优化过程中的 Bug

    C 编译器优化过程中的 Bug 一个朋友向我指出一个最近他们发现的 GCC 编译器优化过程(加上 -O3 选项)里的 bug,导致他们的产品出现非常诡异的行为.这使我想起以前见过的一个 GCC bug ...

  5. SharePoint中在线编辑文档

    我一直以为只有在Document Library里面的File才会支持在线编辑.直到今天早上我才发现用IE打开List里面的Attachments也是支持在线编辑的,但前提是必须是IE浏览器. 目前正 ...

  6. nginx 读取文件 permission denied

    nginx 是在root用户下安装的,静态网页的目录/var/www/html/ 目录下的内容所有者也是root 用户,按照 nginx配置文件中location说明 配置静态文件访问地址. 使用网址 ...

  7. mysql SQLyog导入csv数据失败怎么办?

    分享下mysql使用SQLyog导入csv数据失败的解决方法 给mysql导入数据,选中某个表选择导入--导入使用本地csv数据即可,单有的时候不知道什么问题导入不成功!!! 给mysql导入数据,使 ...

  8. Atitit hibernate3 hinernate4 hibernate5新特性attilax总结

    Atitit hibernate3 hinernate4 hibernate5新特性attilax总结 1.1. Hibernate3的新特性 1 1.2. hibernate4.1版本中的新特性和h ...

  9. ios7新特性--1

    1.用户界面的扁平化 2.UIKit 动态行为支持 应用程序可以设置UIView 对象和其他对象(遵从UIDynamicItem 协议)的动态行为属性.遵从UIDynamicItem协议的对象被称为d ...

  10. [svc]ansible自动化模块

    ansible命令执行模块 - command模块 [执行远程命令] $ ansible n1 -m command -a 'uname -n' - raw模块 [类似于command模块.支持管道传 ...