Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,在使用JAVA的时候,一般不需要专门编写内存回收和垃圾清理代码。这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制。

Java堆内存结构划分有一定的了解。Java将堆内存分为3大部分:新生代、老年代和永久代,其中新生代又进一步划分为Eden、S0(Survivor)、S1(Survivor)三个区,并且S0,S1的大小完全相同且小于Eden区。如图所示:

+---------------------------+-------------------------------+-------------------+
|          |       |        |                               |                   |
|   Eden   |   S0  |   S1   |       Old generation          |      Perm         |
|          |       |        |                               |                   |
+---------------------------+-------------------------------+-------------------+
|<----Young Gen Space------>|

我们通过New出来的对象一般在Eden区(但如果他的阈值比较大可以直接存放在老年代),当Eden区满时,就会触发对Eden的GC。他是通过把Eden区还存活的对象移动到S0或者S1区,即现在正在使用的Survivor区。这样的方法是由于超过90%的对象存活周期是很短的尔,。这就是Eden区的GC方式。
Survivor区是当一个区间满时会触发Survivor的GC机制,它是通过他一个区里存活的对象移动端另一个区域中实现对该区域的回收。比如:当S0满时候,它会把S0里面还存活的东西移动到S1区并进行碎片化整理。当S1满时把S1里面还存活的东西移动到S0区并进行碎片化整理,循环往复(即复制算法的方式)。但当一个对象在该地方存在的时间到达某个较高的阈值事后,它就会被移动Old generation即老年代。

更多相关文章

  1. 来谈谈JAVA面向对象 - 鲁班即将五杀,大乔送他回家??
  2. 对一个JavaScript对象数组进行排序。
  3. java使用compareTo实现一个类的对象之间比较大小
  4. 在Java中,使用DefaultSelenium对象在selenium中启动测试,我如何找
  5. Java学习第9天(6):面向对象-多态-object
  6. 如何在命令中传递对象参数?
  7. JavaScript 面向对象编程,严格过程的标准化编程法,目前为止最好的
  8. JAVA复习3 Java类和对象
  9. java对象判断是否为空工具类

随机推荐

  1. 快被Tomcat连接Mysql连接池问题弄疯了!
  2. sqlmap遇到url重写的示例
  3. 已有SQLSERVER表如何生成其代码?
  4. mysql全文搜索为空
  5. Spark踩坑记——数据库(Hbase+Mysql)转
  6. 10个MySQL数据库备份教程推荐
  7. SQL:使用IN子句搜索列值
  8. 使用SQL-DMO实现定制SQL Scripts
  9. SQL 关于row_number()over()
  10. oracle新接触的sql语句