关闭

Java堆栈的区别

标签: java
70人阅读 评论(0) 收藏 举报
分类:

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



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8072次
    • 积分:256
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条
    文章分类