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
创建了两个引用。创建了两个对象。两个引用分别指向不同的两个对象。
(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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树