java内存管理

来源:互联网 发布:中草药软件 编辑:程序博客网 时间:2024/06/03 22:02

1、java内存分成三部分:栈区、堆区、方法区。

2、java数据在内存中存储过程:

a)基本数据类型int, short, long, byte, float, double, boolean, char):先判断栈内是否有该变量的值(而非该变量名),将变量直接指向该地址,没有开辟新地址存储该值。

b)对象:对象的创建分成两步,声明与实例化。声明时先在栈内保持对象引用且为null;实例化在堆内开辟空间,保持对象具体内容,并将地址赋值给引用。

c)创建多个不同的对象实例:会在栈中创建不同的引用,无论它们的引用是否相同。

例如

//在栈中创建了两个对象引用,在堆中保存两个对象实例
Rectangle r1= new Rectangle(3,5);
Rectangle r2= new Rectangle(4,6);
//在栈中穿件了两个对象引用,它们的值相等,在堆中只有一个对象实例
Rectangle r1= new Rectangle(3,5);
Rectangle r2=r1;

d)包装类:和对象的创建过程一样。

e)String:String是一个特殊的包装类。有两种创建方式:1)和基础类型一样 String a=”a“;2)和包装类一样 String a = new String(”a“);

f) 数组创建:先在栈内保存数组引用,再到堆开辟空间存储具体数组

g)静态变量:只有一个实例

3、栈区保存局部变量(主要为基本数据类型以及对象的引用);堆区保存数组、对象以及该对象具体的成员变量;方法区保存静态变量、常量。

4、方法的调用实质是入栈出栈的过程,也就是局部变量创建与释放的过程。

5、equals比较的是值相等,==比较的是引用相等。

6、堆和栈的区别:堆主要存放对象、数组;生存期不需预先告知编译器,是动态分配的、速度慢、GC负责回收。

   栈主要存放局部变量;数据大小和生存期确定、速度快、灵活性差。

0 0
原创粉丝点击