首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
whisper_24
西安电子科技大学 Java
发布于陕西
关注
已关注
取消关注
@Aaron_涛:
Java垃圾回收机制
java垃圾回收是java语言方面与c++的一个主要特性吧,极大的方便了程序员的开发操作,无需自己管理内存。 要了解java垃圾回收机制首先简单了解下java内存模型 JAVA内存模型 程序运行的时候,内存主要由以下部分组成: 堆:所有线程共享一个堆;存放的都是new 出来的对象;使用完了的对象,将来都不被使用的对象,由垃圾回收器回收,清理出内存以便创建新对象 方法区:所有线程共享一个方法区;里面存放的内容有点杂,可以认为是除堆和栈中的其它东西(如类信息,静态变量,常量,代码等);Java虚拟机规范规定可以不对方法区进行垃圾回收,当并不是不回收,主要看具体虚拟机的实现,比如可以回收一些废弃常量和无用的类,如果大量加载cglib代理子类的话将会发生持久代溢出; 程序计数器:也叫PC,存放下一条指令所在单元的地址的地方; JAVA栈:每个线程都有一个自己的JAVA栈;这里面有一个叫做栈帧的东西,栈帧存放的一般是方法的局部变量,方法出口信息等;方法调用过程中,栈帧自动压栈出栈,栈空间大小是有限制的; 本地方法栈:与JAVA栈类似,区别是使用的对象不一样,本地方法栈是给Native方法使用的,JAVA栈是给JAVA方式使用的; 如何判断java对象是否要被回收 可达性分析算法:通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,当一个对象到GC Roots没有任何路径相连(用图论的话来说,就是从GC Roots到这个对象不可达)时,则此对象为垃圾对象。 那么,哪些对象可以被认为是“GC Roots”对象呢,如下 Class - 由系统类加载器加载的对象,这些类是不能够被回收的,他们可以以静态字段的方式保存持有其它对象。 Thread - 活着的线程 Stack Local - Java方法的local变量或参数 JNI Local - JNI方法的local变量或参数 JNI Global - 全局JNI引用 垃圾回收算法 复制算法 将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。 标记-清除算法 首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象; 它主要有两个不足:一个是效率问题,标记和清除两个过程的效率都不高;另一个是空间问题,标记清除之后会产生大量不连续的内存碎片; 标记-整理 标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。 那么,垃圾对象是如何回收的呢?答案是分代回收。 为什么需要分代收集 不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。分代垃圾回收采用分治的思想,进行代的划分,把不同生命周期的对象放在不同代上,不同代上采用最适合它的垃圾回收方式进行回收。 一般,Java堆分为新生代和老年代和持久代(方法区),这样就可以根据各个年代的特点采用最适当的收集算法。 在新生代中,有大批对象死去,只有少量存活,一般选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集。新生代分三个区。一个Eden区,两个Survivor区(Eden:Survivor比例是8:1)。使用的使用一个Eden区和一个Survivor区作为申请内存存放对象的区域,如果不够发送一次YGC,将对象通过复制算法移动到另一个Survivor区,如果这个Survivor还是不够需要老年代来进行担保,也就是说如果另一块Survivor区不够将通过担保进制进入老年区。新创建的对象的内存都分配自eden,Minor collection的过程就是将eden和在survivor space中的活对象copy到空闲survivor space中,对象在新生代里经历了一定次数(可以通过参数配置)的minor collection后,就会被移到老年代中,称为tenuring。 老年代中因为对象存活率高,不需要大量清理或整理,因此使用“标记—清理”或者“标记—整理”算法来进行回收。 GC分为两种,YGC和FGC; YGC:对Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区。 FGC:对整个堆进行GC,包括Young、Tenured和Perm。在对JVM调优的过程中,很大一部分工作就是对于FullGC的调节。尽可能减少Full GC的次数 有如下原因可能导致Full GC: 年老代(Tenured)被写满 持久代(Perm)被写满 System.gc()被显示调用 上一次GC之后Heap的各域分配策略动态变化 什么时候发生垃圾回收(GC) 如果只是每次在内存不够就发生GC这种策略是很片面的,当然如果是申请对象内存空间不够的时候肯定是要发送GC以便创建对象的,如果GC了还是不够就会出现内存溢出。但是代码运行阶段GC也是在某些特定点上发生的。 我们已经知道了GC的发送需要让jvm知道哪些对象的要被回收的,那就是说哪些对象被标记了,通过可达性分析发现没有被引用了,但是程序是一直在变化的,我们如果要找到这些对象就需要让程序停下来,这被称为Stop the world这个时候让垃圾回收线程去标记有哪些对象要被回收。而程序需要在那些地方发生停顿然后GC呢?如果停顿点太多影响效率,太少又会经常的出现内存溢出。所以需要定义好那些地方出线GC,这些地方被称为安全点 什么是安全点,长时间执行的地方被称为安全点,例如方法调用,循环跳出,异常跳转。 那怎么保证所有线程在安全点这个时候停下来,现在主要运用一种算法,主动式中断算法,要发生GC的时候设置个标志位,让线程去轮询,标志位置与安全点重合。 当线程不执行的时候怎么办?难道重新分配cpu时间?线程处于sleep的时候,安全区域代码可以被认为是安全点的扩展,表示这个区域内都是安全点,当线程离开安全区域时候,系统检查是否完全根节点,如果完成了,那线程继续执行,否则就要等待完成。
点赞 0
评论 1
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
07-21 17:42
中南大学 C++
25届双非计算机国考省考皆败+无实习,该死磕二战还是硬着头皮找工作?
今天给大家分享的是一位粉丝的提问,25届双非计算机国考省考皆败+无实习,该死磕二战还是硬着头皮找工作?接下来把粉丝的具体提问和我的回复分享给大家,希望也能给一些类似情况的小伙伴一些启发和帮助。同学提问:你好,我是二五届的毕业生,双非本科计算机专业的,现在是考公面试国考省考都没过。现在手上只有一些课设但也忘光了,也没有相关实习经验。我想着接下来有两个选择:一个是直接找工作,但我这样的肯定找不到开发的工作而且感觉对代码也没有什么兴趣,我现在不知道应该找什么样的工作。二是再战一年考公,这样的话如果还考不上的话是不是更难找工作了,或者要转行。或者您有什么更好的思路么?Yt回答:25届双非本科计算机专业...
计算机就业职业规划辅导
点赞
评论
收藏
分享
06-23 11:28
门头沟学院 Java
这一块儿/.
这一块儿/.
牛客91966197...:
也有可能是点拒绝的时候自动弹的话术
点赞
评论
收藏
分享
07-23 15:05
门头沟学院 Java
面试开始前半小时跟我说被顶替了?
如图,
点赞
评论
收藏
分享
07-22 22:41
已编辑
华中科技大学附属小学 游戏运营
应聘游戏公司,游戏经历要如何准备?
相信找游戏行业实习&工作的小伙伴,都看到过JD中要求有游戏经历,在面试中也会被提问到。那么游戏经历应该怎么准备呢?把玩过的所有游戏都罗列出来吗?nonono,游戏经历其实也是简历的一部分,也要“简”而重点突出。省流一句话就是:按游戏品类+突出有价值点的游戏经历(比如游戏时长长、段位高、氪金多等)1、按游戏品类分类游戏类型可以有很多种分类,比如按终端(手游、端游、网游、主机)、按游戏品类(mmo、moba、卡牌等)、按题材(二次元、仙侠、国风等)。写简历时建议按游戏品类,因为是行业内最常用的分类标准,我们这么写会显得专业。游戏品类可以参考如下:来源:《明日方舟》调查问卷2、突出有价值点的...
教练!我也想进游戏公司
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
百度提前批一面 7.24
1.3W
2
...
字节复活赛
9212
3
...
字节生活服务(杭州)一二三面(等HR or 挂)
4425
4
...
不懂来大厂实习究竟能学到啥?
4138
5
...
滴滴提前批面经
3761
6
...
百度提前批一面:面试官居然让我手撕两数之和???最奇幻的一轮面试,结束还说.......
3443
7
...
入我滴滴!早十晚六 !
3271
8
...
终章
2905
9
...
团子呆了一个多月,想走的欲望达到的了顶峰
2576
10
...
字节实习第三天10点下班,哭了
2560
创作者周榜
更多
正在热议
更多
#
哪些公司开提前批了?
#
27978次浏览
268人参与
#
入职以后才知道的校招谎言
#
88709次浏览
583人参与
#
风评不好的公司,你会去吗?
#
63628次浏览
450人参与
#
华子oc时间线
#
1244637次浏览
6487人参与
#
哪些公司校招卡第一学历
#
70463次浏览
280人参与
#
校招第一份工作你干了多久?
#
95316次浏览
423人参与
#
实习如何「偷」产出?
#
53052次浏览
1355人参与
#
除了主业以外,你还有哪些其他收入?
#
12656次浏览
202人参与
#
不卡学历的大厂有哪些?
#
30731次浏览
232人参与
#
机械人,你的第一份感谢信是谁给的
#
30616次浏览
310人参与
#
校招阶段,学历VS技术哪个更重要?
#
18285次浏览
188人参与
#
职场新人体验
#
27334次浏览
251人参与
#
研究所笔面经互助
#
78591次浏览
483人参与
#
工作丧失热情的瞬间
#
294156次浏览
2372人参与
#
腾讯音乐求职进展汇总
#
98292次浏览
571人参与
#
你的秋招第一场笔试是哪家
#
148300次浏览
1485人参与
#
社恐入职新公司如何融入团队
#
12084次浏览
63人参与
#
华为开奖那些事
#
4094803次浏览
24608人参与
#
校园里的破防时刻
#
12076次浏览
128人参与
#
Offer比较,你最看重什么?
#
191901次浏览
1308人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务