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

Java 学习笔记 (13) - 基本内存分析 和 垃圾回收机制

2007-05-29 16:44 441 查看
Java中的值变量是放在栈(Stack)中的,而引用变量则是放在堆(Heap)中的。

在JVM装载Java程序时,首先创建用到类的类对象,静态(static)成员在这时首先被初始化。当遇到赋值声明时,就在栈空间内根据数据类型开辟一块区域用来存放变量。如果是声明引用变量,则在栈中存放一个指向具体对象的指针(内存地址)。遇到new关键字时,就在堆内存中申请空间存放对象,并返回对象的指针。
例:int a = 1 ;
Integer a = new Integer ( 1 ) ;
第一句很简单,就是在栈内存里申请一个32位的空间,并把1存进去。
第二句则是在栈里开辟一个指针空间,然后在堆里开辟一个空间存放Integer的对象,并把对象的地址存放在栈里开辟的指针空间里

Java中栈内存的清理很简单。每个变量都有其作用域和生存期,作用域生存期一过,栈里的变量就被清除,这和C++是一样的。不一样的是堆内存的处理方法。C++中在对象不使用时,用delete关键字删除。但是在一些错综复杂的情况下,这些操作会带来困扰。Java则不用,它有自己的垃圾回收机制。在内存不够用时就自动收集不用的对象,并释放其内存空间,当然,这样做是以牺牲一部分执行效率为代价的。

Java垃圾回收(garbage colection)原理:
在内存不足时,JVM会进行垃圾回收。JVM会遍历栈中和静态存储区(static storage)所有对象的引用,并且顺藤摸瓜查找在堆内的直接或简介关联的对象,这些对象是有用的。那么剩下的就是垃圾(garbage)了。

关于堆栈等知识可参见数据结构相关内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: