java 主gc 次gc_java——GC回收机制

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进行直接回收

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值