Java校招复习-JVM

190 阅读3分钟

说一下 jvm 的主要组成部分?及其作用?

  1. 类加载器:负责用来把字节码文件加载进虚拟中
  2. 运行时数据区:数据的存储位置
  3. 执行引擎:将字节码转化为机器语言
  4. 本地库接口:转换的过程需要其他语言的参与

说一下 jvm 运行时数据区

  1. 堆:存放对象
  2. 栈:方法以栈帧的形式在栈中执行
  3. 程序计数器:指向当前运行的指令位置
  4. 方法区:存放类的元信息
  5. 本地方法栈:执行其他语言方法的位置

说一下堆栈的区别

堆:存放的是对象,只能通过GC回收掉,多个线程共用一个堆。

栈:存放的是局部基本类型的变量,方法执行完毕栈帧空间释放,局部变量也随之释放,每个线程对应一个栈。

队列和栈是什么?有什么区别?

队列和栈都是与存放数据的数据结构

队列是Queue,先进先出原则。

栈是Stack,后进先出原则。

什么是双亲委派模型

先说一下classLoader是什么,四种classLoader 引导类、扩展类、应用类、自定义类,简单说一下他们加载的范围。

classLoader加载类会先交给父加载器执行,有当父加载无法完成加载请求(它的搜索范围中没找到所需的类)时,子加载器才会尝试去加载类。

说一下类加载的执行过程

  1. 加载:加载类,放到方法区,生成Class实例对象

合称为链接阶段

  1. 验证:检查字节码文件是否合理
  2. 准备:静态变量开辟空间,默认赋值
  3. 解析:将符号引用转换为直接引用。
  4. 初始化:静态变量赋值

怎么判断对象是否可以被回收

扯一下可达性分析算法和引用计数算法(缺点:循环引用)

没有被GCRoot标记,没有被任何对象所引用

java 中都有哪些引用类型

强引用:只要该对象被强引用就不会被回收

软引用:当GC完后还需要释放空间,就会回收软引用引用的对象

弱引用:每次GC的时候被弱引用引用的对象都会被回收

虚引用:不是很理解,暂时理解为没有被引用。

说一下 jvm 有哪些垃圾回收算法?

标记-清除

复制算法

标记-整理

分代算法:年轻代老年代

再简单分析一下就完事了。

说一下 jvm 有哪些垃圾回收器

Serial、Serial OLd、parNew、CMS、Parallel、Parallel Old-G1

一组一组的记,简单说一下单线程、多线程、吞吐量、使用的回收算法、重点说一下CMS和G1即可。

详细介绍一下 CMS 垃圾回收器

停顿时间优先,初步标记-并发标记-重新标记-回收。标记-清除算法。

新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?

参考上面的回答

新生代垃圾回收器一般采用的是复制算法,复制算法的优点是效率高,缺点是内存利用率低;老年代回收器一般采用的是标记-整理的算法进行垃圾回收。

简述分代垃圾回收器是怎么工作的?

估计能扯个10分钟

年轻代-老年代 2:1,年轻代 8-1-1,年轻代 From-To,怎么从年轻代-老年代,Minor GC,Major GC,Full GC。

常用的 jvm 调优的参数都有哪些?

-Xms2g:初始化推大小为 2g;

-Xmx2g:堆最大内存为 2g;

内存泄漏与内存溢出

内存泄露:对象无法得到及时的回收,持续占用内存空间,从而造成内存空间的浪费。

内存泄露:内存泄漏到一定的程度就会导致内存溢出,但是内存溢出也有可能是大对象导致的。