java栈、堆、方法区
1、java中的栈(stack)和堆(heap)是java在内存(ram)中存放数据的地方
2、堆区
存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令);
jvm只有一个heap区,被所有线程共享,不存放基本类型和对象引用,只存放对象本身。
堆的优劣势:堆的优势是可以动态的分配内存大小,生存期也不必事先告诉编译器,java的垃圾收集器会自动收取这些不在使用的数
据,但缺点是,由于要在运行时动态分配内存,存取速度慢。
3、栈区
每一个线程包含一个stack区,只保存基本数据类型的对象和自定义对象的引用(不是对象),对象都存放在共享heap中;
每个栈中的数据(基本数据类型和对象引用)都是私有的,其他栈不能访问;
栈分为3部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)
栈的优势劣势:存取速度比堆要快,仅次于直接位于CPU的寄存器,但必须确定的是存在stack中的数据大小与生存期必须是确定
的,缺乏灵活性。单个stack的数据可以共享。
stack:是一个先进后出的数据结构,通常保存方法中的参数,局部变量。
在java中,所有基本类型和引用类型都在stack中储存,栈中数据的生存空间一般在当前scopes内
4、方法区
1、又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量;
2、方法区中包含的都是在程序中永远的唯一的元素
5、在JAVA中,有六个不同的地方可以存储数据:
1. 寄存器(register)。这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所
以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。
2. 堆栈(stack)。位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持。堆栈指针若向下移动,则分配新的内存;
若向上移动,则释放那些 内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序时候,JAVA编译器必须知道存储
在堆栈内所有数据的确切大小和生命周期,因为它必须生成 相应的代码,以便上下移动堆栈指针。这一约束限制了程序的灵活
性,所以虽然某些JAVA数据存储在堆栈中——特别是对象引用,但是JAVA对象不存储其 中。
3. 堆(heap)。一种通用性的内存池(也存在于RAM中),用于存放所以的JAVA对象。堆不同于堆栈的好处是:编译器不需要知
道要从堆里分配多少存储区 域,也不必知道存储的数据在堆里存活多长时间。因此,在堆里分配存储有很大的灵活性。当你需要
创建一个对象的时候,只需要new写一行简单的代码,当执行 这行代码时,会自动在堆里进行存储分配。当然,为这种灵活性必
须要付出相应的代码。用堆进行存储分配比用堆栈进行存储存储需要更多的时间。
4. 静态存储(static storage)。这里的“静态”是指“在固定的位置”。静态存储里存放程序运行时一直存在的数据。你可用关键字
static来标识一个对象的特定元素是静态的,但JAVA对象本身从来不会存放在静态存储空间里。
5. 常量存储(constant storage)。常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。有时,在
嵌入式系统中,常量本身会和其他部分分割离开,所以在这种情况下,可以选择将其放在ROM中
6. 非RAM存储。如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。
就速度来说,有如下关系:
寄存器 < 堆栈 < 堆 < 其他
运行类过程:方法区找到方法--堆中实例化对象--调用栈(指向堆中实例)
转载于:https://www.cnblogs.com/yang520ming/p/8807448.html
java栈、堆、方法区相关推荐
- java堆栈方法区_java 栈 ,堆, 方法区
栈的特点如下: 1. 栈描述的是方法执行的内存模型.每个方法被调用都会创建一个栈帧(存储局部变量.操作数.方法出口等) 2. JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数.局部变 ...
- JAVA 堆栈 堆 方法区 解析
基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收. 引用数据类型,需要用new来创建,既在栈空间分配一个地址空间,又在堆空间分配对象的类变量 . 方法 ...
- [转载] JAVA 堆栈 堆 方法区 静态区 final static 内存分配 详解
参考链接: 在Java中为静态最终static final变量分配值 转载来源:https://blog.csdn.net/peterwin1987/article/details/7571808 J ...
- JVM—堆栈 堆 方法区 静态区 final static 内存分配
原文作者:一夜丶鱼龙舞 原文地址:JAVA 堆栈 堆 方法区 静态区 final static 内存分配 详解(转) 一.栈(stack)和堆(heap) (1)内存分配的策略 按照编译原理的观点,程 ...
- 堆、栈、方法区、静态代码块---Java
java 堆.栈.方法区 堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令) 2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基 ...
- java中的堆、栈、方法区等比较
• 堆.栈.方法区 1. java中的栈(stack)和堆(heap)是java在内存(ram)中存放数据的地方 2. 堆区 存储的全部是对象,每个对象都包含一个与之对应的class的信息.(clas ...
- java内存管理(堆、栈、方法区)
java内存管理 简介 首先我们要了解我们为什么要学习java虚拟机的内存管理,不是java的gc垃圾回收机制都帮我们释放了内存了吗?但是在写程序的过程中却也往往因为不懂内存管理而造成了一些不容易察觉 ...
- a = 3 中3在栈还是堆_56.堆、栈、方法区(3.0)
0.上面比较形象可以看出堆.栈.方法区之间的区别, 栈存的是局部变量.堆一般是对象等等,而方法区存在的事一些信息加载出来等等,他们互相分工. 1.String a=new String("f ...
- JVM,堆,栈,方法区之间的关系
什么是JVM? JVM就是Java虚拟机,它包含堆,栈以及方法区. 堆 1. 堆中存放的是 对象实例 // 堆中存放的就是 new Student() Student s = new Student( ...
- 四.运行时数据区-本地方法栈(Native Method Stack)-堆-方法区
1. 前言:本地方法接口 1.1 本地方法 简单来讲,一个Native Method就是一个java调用非java代码的接口,一个Native Method 是这样一个java方法:该方法的实现由非J ...
最新文章
- wince: Post-deploy error 0x00000001 returned after calling......解决方法
- my ax 4 faq
- java项目教学_java项目_java项目教程_java项目视频教程 _课课家
- 一段个性化stringgrid的代码
- 前端学习(667):运算符优先级
- 教你用Python制作一款自己的杀毒程序
- html 页面怎么自动定位到某个标签,JS如何实现在页面上快速定位(锚点跳转问题)...
- 10张精美可视化大屏模板分享,加极简制作攻略!抓紧收藏
- chrome官网下载win64离线安装包
- 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_朴素贝叶斯算法知识点总结...
- Bootstrap broker localhost:9092 (id: -1 rack: null) disconnected
- 第一章 Excel数据分析入门 --(3)Excel处理数据的常用操作
- html复习第七天 京东首页布局完成
- 【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法
- UR机器人通信接口总结
- 加入域提示“不能访问网路位置” 的解决方法
- AIGC发展路径思考:大模型工具化普及迎来新机遇
- Vuex 4源码学习笔记 - 通过Vuex源码学习E2E测试(十一)
- SSH跨平台终端工具tabby推荐
- Paraview 测试生成管线