java对象与垃圾回收

GC垃圾回收机制在CPU空闲或内存不足时自动进行垃圾回收,程序员无法控制回收的时间与顺序。缺点事影响开销性能,Java虚拟机必须跟踪哪些是有用的对象或者无用的对象。只能回收内存资源,io 数据库资源不能回收。为了更快让垃圾回收机制回收那些对象,可以将引用变量设置为NULL,暗示垃圾回收器回收。垃圾回收是不可预知性的,即使system.gc是建议回收。垃圾回收精确性包括两个方面:1.精确的标记着活的对象,2精确的定位对象间的引用关系。

1对象在内存中的状态:

可达状态:当一个对象被创建后,若有一两个以上的对象引用他,则处于可达状态

可恢复状态:程序中某个对象不再有引用指向他,他就进入了可恢复状态。系统的垃圾回收机制准备回收时会调用finalize()方法进行资源清理,如果从新让一个引用变量引用该对象,则这个对象会再次变为可达状态,否则变为不可达状态。

强制垃圾回收:system.gc()与runtime.getRuntime().gc()建议回收,但不一定立即回收。可以在类中重写finalize()方法检测。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java堆内存是Java虚拟机(JVM)中用于存储对象实例的主要区域。垃圾回收(Garbage Collection, GC)机制是Java设计的核心特性之一,它负责自动管理和回收不再使用的内存,以防止内存泄漏和内存溢出。Java堆内存的垃圾回收主要包括以下几个关键概念和过程: 1. **可达性分析**:GC通过可达性分析确定哪些对象是“活着”的。如果一个对象能通过当前存在的引用路径到达,那么它是可达的,否则就是垃圾。 2. **标记-清除算法**:从根对象(如静态变量、本地方法栈引用的对象)开始,标记所有可达的对象,然后清除未标记的对象。这个过程中可能会产生内存碎片。 3. **复制算法**:将堆分为两个部分,每次只使用一部分,使用完毕后把存活的对象复制到另一部分,然后清除旧的部分。这种方法避免了碎片化,但空间效率较低。 4. **标记-整理算法**:标记垃圾对象后,将存活对象向一端移动,腾出的空间整理为连续区域,便于后续内存分配。 5. **分代回收**:根据对象生命周期的不同,分为新生代(短生命周期的对象)和老年代(长生命周期的对象)。新生代采用 Minor GC,老年代则进行 Major GC,这有助于优化回收性能。 6. **引用计数**:虽然Java不直接使用引用计数,但在某些情况下(如JNI环境),引用计数也可能被用作辅助机制。 **相关问题--:** 1. Java堆内存的垃圾回收频率由哪个参数控制? 2. 如何避免新生代的内存溢出? 3. 什么是GC Roots?它们在可达性分析中的作用是什么?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值