集团主站
欢迎来到成都达内官方网站!达内—美国上市公司 亿元级外企IT培训企业!
成都it培训哪家好
成都it培训哪家好
全国服务监督电话:15023458194  |   联系客服   |
当前位置:主页 > 培训课程 > Java >

成都java工程师:Java GC机制简要总结

发布者: 成都达内     浏览次数:     发布时间:2019-05-07 10:42:37

Java GC机制简要总结:Java垃圾回收的基本工作原理--程序中的不可用对象(不存活的对象,没有任何引用),或者无用的变量信息等,在程序中长期存在会逐渐占用较多的内存空间...

  成都java工程师:Java GC机制简要总结(Java垃圾回收的基本工作原理)

  垃圾回收的对象

  程序中的不可用对象(不存活的对象,没有任何引用),或者无用的变量信息等,在程序中长期存在会逐渐占用较多的内存空间,导致没有足够的空间分配给新生成的对象等.

  判断哪些是需要回收的对象

  早期jdk使用引用计数法,计数每个对象的引用次数,对于没有引用的对象进行删除,但是该方法无法处理循环引用情况.

  之后引入了可达性分析算法,将所有的引用关系看作一张图,从一个结点(GC ROOT)开始,寻找向下的引用结点,之后重复这一过程,其中的路径被称为引用链,当一个对象没有与GC ROOT相连的引用链时,该对象是不可用的

  成都java工程师:Java GC机制简要总结

  执行回收的时间

  在CPU空闲时自动回收,或在堆内存满后进行回收,或者程序中调用System.gc()后进行回收

  执行回收的算法

  共有四种

  1. 标记-清除算法

  分两步执行,首先标记,根据可达性分析标记出所有需要回收的对象,之后对被标记的对象进行回收.

  该方法不需要移动对象,只对不可用对象操作,较为简单.但是一般情况下,效率较低,同时由于直接回收垃圾,会产生内存碎片,后续为较大对象分配空间时,可能因为无法找到较大的连续内存空间而必须再次进行垃圾回收过程

  2. 复制算法

  将可用的内存按照容量大小等分,每次只使用一块空间进行分配,当这一块用完时,将可用对象移动到另一块空间上,然后清理已经用过的空间.

  该方法每次只需要对一半的空间进行回收,同时解决了内存碎片的问题.但是使用中浪费了一半的内存空间,在可用对象较多的情况下需要进行较多的复制,效率降低.

  3. 标记-整理算法

  标记-清除法的改进.在使用标记-清除算法回收不可用对象后,将所有可用的对象压缩到内存的一端,之后清理端边界之外的所有内存.

  该方法解决了内存碎片的问题,但是增加了对象移动的过程,执行的成本较高

  4. 分代收集算法

  目前主要使用的方法

  根据对象存活的周期将内存(堆)分为多块,一般是新生代,老年代和永生代(永久代).在不同的代使用不同的收集器(收集器使用不同的算法)进行回收,提高效率.

  新生代

  尽快的收集生命周期短的对象.新生代内部一般被分为三个部分,分别是Eden区,survivor0区和survivor1区,分配的比例为8:1:1.新产生的对象首先被放置到Eden区,当该区被放置满之后,将该区的存活对象移动到survivor0区,之后清空Eden区,当survivor0区也被放置满时,将Eden区和survivor0区存活对象复制到survivor1区,之后清空Eden区和survivor0区.,交换survivro0区和survivor1区,即保持survivor1区为空,之后重复该过程.

  当survivor1区不够存放eden区和survivor0区的存活对象时,将这些对象放入老年代.

  在这个过程中的垃圾回收过程被称为Minor GC(小型垃圾回收),该过程发生比较频繁,不一定严格等待eden区满才执行.该回收过程发生时,所有程序线程暂停,直到完成回收工作,是Stop the world(STW)事件的一种.

  成都java工程师:Java GC机制简要总结

  老年代

  存放生命周期较长的对象.老年代的空间较新生代大,当老年代满时触发Major GC,该过程同样导致STW,并且时间比Minor GC更长.

  永久代

  存放静态文件,如类或方法等.一些运行过程中动态生成的类会被放置到这里.

  各代使用不同的回收器,新生代使用应用复制算法的收集器,老年代使用应用标记-清除或标记-整理算法的收集器

  Java8废弃了永久代,用元空间进行代替;在JDK1.7中推出了新的G1收集器.

(责任编辑:范老师)
最新开班
  • 成都Java培训班
    免费试听名额发放中...
  • 成都C++培训班
    免费试听名额发放中...
  • 成都PHP培训班
    免费试听名额发放中...
  • 成都网络工程培训班
    免费试听名额发放中...
  • 成都Unity3D培训班
    免费试听名额发放中...
  • 成都大数据培训班
    免费试听名额发放中...
  • 成都uid培训班
    免费试听名额发放中...
  • 成都会计培训班
    免费试听名额发放中...
  • 成都Python培训班
    免费试听名额发放中...
  • 成都嵌入式培训班
    免费试听名额发放中...
  • 成都web培训班
    免费试听名额发放中...
  • 成都软件测试培训班
    免费试听名额发放中...
在线留言
提交

校区地址:绵阳市涪城区临园路东段68号富临大都会7栋3单元9层12号

联系电话:15023458194

公交路线:富乐路口凯德广场(10路;29路;3路;15路;11路;15a路;71路)

校区地址:成都市锦江区东大街紫东楼端35号明宇金融广场19楼1906室

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市高新区奥克斯广场蜀锦路209号一楼商铺

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都锦江区东大街芷泉街229号东方广场C座3楼303

联系电话:15023458194

公交路线:芷泉街(188路;115路;515路;236路;505路;501路;84路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市武侯区佳灵路3号红牌楼广场2号写字楼11楼1115号

联系电话:15023458194

公交路线:红牌楼东(11路;92路;100路;111路;139路;g28路;快速公交K1/K2) 地铁路线:红牌楼站(地铁3号线)

校区地址:成都市锦江区红星路二段70号四川日报大厦502-2

联系电话:15023458194

公交路线:市二医院站(6路;49路;102路;5路;37路;g92路;) 地铁路线:地铁市二医院(地铁3号线)

校区地址:成都市锦江区东大街芷泉段229号东方广场C座16层

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:四川省成都市武侯区高新科技孵化园9号园区E座7楼

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都市人民南路一段86号“城市之心”大厦26楼

联系电话:15023458194

公交路线:成都市人民南路(6路;14路;42路;72路;76路;1010路;)

校区地址:成都市高新区奥克斯广场B座1708

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

了解达内动态
关注成都达内教育公众号

首页 | 关于达内 | 课程中心 | 专家师资 | 视频教程 | 学员空间 | 校企合作 | 新闻资讯 | 就业指导 | 网站地图

2016-2025 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56