您的位置:首页 > 编程语言 > Java开发

java垃圾回收机制、内存泄露

2014-01-05 13:00 232 查看
内存泄露:程序在运行过程中会不断地分配内存空间,那些不再使用的内存空间应该即可回收它们,从而保证系统可以再次使用它们,如果存在无用的内存没有被回收那就会造成内存泄露。

对于C++程序而言,对象占用的内存空间由程序员显示回收,如果程序员忘记回收它们则会造成内存泄露。对于java而言,所有不可达的对象都由垃圾回收机制对他们进行回收,但是如果程序中有一些java对象,它们处于可达状态,但是程序以后永远不会再访问它们,那么它们占用的内存空间将不会被回收,这样就会造成内存泄露。

垃圾回收机制:主要完成以下两件事情

1、跟踪并监控每一个java对象,当某个对象处于不可达状态时,回收该对象所占有的内存;

2、清理内存分配、回收过程中产生的内存碎片。

jvm判断某个对象是否是否可回收的唯一标准就是:是否还有其他引用指向该对象。实际上垃圾回收机制不可能实时监测每一个java对象的状态,因此当一个对象失去引用时他也不会立即被回收,只有当垃圾回收运行时才能回收。

对象的引用由四种类型:

1、强引用:一般对象引用都是强引用,不会被垃圾回收机制回收。

2、软引用:由softReference类声明的引用,当内存不足时会被垃圾回收机制回收从而避免内存不足。

3、弱引用:由weakReference类声明的引用,它的声明时间比软引用更短,当垃圾回收执行时会回收改引用的对象,但是垃圾回收不受程序控制所以,使用时要注意判断该弱引用是否为空,为空则创建。

4、虚引用:这个单独使用没有什么意义,他不能用来调用该对象的属性和方法,它主要的作用是跟踪对象被垃圾回收的状态,程序检查虚引用关联的引用队列是否已经包含该指定的虚引用,如果包含则该虚引用的对象被回收。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: