java中 stack与和heap的区别
2015-11-18 11:13
351 查看
java的内存分为栈(stack)和堆(heap);
1、栈(stack)
(1)定义
每个应用运行时都有自己的一段内存空间,用于存放临时变量、参数传递、函数调用时的PC值以及对象的引用,这叫stack。
(2)优缺点
优点:存取速度比堆快,仅次于CPU中的寄存器。另外,
缺点:存在栈中的数据的大小与生存期必须是确定的,所以缺乏灵活性。
2、堆(heap)
(1)定义
堆是JVM的内存数据区。Heap的管理很复杂,每次分配不定长的内存空间专门用来保存对象的实例(实际上是保存对象实例的属性值,属性的类型和对象本身的类型标志等),并不保存对象的方法(方法是指令,保存在栈中)。
(2)优缺点
优点:堆是一个运行时的数据区,它的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,java的垃圾收集器会自动收走这些不再使用的数据。
缺点:由于在运行时动态分配内存,存取速度比较慢。
1、栈(stack)
(1)定义
每个应用运行时都有自己的一段内存空间,用于存放临时变量、参数传递、函数调用时的PC值以及对象的引用,这叫stack。
(2)优缺点
优点:存取速度比堆快,仅次于CPU中的寄存器。另外,
缺点:存在栈中的数据的大小与生存期必须是确定的,所以缺乏灵活性。
2、堆(heap)
(1)定义
堆是JVM的内存数据区。Heap的管理很复杂,每次分配不定长的内存空间专门用来保存对象的实例(实际上是保存对象实例的属性值,属性的类型和对象本身的类型标志等),并不保存对象的方法(方法是指令,保存在栈中)。
(2)优缺点
优点:堆是一个运行时的数据区,它的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,java的垃圾收集器会自动收走这些不再使用的数据。
缺点:由于在运行时动态分配内存,存取速度比较慢。
相关文章推荐
- java学习
- Struts2标签注意点
- java jvm学习笔记十一(访问控制器)
- Could not find artifact javax.jdo:jdo2-api:jar:2.3-ec in central
- java compiler level does not match the version of the installed java project facet 解决方法
- 自己实现spring核心IOC部分
- eclipse使用—正则表达式匹配替换
- eclipse2studio
- eclipse+git
- java jvm学习笔记十(策略和保护域)
- SSH:Spring框架(利用注解实现spring基本配置详解)
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)【转】
- java jvm学习笔记九(策略文件)
- java中的位移符
- java用spilt方法分割ip地址
- java精度问题
- Spring+SpringMVC+mybatis+easyui整合实例(一)实例介绍
- java jvm学习笔记八(实现jar包的代码签名)
- eclipse的activiti插件安装
- eclipse中 NoclassdefFoundError错误的分析