JVM面试题

JVM

1.jvm的组成部分

  1. 类加载器:将javac编译的class文件加载到内存中

  2. 运行时数据区:将内存划分成若干个不同的区域。

  3. 执行引擎:负责解析命令,提交操作系统执行。

  4. 本地接口:融合不同的语言为java所用

2.运行时数据区

  1. 方法区(线程共享):储存已经被虚拟机加载的类信息
  2. 堆(线程共享):对象实例分配内存,垃圾回收只回收堆中的内容
  3. 本地方法栈(线程私有):第三方内容
  4. 虚拟机栈(线程私有):局部变量等信息
  5. 程序计数器(线程私有):java是多线程,每个线程都有程序计数器,用来选择执行哪行字代码

3.类加载过程

  1. 加载:反射的过程,把class文件读取到jvm中
  2. 验证:验证文件格式,访问修饰符,局部变量是否赋值,类型是否匹配等。
  3. 准备:检查有没有静态变量,有就给静态变量分配内存,赋初始值
  4. 解析:给final成员赋值
  5. 初始化:给静态变量赋值

4.堆和栈的区别

堆:内存空间不连续,效率慢,存放对象的实例和数组,更关注存储

栈:内存空间连续,效率高,存放局部变量,更关注方法的执行

5.垃圾回收机制

jvm中有垃圾回收线程,是低优先级的,正常情况下不会执行,虚拟机空闲或者内存不足的时候才会执行。

6.GC

垃圾回收,内存处理的问题程序员容易忽视,java提供gc能自动检测对象是否超过作用域,进行垃圾回收

7.垃圾回收算法

标记清楚

标记整理

复制算法

分代

8.新生代,老年代,永久代

新生代:

1个伊甸园区和2个幸存者区,比例是8:1:1。新创建的队形分配到伊甸园区,经过一次垃圾回收如果仍然存活,就会被移动到幸存者区,在幸存者区中每经历一次垃圾回收年龄就会增长一岁,年龄到达一定程度后,就会被移动到老年代中。(复制算法)

老年代:

主要存放生命周期长的内存对象。

老年代的对象比较稳定,垃圾回收不会频繁进行,在新生代进入老年代导致内存不够时才会触发垃圾回收。(标记清除)

永久代

永久代在方法区中,指的是永久保存区域,存放class和元数据信息,class被加载的时候被放入永久代。java8被元空间替代。

9.JVM的作用

通过编译吧java代码转换成字节码,类加载器把字节码加载到内存中,将其放在方法区内,系统并不能直接执行字节码指令,执行引擎将字节码翻译成系统指令,再由cpu去执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隋zy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值