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 ...
随机推荐
- PHP学习总结(4)——PHP入门篇之PHP计算表达式
计算表达式 不同于HTML和CSS,在php中我们可以做计算,比如我们写入echo 12*3计算机会计算出结果36.如下代码: <?php echo 12*3;?>
- selenium+java处理鼠标悬停
1.元素比较明确(可视) 2.元素隐藏,需要鼠标移动到一定地方才显现(下图为某论坛列表,需要将鼠标移动到列表才显示操作按钮)
- “王者对战”之 MySQL 8 vs PostgreSQL 10
既然 MySQL 8 和 PostgreSQL 10 已经发布了,现在是时候回顾一下这两大开源关系型数据库是如何彼此竞争的. 在这些版本之前,人们普遍认为,Postgres 在功能集表现更出色,也因其 ...
- iwebshop 增删改查
<?php header("content-type:text/html;charset=utf-8"); class Test extends IController { ...
- asp.net-EF事物与存储过程
FK_Equipment_EquipmentClass 这个是sql中的命名规范,外键名称在前面,主键名称在后面 EF事务的代码 DbTransaction tran = null; try { ne ...
- 关于Windows通过远程桌面訪问Ubuntu
关于Windows通过远程桌面訪问Ubuntu 问题及目标 Window环境通过远程桌面訪问Ubuntu Ubuntu机器端 1. 安装所需软件包 sudoapt-get install xrdp ...
- UML期末绘图及细节总结
往届期末绘图的题目例如以下所看到的: Read the providing materials carefully, and then do tasks. 2.1: Use Case Diagram ...
- Oracle数据处理
DML语言 &:地址符:(PrepareStament) 批处理:插入--------一次将10号部门的员工插入新的表中: ...
- 门面模式(Facade)
一:定义 提供一个统一的接口代表子系统内部的一组接口.门面模式提供一个高层的接口,使得子系统更易于使用. 二:经验 2.1 window系统的软关机(不是直接断电)是一个过程, 它自己背后会做很多 ...
- 19. Remove Nth Node From End of List[M]删除链表的倒数第N个节点
题目 Given a linked list, remove the n-th node from the end of list and return its head. *Example: Giv ...