码迷,mamicode.com
首页 > 编程语言 > 详细

java——GC回收机制

时间:2017-08-30 23:47:35      阅读:325      评论:0      收藏:0      [点我收藏+]

标签:stat   导致   out   style   使用   nal   调用   变量   人工   

1. GC是什么?

GC(Gabage Collection):java的垃圾回收机制的根本目的就是跟踪正在使用的对象,然后回收那些不再使用(引用)的对象。java的GC回收机制有两个好处:

(1) 避免垃圾过多导致的内存耗尽

(2) 避免不恰当的内存释放导致的内存非法引用

GC主要是对JVM中的堆对象进行识别,如果对象正在被引用,就是活对象。否则就是死的,是可以被回收再分配的。

 

2. java的内存是如何存储的哪?

堆:用来存储java中创建的对象,new新建的对象都存在java的堆中

栈:用来存储java中对象的引用,常见的变量,static变量,final变量等等,除了对象外基本都在这里存储

 

3. GC触发的条件是什么?是否可以人为操控?

JVM中GC也分为两种,一种是主GC,一种是次GC,主GC的线程优先级最低,因此很少被触发。而次GC的线程触发的频率就比较高了。

主GC触发的两种条件

(1) 主GC的线程优先级非常低,因此只有在程序空闲的时候才会被调用,当然第2个条件除外

(2) 当java堆内存已经不足时,GC会被调用。而且如果GC一次后仍不能满足内存分配,JVM会再进行两次GC作进一步尝试,如果还是无法新建对象,JVM会报out of memory错误,java程序会推出。

然而由于GC是java自己的垃圾回收机制,因此认为编写代码是不能够处理的,不过可以认为调用system.gc(),提醒调用,不过依然无法影响对象的回收顺序以及回收时间。另外,java中的主GC是JVM根据环境来决定的,因此合适运行GC,是无法确定的。但一定是反复进行的

 

4. 如何减少GC的开销哪?基本原则是尽量减少垃圾

(1) 减少人工干预,也就是人工调用System.gc()。虽然上述已经说过人工干预只是建议,但的确可能会触发主GC,增加停顿次数

(2) 尽量少使用 static 定义的静态全局变量,静态全局变量不会被GC回收,而是一直占用内存

(3) 多使用int,long,float等基本数据类型,少创建相应的Integer等对象,减少内存占用。同样多使用StringBuffer,少使用String,因为String在进行操作时会创建很多String对象。

(4) 避免突然创建大量对象或者突然删除大量对象,这两种操作都可能会触发GC

(5) 减少临时对象的使用,减少垃圾,或者在对象使用完成后,显示地设置为NULL,方便GC进行直接回收

 

java——GC回收机制

标签:stat   导致   out   style   使用   nal   调用   变量   人工   

原文地址:http://www.cnblogs.com/dong-liu/p/7455682.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!