Java堆栈的区别

堆:存放类类型,用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 
创建了两个引用。创建了两个对象。两个引用分别指向不同的两个对象。



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/youyoulanyouyou/article/details/51555409
文章标签: java
个人分类: Java基础
想对作者说点什么? 我来说一句

java堆栈区别 -- 详解

2009年12月24日 17KB 下载

没有更多推荐了,返回首页

不良信息举报

Java堆栈的区别

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭