GC

1.什么是GC?

Java中对象内存是自动分配的,机器/JVM内存是有限的,同时程序又在不停创建对象,为了保证程序运转,需要将无用的对象清理掉,释放内存,供新创建的对象使用,GC就是用来清理无用对象用的

2.什么是无用对象?

没有被程序引用的对象是无用对象

3.怎么判断XX对象没有被引用?

引用计数--死循环

GC Roots遍历

4.创建的对象的生命周期?

在哪出生-----Eden

长大过程中会去哪---大部分都是朝生夕死,顽强的对象会经历 Eden->S0->S1->S0->S1->...>Olden

如何判断对象长大了----每次GC之后,能幸存就年龄+1,如果年龄足够大,就可以去Olden区了

5.GC怎么清理无用对象?

笨办法:扫描整个JVM堆,标记出无用对象,然后remove

笨办法存在的问题:JVM堆空间太大,打扫完天都黑了,都干不了活了;还有一个问题是remove完,空间里面七零八落的,都是碎片

如何防止碎片化:打扫完之后,整理一下,存活的对象放在一起,剩余的空间都可以随便用

如何解决打扫慢的问题:1>再找个人/Thread帮忙一起打扫;2>先打扫局部空间,别那么累(对JVM堆进行分块分区)

6.JVM为什么要分这么几个代(年轻代、年老代、永久代)?

一句话:为了高效地完成必须的清理工作

研究表明:90%对象朝生夕死,那针对这部分对象可以单独放一个房间,打扫频率调高一些

Eden->S0->S1->Olden

Minor Gc->Minor Gc->Minor-Gc->Marjor Gc

7.GC的时候会发生什么?

STW=stop the world event

minor gc/major gc都会STW

STW发生的时候,应用程序会怎样:所有用户线程都被挂起->运转中的Thread Count降为0->Client Request无响应 HTTP 502?

STW之后呢:内存被释放

8.GC的运转过程是怎样的?

9.Minor GC和Major GC的区别是啥?

打扫的区域:

打扫的速度:

10.该选择什么样的GC?

看你的需求是什么:响应时间 VS  吞吐量

       响应时间:focus on responding in short periods of time.
       吞吐量:单元时间内处理事务/数据库查询数量,批处理操作虽然耗时较长,但平均算下来单位时间内处理任务数量多

如果要求响应时间,那就找多个Thread,分区进行打扫

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值