java 静态存储区_Java中的堆内存、栈内存、静态存储区
一、栈
栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈数据可以共享。
那些数据存放在栈中?
基本数据类型(int, short, long, byte, float, double, boolean, char)的变量存放于栈中。
对象的引用存放于栈中。
栈数据共享具体指什么意思?(方法区中的常量池)
int a = 3; int b = 3;
编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找有没有字面值为3的地址,没找到,就开辟一个存放3这个字面值的地址,然后将a指向3的地址。接着处理int b = 3;在创建完b的引用变量后,由于在栈中已经有3这个字面值,便将b直接指向3的地址。这样,就出现了a与b同时均指向3的情况。即共享了3这个栈数据。
另外,比较特殊的是String,虽然String类型不是简单的基本数据类型,但是当用String a="abc"这样的语法定义String变量的时候,会把数据存储在栈中,因此也会有上面所说的数据共享特性。
java的八种基本类型(Byte Short、Integer、Long、Character、Boolean、Float、Double),除Float及Double意外,其它六种都实现了常量池,但是他们只在大于等于-128且小于等于127时才能使用常量池,如果不在此范围内,则会new一个出来,保存在堆内存中。
二、堆
堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器。堆数据在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
那些数据存放在堆中?
堆内存用于存放由new创建的对象和数组,即堆主要是用来存储对象的。Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在堆栈中分配,也就是说在建立一个对象时从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)而已。
三、方法区中的静态存储区
存储static声明的静态变量
java 静态存储区_Java中的堆内存、栈内存、静态存储区相关推荐
- 什么是java中的栈和堆_java中的堆和栈是什么?堆和栈有什么区别?
java中的堆和栈是什么?堆和栈有什么区别? 发布时间:2020-06-02 11:51:19 来源:亿速云 阅读:183 作者:Leah java中的堆和栈是什么?堆和栈有什么区别?这些问题可能是我 ...
- 【C语言进阶深度学习记录】三十五 程序中的堆、栈以及静态存储区(数据区)
学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 在我之前学习底层的知识的时候,也写过相关的内容.可以对比的学习:[软 ...
- C/C++内存分配、内存区划分、常量存储区、堆、栈、自由存储区、全局区(静态区)、代码区
C/C++内存分配.内存区划分.常量存储区.堆.栈.自由存储区.全局区 C++中,内存分成几个区: 栈(stack) 堆(heap) 自由存储区 全局/静态存储区 常量存储区 代码区 对于C++的内存 ...
- C++ 堆、栈、自由存储区、全局静态存储区和常量存储区
文章来自一个论坛里的回帖,哪个论坛记不得了! 在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 栈,就是那些由编译器在需要的时候分配,在不需要的时 ...
- Java里的堆(heap)栈(stack)和方法区(method)
http://imiduo.iteye.com/blog/616310 Java里的堆(heap)栈(stack)和方法区(method) <一> 基础数据类型直接在栈空间分配, 方法的 ...
- 内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理]...
这可以帮助你深入了解程序的运行机制,由于自己还是一个初学者,因此大部分内容都只是转载. http://blog.sina.com.cn/s/blog_7edcf63b0100yhk9.html 一. ...
- 内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理][转载]...
http://www.cnblogs.com/JCSU/articles/1051579.html 一. 在c中分为这几个存储区 1.栈 - 由编译器自动分配释放 2.堆 - 一般由程序员分配释放,若 ...
- java 堆和栈 数据结构_数据结构的栈和堆和程序中的堆和栈
在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到.但对于很多的初学着来说,堆栈是一个很模糊的概念.堆栈:一种数据结构.一个在程序运行时用于存放的地方,这可能是很多初学者的认识 ...
- java继承对象转换_java中类与对象的继承重写,存储以及自动转换和强制转换。...
对象的继承 继承关键字:extends 继承的格式: public class 类名 extends 父类名{ } 注:一个类只能继承一个父类.子类继承父类的全部内容. 访问修饰符同类中 同包中 不同 ...
- Java中的堆和栈的区别
当一个人开始学习Java或者其他编程语言的时候,会接触到堆和栈,由于一开始没有明确清晰的说明解释,很多人会产生很多疑问,什么是堆,什么是栈,堆和栈有什么区别?更糟糕的是,Java中存在栈这样一个后进先 ...
最新文章
- ARKIT/ARCore对比分析(二)
- android 图片横竖判断_Android横竖屏切换及其对应布局加载问题详解
- Android Keystore/keymaster的错误码
- Maven问题总结 - 2
- bootstarp js设置列隐藏_bootstrap table getHiddenColumns获取隐藏的列的方法
- render注册一个链接组件_vue: 单文件组件 render函数
- oracle中表空间实例,oracle的表空间实例详解
- IHttphandler之“验证码”服务器控件
- 互联网金融业务中的风控
- Dubbo 快速入门教程
- 小米路由2+安装+php,小米路由器作为二级路由,完美使用APP和文件共享
- 使用过滤器解决中文乱码问题
- java tuscany_Apache Tuscany Java 1.1发布
- c# Monitor
- 完美日记母公司逸仙电商将收购护肤品牌Eve Lom
- 独立站SaaS建站模式是什么
- 华为手机虚拟键盘遮挡菜单
- python中的ascii码是啥_python ascii码到u
- STM32之数据采集和心率检测仪(原理图、PCB、程序源码等)超详细!!!
- 用Python量化海龟交易法则
热门文章
- 在Win7中IIS配置Asp.Net虚拟文件夹的方法及错误总结!
- 嵌入式根文件系统的移植和制作详解【转】
- MonoCSharp Evaluator Extension
- 体验MSN聚酷(Juku)
- python lxml_python – lxml使用命名空间而不是ns0,ns1,
- mysql同步row模式_mysql行模式(ROW)主从同步测试及错误修复
- pyqt5获取文本框里输入的值_【技术指南】 使用MCC数据采集设备获取单通道模拟输入值...
- html怎么实现追加表格,jQuery实现html表格动态添加新行的方法
- IE7、IE8、IE9、IE10后各版本的更新及差别
- 基于MongoDB与NodeJS构建物联网系统