• 堆、栈、方法区

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/ruoh3kou/p/9950851.html

java中的堆、栈、方法区等比较相关推荐

  1. JVM Runtime Data Area(运行时数据区中的堆/栈/方法区讲解)

    JVM的组成 JVM由4大部分组成:ClassLoader .Runtime Data Area .Execution Engine .Native Interface.我们这里重点讲得是Runtim ...

  2. JVM - 结合代码示例彻底搞懂Java内存区域_对象在堆-栈-方法区(元空间)之间的关系

    文章目录 Pre 示例demo 总体关系 代码示例论证 反汇编 Pre JVM - 结合代码示例彻底搞懂Java内存区域_线程栈 | 本地方法栈 | 程序计数器 中我们探讨了线程栈中的内部结构 ,大家 ...

  3. JVM堆 栈 方法区详解

    一.栈 每当启用一个线程时,JVM就为他分配一个JAVA栈,栈是以帧为单位保存当前线程的运行状态 栈是由栈帧组成,每当线程调用一个java方法时,JVM就会在该线程对应的栈中压入一个帧 只有在调用一个 ...

  4. [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义...

    前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine  ,既然是虚拟机, ...

  5. 从几个sample来学习Java堆,方法区,Java栈和本地方法栈

    2019独角兽企业重金招聘Python工程师标准>>> 最近在看<深入理解Java虚拟机>,书中给了几个例子,比较好的说明了几种OOM(OutOfMemory)产生的过程 ...

  6. 46栈内存溢出、内存区域(程序计数器、Java 虚拟机栈、本地方法栈、Java 堆、方法区、直接内存、内存溢出)与内存溢出(对象实例化分析)

    46.什么情况下会发生栈内存溢出 46.1.Java 内存区域与内存溢出 46.1.1.内存区域 46.1.1.1.程序计数器 46.1.1.2.Java 虚拟机栈 46.1.1.3.本地方法栈 46 ...

  7. Java内存分析—栈,堆,方法区

    Java内存分析-栈,堆,方法区 一.栈: 1).特点是:自动分配,连续空间,先进后出原则. 2).基本数据类型(一共有八种,char,byte,short,int,long,float,double ...

  8. 栈、堆、方法区之间的关系

    先放一张图: 1.栈内存中放哪些东西? 基本类型的变量,例如int a=3中的a: 对象的引用变量,例如Thread t=new Thread();中的t. 当在代码块中定义一个变量时,Java就在栈 ...

  9. JVM学习笔记之-方法区,栈、堆、方法区的交互关系,方法区的理解,设置方法区大小与OOM,方法区的内部结构,方法区使用举例

    栈.堆.方法区的交互关系 运行时数据区结构图 从线程共享与否的角度来看 栈,堆,方法区的交互关系 方法区的理解 方法区在哪里? <Java虚拟机规范>中明确说明:"尽管所有的方法 ...

  10. 常量池详解(含栈、堆、方法区简析)

    1 位置分布图 2 内存区域类型 寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制: 堆:存放所有new出来的对象: 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈 ...

最新文章

  1. 光棍节,猪我生日快乐!
  2. python的深造方向_自动化深造方向有哪些?
  3. Qt OpenGL 图像的平移(使用glTranslatef)
  4. 校园网未能找到pppoe服务器6,校园网PPPOE接入认证系统的研究与实现.doc
  5. Kotlin协程入门初级篇
  6. Hugging Face Course-Diving in 抱抱脸 Tokenizers library (Introduction BPE)
  7. Kali linux 2016.2(Rolling)中的Exploits模块详解
  8. windows计划任务下 任务启动失败 错误码 2147942402
  9. Python 地图行政区边界方案
  10. 为什么闹钟设置了却不响_苹果手机为什么闹钟设置了却不响
  11. html空桃心的特殊符号,王者荣耀名字特殊符号空白代码 名字特殊符号爱心尾巴大全可复制...
  12. spring data jpa 动态查询Specification(包括各个In、like、Between等等各种工具类,及完整(分页查询)用法步骤(到返回给前端的结果))
  13. Mac 本地起一个html 服务
  14. 使用JSONObject比较Java复杂对象
  15. python爬取58同城租房信息_分页爬取58同城租房信息.py
  16. NLP实战 文本关键词提取
  17. sql 闩锁 原因_如何识别和解决SQL Server中的热闩锁
  18. HDU n^n求最高位
  19. 重绘和重排是什么?如何减少重绘和重排
  20. js 鼠标拖拽改变div宽度高度

热门文章

  1. ToastUtil【简单的Toast封装类】【未自定义Toast的显示风格】
  2. java应用程序中判断用户输入的一个整数是否在已知数组里。
  3. 服务器用户连接数设置
  4. linux mysql 操作命令
  5. Oracle资源管理器(二)-- 创建和使用数据库资源计划
  6. SQL 语法参考手册
  7. Python:年轻人,不会正则表达式你睡得着觉?有点出息没有?
  8. Android应用程序窗口(Activity)的窗口对象(Window)的创建过程分析
  9. 智慧城市建设面临“三座大山” 安全与服务需两手抓
  10. 一步步开发自己的博客 .NET版(5、Lucenne.Net 和 必应站内搜索)