赞
踩
1、试说一下JVM的主要组成部分?及其作用?
组件的作用:首先通过类加载器(ClassLoader)会把Java代码转换成字节码,运行时数据区 (Runtime Data Area) 再把字节码加载到内存中,而字节码文件只是JVM的一套指令集规范,并不是直接交给底层操作系统去执行,因此需要特定的命令解析器执行引擎(Execution Engine),将字节码翻译成底层系统指令,再交给CPU去执行,而这个过程中需要调用其他语言的本地库接口(Native Interface)来实现整个程序的功能。
2.说一下JVM运行时数据区?
有的区域随着虚拟机进程的启动而存在,有的区域则依赖用户进程的启动和结束而创建和销毁。
3.说一下堆栈的区别?
4.队列和栈是什么?有什么区别?
5.什么是双亲委派模型?
在介绍双亲委派模型之前先说一下类加载器。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立在JVM中的唯一性,每一个类加载器,都有一个独立的类名称空间。类加载器就是根据指定全限定名称将class文件加载到JVM内存,然后在转化为class对象。
类加载器分类:
双亲委托模型:如果一个类加载器收到了类加载的请求,它首先不会自己去加载这个类,而是把这个请求委派给父类加载器去完成,每一层的类加载器都是如此,这样所有的加载请求都会被传送到顶层的启动类加载器中,只有当父加载器无法完成加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试去加载类。
6.说一下类加载的执行过程?
类加载分为以下5个步骤:
7.怎么判断对象是否可以被回收?
一般有两种方法判断:
8.Java中有哪些引用类型?
9.说说JVM有哪些垃圾回收算法?
10.说说JVM有哪些垃圾回收器?
11.详细介绍一下CMS垃圾回收器?
CMS是英文Concurrent Mark-Sweep的简称,是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动JVM的参数加上“-XX:+UseConcMarkSweepGC”来指定使用CMS垃圾回收器。
CMS使用的是标记-清除的算法实现的,所以在gc的时候会产生大量的内存碎片,当剩余内存不能满足程序运行要求是,系统将会出现Concurrent Mode Failure,临时CMS会采用Serial Old回收器进行垃圾清除,此时的性能将会被降低。
12.新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?
新生代回收器一般采用的是复制算法,复制算法的优点是效率高,缺点是内存利用率低;老年代回收器一般采用标记-整理的算法进行垃圾回收。
13.简述分代垃圾回收器是怎么工作的?
分代回收器有两个分区:老年代和新生代,新生代默认的空间占比总空间的1/3,老年代的默认占比是2/3。
新生代使用的复制算法,新生代里有3个分区:Eden、To Survivor、From Survivor,它们的默认占比是8:1:1,它的执行流程如下:
每次在From Survivor到ToSurvivor 移动时都存活的对象,年龄就+1,当年龄到达15(默认配置是15)时,升级为老生代。大对象也会直接进入老生代。
老生代当空间占用到达某个值之后就会触发全局垃圾回收,一般使用标记-整理的执行算法。以上这些循环往复就构成了这个分代垃圾回收的整体执行流程。
14.说一下JVM调优的工具?
JDK自带了很多监控工具,都位于JDK的bin目录下,其中最常用的是jconsole和jvisualvm这两款视图监控工具。
15.常用的JVM调优的参数有哪些?
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。