java内存管理

可以为一个引用变量赋予一个新的值,因此一段程序可能会产生一个无法被引用的对象。
图中所示的三行赋值语句。在第三行赋值语句之后,不仅a 和b 会指向同一个Date 对象(1/1/2011),而且不存在能够引用初始化变量a 的那个Date 对象的引用了。

本来该对象的唯一引用就是变量a,但是该引用被赋值语句覆盖了,这样的对象被称为孤儿。对象在离开作用域之后也会变成孤儿。

java内存管理_第1张图片

 

 Java 程序经常会创建大量对象(以及许多保存原始数据类型值的变量),但在某个时刻程序只会需要它们之中的一小部分。

编程语言和系统需要某种机制来在必要时为数据类型的值分配内存,而在不需要时释放它们的内存(对于一个对象来说,有时是在它变成孤儿之后)。

内存管理对于原始数据类型更容易,因为内存分配所需要的所有信息在编译阶段就能够获取。

Java(以及大多数其他系统)会在声明变量时为它们预留内存空间,并会在它们离开作用域后释放这些空间。

象的内存管理更加复杂:系统会在创建一个对象时为它分配内存,但是程序在执行时的动态性决定了一个对象何时才会变为孤儿,系统并不能准确地知道应该何时释放一个对象的内存。在许多语言中(例如C 和C++),分配和释放内存是程序员的责任。众所周知,这种操作既繁琐又容易出错。

Java 最重要的一个特性就是自动内存管理。它通过记录孤儿对象并将它们的内存释放到内存池中将程序员从管理内存的责任中解放出来。这种回收内存的方式叫做垃圾回收。Java 的一个特点就是它不允许修改引用的策略。这种策略使Java 能够高效自动地回收垃圾。

你可能感兴趣的:(java内存管理)