jvm面试题

1.Jvm基本结构

Jvm由9部分构成:

类加载子系统、堆、栈、方法区、本地方法栈、PC寄存器、直接内存、垃圾回收器、执行引擎。

2.堆、栈、方法区的作用分别是什么?

方法区:就是存放类信息、常量信息、常量池信息、包括字符串字面量和数字常量等。

:在java虚拟机启动的时候建立java堆,它是java程序最主要的内存工作区域,几乎所有的对象实例都存放在java堆中,堆空间是所有线程共享的。

:每个虚拟机线程都有一个私有的栈,一个线程的java栈在线程创建的时候被创建,java栈中保存局部变量、方法参数、同时java的方法调用、返回值等。

3.如何设置堆空间的大小

-Xms:堆空间的初始值

-Xmx:堆空间的最大值

原则上一般会将两个值设置为一般大,从而可以减少GC的次数

4.常用的垃圾回收算法

复制算法:其核心思想就是将内存空间分为两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中的留存对象复制到未被使用的内存块中去,之后去清除之前正在使用的内存块中所有的对象,反复去交换两个内存的角色,完成垃圾收集。(java中新生代的from和to空间就是使用这个算法)。

标记清除法:就是分为标记和清除两个阶段进行处理内存中的对象,当然这种方式也有很大弊端,就是空间碎片的问题,垃圾回收后空间是不连续的,不连续的内存空间的工作效率要低于连续的内存空间。

标记压缩法:标记压缩法是在标记清除法基础之上做了优化,把存活的对象压缩到内存一端,而后进行垃圾清理(java中老年代使用的就是标记压缩法)。

5.新生代和老年代为什么使用不同的算法

新生代GC比较频繁,回收的对象比较多,老年代则相反,经历过N多次GC都没被回收,GC次数较少!

6.主流的垃圾回收器

串行回收器、并行回收器

CMS回收器:并发标记清除,使用标记清除法,主要关注系统停顿时间。

G1回收器:属于分代垃圾回收器,区分新生代和老年代,依然有eden和from/to区,使用了分区算法

7.java 的GC 什么时候回收垃圾?
  1. 执行 system.gc()的时候
  2. 新生代对象晋升到老年代的时候,老年代剩余空间低于新生代对象晋升为老年代的速率,会触发老年代回收
  3. new 一个大对象,新生代放不下,直接到老年代,空间不够,触发Full GC
  4. 对象没有了引用的时候,下次GC就会被回收掉
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值