java内存管理

来源:互联网 发布:电脑淘宝如何收藏宝贝 编辑:程序博客网 时间:2024/06/14 02:21

一.垃圾收集

   过去的语言比如c语言,要求程序员显示的分配内存,释放内存.这种做法常常引起内存泄.那什么又是内存泄露呢?

内存泄漏:导致内存泄漏主要的原因是,先前申请了内存空间而忘记了释放.如果程序中存在对无用对象的引用,那么这些对象就会驻留内存,消耗内存,因为无法让垃圾回收器GC验证这些对象是否不再需要.如果存在对象的引用,这个对象就被定义为"有效的活动",同时不会被释放.要确定对象所占内存将被回收,我们就要务必确认该对象不再会被使用.典型的做法就是把对象数据成员设为null或者从集合中移除该对象.但当局部变量不需要时,不需明显的设为null,因为一个方法执行完毕时,这些引用会自动被清理.

什么是垃圾回收?

垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独
的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象
进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。
回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。

垃圾回收器的原理?

对于 GC 来说,当程序员创建对象时,GC 就开始监控这个对象的地址、大小以及使用情况。
通常,GC  采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对
象是"可达的",哪些对象是"不可达的"。当 GC 确定一些对象为"不可达"时,GC 就有责任回
收这些内存空间。可以。程序员可以手动执行 System.gc(),通知 GC 运行,但是 Java 语
言规范并不保证 GC 一定会执行。

总之;判断一个内存空间是否符合垃圾收集器收集标准的,有以下两个:
(1)给对象赋予了空值,以后再也没有调用过
(2)给对象赋予了新值,即重新分配了内存空间

二,内存管理

java的内存管理就是对象的分配与释放的问题.在java中,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对象都是在堆中分配空间的.另外.对象的释放是由GC完成的,内存的分配是由程序完成的.这种收支两条线的方法确实简化了程序员的工作,但同时也加重了jvm的负担.因为GC为了能够正确的释放对象,必须监控每一个对象的运行状态,包括对象的申请,引用,赋值.
采用有向图的方式
 
public class Test {public static void main(String[] args) {Object o1=new Object();Object o2=new Object();o2=o1;}}







原创粉丝点击