java面试_jvm

1.jvm结构
类加载器、方法区、堆内存、本地内存,pc、本地方法栈
2.JVM堆分代
新生代 分为eden from to 区 默认比例为8:1:1
老年代 默认执行15次垃圾回收依然保留下来的对象放入老年代,
持久代 存放常量等 由于和方法区内存放的东西类似,正在被逐渐舍弃
3.jvm垃圾回收算法
引用计数法 寻找对象的直接引用或者间接引用,并计数,引用为零的时候,删除对象
优点:实时性,计数不需要花费太多的资源,清除过程可以很快的执行,不用打断程序的执行
缺点:对于循环引用的对象无法清除,例如
O1 o1 = new O1();
O2 o2 = new O2();
O1.o = o2;
O2.o = o1;
即使两个对象都设置为null还是无法清除,因为计数不为0

复制算法 新生代分为eden区和survive区,survive区又分为from区和to区,当eden区满和from区满的时候,将存活下来的对象复制到to区,to区放不下的话就放到老年代里。
优点:每次将新生代的内存全部清空,效率高
缺点:浪费空间,需要有闲置的内存空间用来复制,但是也不会浪费很多,因为jvm的对象存活率是非常低的

标记清除法 如果栈空间中存在一个对象的引用,那么这个对象就是可访问的,将可访问的变量做个标记,当需要执行内存回收的时候,遍历整个堆,将未标记的对象清除
优点:可以延时回收,即内存不够的时候才会执行,可以解决循环引用,
缺点:会导致整个程序暂停,会导致碎片化
标记整理算法 清除后所有内存左移,解决碎片化
4.java中的垃圾收集器
scavenge gc 次收集
Full gc 全收集
5.常见参数
-Xms 初始化堆大小
-Xmx 最大堆大小
-XX:NewSize 年轻代大小
6.类中不同部分存放的位置
方法:存放在方法区
静态变量:静态区
常量:常量池
String:常量池
引用类型变量:引用放在栈,对象放在堆
基本类型变量:栈
局部变量和参数:栈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值