java的内存回收(1)

 

如果无用的堆内存中的对象在对内存中累计多了的话,等到大批用户一上来,系统的内存就会越来越小,系统响应速度自然变慢

因为java虽然有内存回收机制,但是我们作为开发人员也要显示的管理无用对象的释放,否则系统响应极慢,所以我们应注重内存回收,也要注重内存的分配,这样才能很好的利用有限的内存

使用new去申请分配空间,一个对象失去引用时方可回收

内存的分配与回收都是jvm自动完成的,

jvm的垃圾回收机制负责回收堆内存中除字符串池之外的对象,栈内存由别的机制回收内存,

JDK 1.6之前的常量池实际就是在方法区,JDK 1.7及以后移动到堆中了

new/反序列化/克隆均会申请分配内存

简单来讲,在内存回收方面jvm已经帮我们回收了不可达的无用对象,我们程序需要手动回收的是可达的无用对象,还需要回收字符串池中没有引用指向的字符串对象(解决java的内存泄漏,将引用指针赋值为null),内存中只存在的是可达的有用对象

我们从如下几个方面考虑内存回收

1jvm在核实决定回收一个java对象所占据的内存(对象处于不可达状态)

2jvm会不会漏掉回收某些java对象,使之造成内存泄漏(强引用所指向的系统再也用不到的对象不会被回收)

3jvm回收java对象所占用内存的实现细节(有向图管理,判断是否还有引用)

4jvm能否对不同java对象占用的内存区分对待,回收

5常见垃圾回收机制的实现细节是什么样的?(有向图管理)

1jvm回收java对象所占用内存的方法(一)实现细节(有向图管理,判断是否还有引用

jvm的垃圾回收机制采用有向图方式管理内存中的对象,将线程对象作为有向图的起始顶点,把引用变量和对象作为有向图的顶点,判断对象是否处于可达状态

对象在堆内存中的三种状态:可达状态/可恢复状态(在回收该对象前,系统调用可恢复对象的finalize方法进行资源清理,可以重新获得引用)/不可达状态(彻底失去引用)

注意:

通过这种方法进行垃圾回收并不是特别彻底,虽然垃圾回收机制会将不存在引用的对象回收了,但是有一些对象本身是无用的了,却还是有引用指向他,这样的无用对象垃圾回收机制是回收不了的,因此此处易发生内存泄漏

内存泄漏:存

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值