java程序员从笨鸟到菜鸟(九)堆内存和栈内存
2018-03-08 11:11
288 查看
堆内存和栈内存的概念:
堆内存:首先是一片内存区域,用于存放由new创建的对象(实体)和数组,对象用于封装数据,当一个数据丢失,不会造成实体释放,堆内存不会随时释放;而栈不一样,栈里存放的都是单个变量,当变量消失,栈内存也跟着被释放。
栈内存:用于存放基本数据类型变量和引用数据类型变量,存储的都是局部变量,先加载函数才能对局部变量进行定义,所以是方法先进栈,然后再定义变量,变量有自己的作用域,一旦离开作用域,变量就被释放,栈内存的更新速度快,因为局部变量的生命周期都很短。
如:Student s = new Student();
运行机制:1. 先在堆内存中创建一块内存用于存放新建的对象;2. 在栈内存中存放变量s,s中存放的是该对象在堆内存中开始存放的物理地址。
堆内存和栈内存的区别:
1. 堆内存存储的都是实体(由new创建的对象和数组),栈内存存储的都是局部变量(基本数据类型变量和引用数据类型变量)。
2. 内存溢出,堆内存溢出抛出java.lang.OutOfMemoryError: Java Heap Space错误,栈内存溢出抛出java.lang.StackOverFlowError异常。
3. 和堆内存相比,栈内存要小的多(栈内存采用LIFO后进先出),栈内存的更新速度快。
4. 生命周期,栈内存的变量一旦结束就会被释放,而堆内存则会被java的垃圾回收机制不定时的进行回收(从程序运行开始到运行结束)。
5. 存储在堆中的对象是全局可以被访问的,而栈中的变量不能被其它线程访问。
堆内存:首先是一片内存区域,用于存放由new创建的对象(实体)和数组,对象用于封装数据,当一个数据丢失,不会造成实体释放,堆内存不会随时释放;而栈不一样,栈里存放的都是单个变量,当变量消失,栈内存也跟着被释放。
栈内存:用于存放基本数据类型变量和引用数据类型变量,存储的都是局部变量,先加载函数才能对局部变量进行定义,所以是方法先进栈,然后再定义变量,变量有自己的作用域,一旦离开作用域,变量就被释放,栈内存的更新速度快,因为局部变量的生命周期都很短。
如:Student s = new Student();
运行机制:1. 先在堆内存中创建一块内存用于存放新建的对象;2. 在栈内存中存放变量s,s中存放的是该对象在堆内存中开始存放的物理地址。
堆内存和栈内存的区别:
1. 堆内存存储的都是实体(由new创建的对象和数组),栈内存存储的都是局部变量(基本数据类型变量和引用数据类型变量)。
2. 内存溢出,堆内存溢出抛出java.lang.OutOfMemoryError: Java Heap Space错误,栈内存溢出抛出java.lang.StackOverFlowError异常。
3. 和堆内存相比,栈内存要小的多(栈内存采用LIFO后进先出),栈内存的更新速度快。
4. 生命周期,栈内存的变量一旦结束就会被释放,而堆内存则会被java的垃圾回收机制不定时的进行回收(从程序运行开始到运行结束)。
5. 存储在堆中的对象是全局可以被访问的,而栈中的变量不能被其它线程访问。
相关文章推荐
- java程序员从笨鸟到菜鸟之(三十三)异常之浅谈
- Java程序员从笨鸟到菜鸟之(五十三)细谈Hibernate(四)Hibernate常用配置文件详解
- Java程序员从笨鸟到菜鸟之(三十一)大话设计模式之设计模式遵循的七大原则
- java程序员从笨鸟到菜鸟之(七)一—java数据库操作
- Java程序员从笨鸟到菜鸟之(三)面向对象之封装,继承,多态(下)
- Java程序员从笨鸟到菜鸟之(十七)CSS基础积累总结(下)
- Java程序员从笨鸟到菜鸟之(七十六)细谈Hibernate(十八)悲观锁和乐观锁解决hibernate并发
- Java程序员从笨鸟到菜鸟之(二十一)java过滤器和监听器详解
- Java程序员从笨鸟到菜鸟之(一百零三)java操作office和pdf文件(一)java读取word,excel和pdf文档内容
- java程序员从笨鸟到菜鸟之(二十一)正则表达式
- Java程序员从笨鸟到菜鸟之(十五)Html基础积累总结(下)
- java程序员从笨鸟到菜鸟之(三十四)File
- Java程序员从笨鸟到菜鸟之(七十九)细谈Spring(八)spring+hibernate整合基本详解
- Java程序员从笨鸟到菜鸟之(序言)+全部链接
- Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- java程序员从笨鸟到菜鸟之(七)一—java数据库操作
- Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)
- Java程序员从笨鸟到菜鸟之(二十四)Xml基础详解和DTD验证
- Java程序员从笨鸟到菜鸟之(九十八)深入java虚拟机(七)深入源码看java类加载器ClassLoader