Java面试相关我爱编程

Java虚拟机面试相关

2016-10-02  本文已影响0人  cp_insist

引言:相信很多java的开发者都会对我们缩写的java文件究竟是怎么样被加载运行的过程,以及Java的内存回收机制怎么实现?很好奇,今天自己无意中看到几篇相关文章,下面谈谈自己对这个过程的理解:
本片文件主要从一下几个方面讨论Java的虚拟机
1:.java文件如果加载到JVM 中
2:JVM的内存模型
3:JVM的垃圾回收机制
4:常用垃圾回收器

1 :类加载的过程

类加载器的主要工作就是把类文件(.class)加载到JVM中。如下图所示,其过程分为三步:

2:Java虚拟机内存模型

jvm.png
我们所讲的Java Virtual Machine即JVM = 类加载器+运行时数据区+执行引擎
首先我们的java将写好的java文件经过java编译器编译之后成为class文件,由相应的类加载器进行加载到我们JVM中运行时数据区,在类加载器家在期间它会检查该类的合法性,并交由执行引擎进行执行;

3:JVM的垃圾回收机制

Java 的垃圾回收机制常常用来和C以及C++做对比,C和C++的对象回收需要程序员自己去管理,对象的生命周期完全掌握在机开发者本身,而Java的的对象回收交由JVM的做,让程序员从繁琐的垃圾回收工作中解脱出来。这样做的带来的好处不言而喻,但同时也会缺点,比如:当我们的内存溢出时,定位原因是如果不是对JVM特别熟悉,那将比较麻烦,相反,C++或者C语言出现内存溢出的情况时比较好定位,因为内存的申请和释放都是由程序员负责的。下面我们从一下几个方面谈谈Java的垃圾回收

A:什么时候会触发垃圾回收

JVM的垃圾回收采用的分区分带机制,主要的战场在JVM的堆区域。我们刚刚也讲了,JVM的堆按照存储对象的生命周期不同分为了 年轻带和年老带;其中年轻带为了垃圾回收算法的运行又分为Edeg和survive区域(survive区域又分为from 和to 区域);触发Monir GC的条件是,Edeg区域存储空间满了时;触发Full GC的条件是升到年老带的对象大于老年带剩余存储空间时就会触发full GC或者小于时被HandlePromotionFailure参数强制full gc;gc与非gc时间耗时超过了GCTimeRatio的限制引发OOM,调优诸如通过NewRatio控制新生代老年代比例,通过MaxTenuringThreshold控制进入老年前生存次数等。

B:对什么东西进行回收?

从root对象开始所有,对不可达的对象进行标记,经过第一次清除之后仍然没有复活的对象。

C:怎么样进行回收?

JVM为了方便对内存进行管理回收,采用了分带回收机制,对不同区域的对象,根据其特带你采用了不同垃圾回收算法。

D :方法评价综述,以及补充概念:

4:常用的垃圾回收器及其特点

Java的垃圾收集器根据不同的区域是否可以开启多个线程是否可以和用户线程并发进行如下划分;两个垃圾回收器之间的连线表示这两个垃圾收集器可以组合使用。


image.png

年轻带:serial ,ParNew , Parallel Scavenge
老年代:CMS,serial Old(MSC) Paralle Old

1:serial 垃圾搜集器

jdk1.3之前垃圾回收器的唯一选择,采用的单线非并行的机制,主要作用于 年轻带。
Serial收集器是虚拟机运行在Client模式下的默认新生代收集器。

2:ParNew 垃圾收集器

是serial垃圾收集器的多线程版本,可以同时运行多个垃圾回收线程。也作用于年轻带
ParNew收集器是许多运行在Server模式下的虚拟机中首选的新生代收集器。

3:Parallel Scavenge 垃圾收集器

可以和用户线程并发执行并且可以开启多线程的垃圾回收的垃圾收集器;
采用的是复制算法;
主要适合在后台运算而不需要太多交互的任务。

4:Serial Old 垃圾收集器

Serial Old是Serial收集器的老年代版本,它同样是一个单线程收集器,使用标记-整理算法。
Serial Old收集器的主要意义也是在于给Client模式下的虚拟机使用

5:Parallel Old收集器

Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。
在注重吞吐量以及CPU资源敏感的场合,都可以优先考虑Parallel Scavenge加Parallel Old收集器。

6:CMS垃圾收集器

CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。目前很大一部分的Java应用集中在互联网站或者B/S系统的服务端上,这类应用尤其重视服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验。CMS收集器就非常符合这类应用的需求。
CMS收集器是基于“标记—清除”算法实现的

7:G1垃圾收集器

G1(Garbage-First)是一款面向服务端应用的垃圾收集器。HotSpot开发团队赋予它的使命是未来可以替换掉JDK 1.5中发布的CMS收集器。与其他GC收集器相比,G1具备如下特点。

上一篇 下一篇

猜你喜欢

热点阅读