A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么要回收垃圾
因为在jvm执行过程里,必然会产生很多对象,占用内存的东西
这些会大量存在于内存里面,一部分对生命周期结束依然会占用内存,弊端是占用内存缺无法再次作用的对象
称之为垃圾,因此回收垃圾释放内存
ps:内存泄漏 是释放释放一部分内存,导致一部分内存不可用了,而且占有一定的总内存空间,如果不及时处理,将会导致总内存空间占满,导致系统崩盘
垃圾回收有三个方法
1标记清楚法, 分为两部
标记阶段:遍历所有对象,在活动对象里写上标记
清楚阶段:再次遍历对象,检查标记和活动对象,将内存释放清理对象,处于活动状态的对象去掉标记
优点:算法和实现十分简单
缺点:当碎片化的时候这种工作显得狠难实施了,对于存活对象不连续性,会导致可用内存被分割成小块
处理.如果有新对象处理的话.需要重新开辟空闲的空间.所以空闲内存会有一定压力不能完成分配.
影响读写功能.而且标记过程就是对内存读写,不断内存复制.因此算法于技术兼容部太理想
引用计数:垃圾回收关注是对不会利用的对象内存回收并且释放,因此,对任意对象,没用一次对象引用,就计数+1;结束对象引用时候-1;一旦计数器为0则清理
缺点:占用资源大,对每个对象需要维护计时器,消耗运存大
占用内存,这块是对服务器有很大的压力挑战.开销较大
实现复杂,理论思路很容易但是实现部容易很难统筹到每个对象
复制法:
将内存分两等分,分配时候分开两个步骤,第一步类标记清楚算法标记找出活动对象,
第二步复制算法将活动对象复制到二区,并将一区清理,互不干扰
效率快,实现好不会产生碎片,可以连续工作,分配效率高效

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马