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

Java堆栈的区别

2016-06-01 13:53 288 查看
堆:存放类类型,用new创建的,垃圾自动回收机制负责回收,速度慢。

(1) 堆是一个“运行时”数据区,类的实例化对象 是从堆上去分配空间的,堆上的 空间都是通过new去创建的 。

(2) 堆是动态分配内存大小的,即程序运行时分配的。

(3) 堆空间的内存读取比较慢。

new String("hello");  new出来的对象都是是存放在堆中。

栈:存放基本数据类型,速度快。

(1) 栈存放基本数据类型(byte,short,int ,long,float,double,boolean,char) 和对象句柄。

(2) 数据值共享,这是jvm栈的数据存取方式,int a = 10; int b  = 10; a 、b指向的栈空间地址是同一个。

jvm处理的逻辑是,执行int a = 10; 在栈上创建一个变量作为a的引用,然后再在栈上查找10的地址,如果有就将a指向该地址,没有就存起来10的这个地址,

(3) 相比于堆,栈的速度更快。

(4) 方法结束后方法中的栈数据就清除了。

在栈中,只保存有基本类型的变量和对象引用。

引用所指向的对象保存在堆中。(引用可能为Null值,即不指向任何对象)。

例:

String str1 = "abc"; 

String str2 = new String("abc"); 

System.out.println(str1==str2); //false 

创建了两个引用。创建了两个对象。两个引用分别指向不同的两个对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java