JVM 垃圾回收 总结
来源:互联网 发布:数据库开发与dba 编辑:程序博客网 时间:2024/06/11 10:04
(一)JVM内存模型:
在jvm中堆空间划分为三个代:年轻代(Young Generation)、年老代(Old Generation)和永久代(Permanent Generation)。
年轻代又分成3个部分,一个eden区和两个相同的survior区。刚开始创建的对象都是放置在eden区的。分成这样3个部分,主要是为了生命 周期短的对象尽量留在年轻代。当eden区申请不到空间的时候,进行minorGC(注: GC:Garbage Collection,垃圾回收),把存活的对象拷贝到survivor。年老代主要存放生命周期比较长的 对象,比如缓存对象。
(二)垃圾回收算法:
具体jvm内存回收过程描述如下(可以结合上图):
1、对象在Eden区完成内存分配
2、当Eden区满了,再创建对象,会因为申请不到空间,触发minorGC,进行young(eden+1survivor)区的垃圾回收
3、minorGC时,Eden不能被回收的对象被放入到空的survivor(Eden肯定会被清空),另一个survivor里不能被GC回收的对象也会被放入这个survivor,始终保证一个survivor是空的
4、当做第3步的时候,如果发现survivor满了,则这些对象被copy到old区,或者survivor并没有满,但是有些对象已经足够Old,也被放入Old区 XX:MaxTenuringThreshold
5、当Old区被放满的之后,进行fullGC
另外,注意:
- 当年轻代内存满时,会引发一次普通GC,该GC仅回收年轻代。需要强调的时,年轻代满是指Eden代满,Survivor满不会引发GC
- 当年老代满时会引发Full GC,Full GC将会同时回收年轻代、年老代
- 当永久代满时也会引发Full GC,会导致Class、Method元信息的卸载
另一个问题是,何时会抛出OutOfMemoryException?并不是内存被耗空的时候才抛出,而是:
- JVM98%的时间都花费在内存回收
- 每次回收的内存小于2%
整理自:
http://ldbjakyo.iteye.com/blog/1490242
http://hx100.blog.51cto.com/44326/587068
- JVM垃圾回收总结
- JVM 垃圾回收 总结
- JVM垃圾回收总结
- JVM垃圾回收总结
- JVM垃圾回收总结
- JVM垃圾回收总结
- JVM垃圾回收总结
- JVM垃圾回收总结
- JVM垃圾回收总结
- JVM垃圾回收总结
- JVM总结-垃圾回收
- JVM垃圾回收总结
- jvm垃圾回收理论知识总结
- Jvm垃圾回收器总结
- JVM垃圾回收器总结
- JVM垃圾回收机制总结(1)
- JVM垃圾回收机制算法总结
- JVM调优总结(二)--垃圾回收
- scrollTo vs scrollBy
- 数据库时间类型
- 北京多数受访者称长假高速路拥堵并非因免费-长假-拥堵-高速免费
- iOS Nav+TabBar下的self.title,self.navigationItem.title,self.tabBarItem.title区别和联系
- 常用sql语句
- JVM 垃圾回收 总结
- Oracle中sequence简介
- struts2 中的 addActionError 、addFieldError、addActionMessage的方法【转】
- 栈的学习
- js排序的方法。
- 关于spring定时器一次调用却触发了两次trigger的问题分析
- *(type **)用法
- 《C++ Primer》十五章面向对象编程例题1
- sql基本语法select、insert、update、delete、distinct等