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. 安卓sdk安装慢解决办法

    1.上图SDK Manager 的 Tools ->Options打开SDK Manager的Settings, 选中“Force https://… sources to be fetched ...

  2. 嵌入式Linux下MP4视频录制库MP4V2移植和简单介绍

    **************************************************************************************************** ...

  3. 安装和配置SharePoint 2013 Workflow

    SharePoint 2013中的工作流概述 在SharePoint 2013中,Workflow(建立在Windows Workflow Foundation 4.5)和WCF承载在Workflow ...

  4. 【转载并整理】JAVA解析或生成xml的四种方法

    参考文章 1:http://blog.csdn.net/clemontine/article/details/53011362 2:http://www.jb51.net/article/98456. ...

  5. Android RGB颜色查询对照表

    因为兼容性问题,色阶板功能只能在IE浏览器中运行 RGB颜色对照表   #FFFFFF   #FFFFF0   #FFFFE0   #FFFF00   #FFFAFA   #FFFAF0   #FFF ...

  6. [转]学习笔记_springmvc注解形式的开发参数接收

    springmvc基于注解的开发 注解第一个例子 1. 创建web项目 2. 在springmvc的配置文件中指定注解驱动,配置扫描器 <!-- sprimgmvc 注解驱动 --> &l ...

  7. Appium 点击屏幕

    由于版本变更,appium 点击屏幕方法已经改变, TouchAction action = new TouchAction(driver); Duration duration = Duration ...

  8. MySql(十):MySQL性能调优——MySQL Server性能优化

    本章主要通过针对MySQL Server( mysqld)相关实现机制的分析,得到一些相应的优化建议.主要涉及MySQL的安装以及相关参数设置的优化,但不包括mysqld之外的比如存储引擎相关的参数优 ...

  9. Android:UI 沉浸式体验,适合第一屏的引导图片、预览图片。

    链接:http://www.cnblogs.com/liushilin/p/5799381.html

  10. 使用MySQL Proxy和MySQL Replication实现读写分离

    MySQL Replication可以将master的数据复制分布到多个slave上,然后可以利用slave来分担master的读压力.那么对于前台应用来说,就要考虑如何将读的压力分布到多个slave ...