jvm 堆、栈 、方法区概念和联系
一、三者联系
1、堆:解决数据的存储问题( 即 数据怎么放,放到哪 )。
2、栈:解决程序运行的问题( 即 程序如何执行,或者说如何处理数据 )。
3、方法区:辅助堆栈的一块永久区,解决堆栈信息的产生,是先决条件。
我们创建一个对象,User:那么 User类的一些信息 ( 类信息、静态信息 ) 都存在于方法区中,我们可以根据这些信息来创建对应的对象。方法区中相当于存放着创建对象的模板。
二、堆
1、根据垃圾回收机制不同, 堆有可能拥有不同的结构,最常见的就是将整个堆分为新生代和老年代。其中新生代存放新生的对象或者年龄不大的对象,老年代则存放老年对象。
2、新生代分为 eden(伊甸园) 区、s0 区、s1 区, s0 和 s1 也被成为 from 和 to 区域,他们是两个大小相等并且可以互换角色的空间内存。
3、绝大多数情况下,对象首先分配在 eden 区,在一次新生代回收后,如果对象还存活,则会进入 s0 或 s1,之后每经过一次新生代回收,如果对象还存活则它的年龄加1,当对象达到一定年龄后,则进入老年代
( 默认经过 15 次GC 后进入老年代 )。
4、s0 区和 s1 区之间采用的是复制算法
复制算法:其核心思想就是将内存空间分为两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中存留的对象复制到未被使用的内存中去,之后去清除之前正在使用的内存块中所有的对象。反复交换两个内存的角色,完成垃圾回收。

三、栈
栈是一块私有的内存空间,一个栈,一般由三部分组成:局部变量表,操作数栈,和帧数区域。
1、局部变量表:用于报错函数的参数及局部变量
2、操作数栈:主要保存计算过程的中间结果,同时作为计算过程中变量临时的存储空间
3、帧数区域:出了局部变量表和操作数栈以外,栈还需要一些数据来支持常量池的解析,这里帧数区域保存着访问常量池的指针,方便程序访问常量池,另外,当函数返回或者出现异常时,虚拟机必须有一个异常处理表,方便
发送异常的时候找到异常的代码,因此异常处理表也是帧数区域的一部分。
四、方法区
java方法区和堆一样,方法区是一块所有线程共享的区域,他保存系统的类的信息,比如类的字段、方法、常量池等。方法区的大小决定了系统可以保存多少个类,如果系统定义太多的类,会导致方法区溢出。虚拟机同样会抛出
内存溢出的错误。方法区可以理解为永久区。
jvm 堆、栈 、方法区概念和联系的更多相关文章
- Java 底层机制(JVM/堆/栈/方法区/GC/类加载)
转载:https://www.jianshu.com/p/ae97b692614e?from=timeline JVM体系结构 JVM是一种解释执行class文件的规范技术. JVM体系结构 我翻 ...
- JVM堆 栈 方法区详解
一.栈 每当启用一个线程时,JVM就为他分配一个JAVA栈,栈是以帧为单位保存当前线程的运行状态 栈是由栈帧组成,每当线程调用一个java方法时,JVM就会在该线程对应的栈中压入一个帧 只有在调用一个 ...
- java 堆 栈 方法区的简单分析
Java里的堆(heap)栈(stack)和方法区(method) 基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收. 引用数据类型,需要用new来创 ...
- [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义
前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine ,既然是虚拟机, ...
- JVM之栈、堆、方法区(三)
一.CPU和内存的交互 今天除夕,祝大家新年快乐,其实,我们知道的,我们的CPU跟内存会有非常频繁的交互,因为如果这个频繁的交互是交给我们的磁盘的话,那么随着我们的CPU运转速度越来越快,那么我们的磁 ...
- 从几个sample来学习JAVA堆、方法区、JAVA栈和本地方法栈
最近在看<深入理解Java虚拟机>,书中给了几个例子,比较好的说明了几种OOM(OutOfMemory)产生的过程,大部分的程序员在写程序时不会太关注Java运行时数据区域的结构: 感觉有 ...
- [转载]JAVA内存分析——栈、堆、方法区 程序执行变化过程
面向对象的内存分析 参考:http://www.sxt.cn/Java_jQuery_in_action/object-oriented.html :尚学堂JAVA300集-064内存分析详解_栈_堆 ...
- java中栈,堆,方法区
最近在看面试题复习javaee,所以在这里对栈,堆,方法区做一下整理 参考了https://www.cnblogs.com/hqji/p/6582365.html 1.栈 每个线程包含一个栈区,栈中只 ...
- 03-JVM内存模型:堆与方法区
一.堆(Heap) 1.1.什么是堆 堆是用于存放对象的内存区域.因此,它是垃圾收集器(GC)管理的主要目标.其具有以下特点: 堆在逻辑上划分为“新生代”和“老年代”.由于JAVA中的对象大部分是朝生 ...
- JVM中的方法区
JVM中的方法区 方法区存储什么? 用于存储已被虚拟机加载的类型信息.常量.静态变量.即时编译器编译后的代码缓存 1.类型信息 对每个加载的类型(类class.接口interface.枚举.注解)jv ...
随机推荐
- maven tomcat 热部署
一.什么是热部署 就是在 tomcat 启动的时候进行部署 二.配置 tomcat 1.需要修改 tomcat 的 conf/tomcat-users.xml 配置文件.添加用户名.密码.权限. &l ...
- CAD-强电常用符号集
- IOC与DI区别
(1)IOC:控制反转,把对象创建交给spring进行配置. (2)DI:依赖注入,向类里面的属性中设置值. (3)关系:依赖注入不能单独存在,需要在IOC的基础之上完成操作.
- Oracle 11G R2 用exp无法导出空表解决方法
四. Oracle 10g以后增加了expdp和impdp工具,用此工具也可以导出空的表 oracleexpdp/impdp 用法详解 1) 创建逻辑目录,该命令不会在操作系统创建真正的目录,最好 ...
- 【HDU 2176】 取(m堆)石子游戏
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2176 [算法] Nim博弈 当石子数异或和不为0时,先手必胜,否则先手必败 设石子异或和为S 如果 ...
- C# First and FirstOrDefault 方法详解
在工作中我们经常会遇到有关LINQ 的一些问题.这时我们就用到lambda 表达式. 下面是我在工作遇到的. First and FirstOrDefault 这两方法.我今天把它记录一下. 需要 ...
- ROS-参数
前言:参数的用法. 一.参数常用命令 命令 功能 rosparam list 参数列表 rosparam get 获取参数 rosparam set 设置参数 rosparam load 加载参数 ...
- ubuntu16.04 安装 go
1,下载go安装包wget https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz 2,解压 sudo tar -C /usr ...
- Windows 10 游戏录制工具栏
- 【工作细节记录】维护项目中前端JS组件丢失后,应如何维护开发之启发
事因: 我所维护的项目为旧项目,接手项目后并没有什么开发文档留下,导致很多时候一出现问题就需要自己去研究整个过程. 项目中一直使用一个"$.download()"的方法进行文件下载 ...