Java-虚拟机-栈帧
JVM规范要求虚拟机实现者自己实现栈帧,本文阐述栈帧的实现方式,有三种
1.堆上分配
2.连续重叠分配
3.混合分配
当调用一个方法的时候,JVM会根据方法信息在内存中划分一个叫做栈帧的区域,那么具体是在哪里呢?本文以如下代码为例
public int m3() {int a=4;int b=5;int c=m4(a,b);return c;
}
public int m4(int a,int b) {return a+b;
}
1.堆上分配
调用一个方法的时候,在堆中的某个位置划分出一个区域,用作栈帧,当m3调用m4的时候,jvm需要为m4分配一块内存,这个内存是在堆中分出来的,m3栈帧使用一个指针指向m4栈帧,没错,如你所想,m3与m4不是连续的
2.连续重叠分配
和我们多数人的想法一样,栈空间是连续的,所以栈帧也是连续的,这只是其一,既然是连续的,那么将m3的操作数栈,作为m4的局部变量表,这样就更加节省内存,这也是常见的栈帧实现方式
3.混合分配
将上面两种方式混搭使用,当栈满了之后,可以采用堆上分配的方式,这样栈的可伸缩性会更好
Java-虚拟机-栈帧相关推荐
- java虚拟机栈帧_Java虚拟机,运行时栈帧结构
业余生活要有意义,不要越轨.--华盛顿 引导语 "虚拟机"是一个相对于"物理机"的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器. ...
- 探究Java虚拟机栈
前言 Java 虚拟机的内存模型分为两部分:一部分是线程共享的,包括 Java 堆和方法区:另一部分是线程私有的,包括虚拟机栈和本地方法栈,以及程序计数器这一小部分内存.今天我就 Java 虚拟机栈做 ...
- 46栈内存溢出、内存区域(程序计数器、Java 虚拟机栈、本地方法栈、Java 堆、方法区、直接内存、内存溢出)与内存溢出(对象实例化分析)
46.什么情况下会发生栈内存溢出 46.1.Java 内存区域与内存溢出 46.1.1.内存区域 46.1.1.1.程序计数器 46.1.1.2.Java 虚拟机栈 46.1.1.3.本地方法栈 46 ...
- 12.JDK1.8 JVM运行时数据区域概览、各区域介绍、程序计数器、Java虚拟机栈、本地方法栈、堆、堆空间内存分配(默认情况下)、字符串常量池、元数据区、jvm参数配置
12.JDK1.8 JVM运行时数据区域概览 12.1.JDK1.8 JVM运行时数据区域概览 12.2.各区域介绍 12.3.各区域介绍 12.3.1.程序计数器 12.3.2.Java虚拟机栈 1 ...
- Java虚拟机栈介绍
与程序计数器一样,Java虚拟机栈(Java Virtual Machine Stack)也是线程私有的,它的生命周期 与线程相同.虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候 ...
- Java虚拟机栈详解
前言 虚拟机栈也称为Java栈,每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(Stack Frame) 栈特点基本介绍 Java虚拟机栈属于线程私有,它的生命周期与线程相同(随线程而生,随 ...
- 运行时数据区——Java虚拟机栈
与程序计数器一样, Java虚拟机栈(Java Virtual Machine Stacks)也是线程私有的,它的生命周期与线程相同.Java栈以帧为单位保存线程的运行状态.每个方法在执行的时候都会创 ...
- 【深入理解JVM】运行时数据区域:java虚拟机栈
虚拟机栈是线程私有,生命周期与线程相同. java虚拟机栈描述的是Java方法执行的线程内存模型: 每个方法在执行的时候,Java虚拟机栈都会同步创建一个栈帧(stack frame),用于 储存 局 ...
- java虚拟机栈(亦篇足以,吴懈可击)
文章目录 前言 一.虚拟机栈的概述 1.虚拟机栈出现的背景 2.虚拟机栈的概述 3.虚拟机栈中的常见异常 二.栈的存储单位 ※局部变量表 1.局部变量表概况 2. 变量槽Slot 3.局部变量和成员变 ...
- Java必突-JVM知识专题(一): Java代码是如何跑起来的+类加载到使用的过程+类从加载到使用核心阶段(类初始化)+类加载的层级结构+什么是JVM的内存区域划分?Java虚拟机栈、Java堆内存
前言: 该章节知识点梳理:本文主要是入门和了解jvm,不做深入 1.Java代码是如何运行起来的? 2.类加载到使用的过程? 3.验证准备和初始化的过程? 4.类从加载到使用核心阶段:初始化.类加载器 ...
最新文章
- Visual Studio下Qt调用IDL
- 网络层:构成超网(CIDR)
- Java核心类库篇6——IO
- 最长配对(51Nod-2494)
- 拉普拉斯变换_拉普拉斯变化(s变换)定义与性质
- delphi连接sql server的字符串2011-10-11 16:07
- php jq ajax 4个下拉框联动案列,AJAX_AJAX实现下拉框联动,想当年,为了实现三级联动, - phpStudy...
- android消息机制—Looper
- UNIX网络编程——shutdown 与 close 函数 的区别
- Mybatis传递多个参数
- 第四季-专题6-Linux内核子系统
- 拓端tecdat|R语言进行相关矩阵分析及其网络可视化
- 技术分享 | Online DDL 工具 gh-ost
- HttpClient 4.1版本,模拟登录,终于成功了(2)
- win10玩我的世界java_我的世界win10java下载
- 计算机9网络连接不上,本地连接连不上,教您电脑本地连接连不上怎么解决
- 计算机基础,Java介绍和环境搭建及Hello World
- 周报,当前是第几周 ?
- Super Ugly Number
- 数据结构(C语言)- 稀疏矩阵的快速乘法
热门文章
- c语言空白字符的aci,c语言的保留字符有32个是那些啊???代表什么于是啊??...
- android编程设备信息,Android获取当前手机设备信息工具类详解
- matlab期中考试卷,湖南大学matlab期中考试试卷分析
- php web服务器部署,php – 如何配置apache web服务器以部署laravel 5
- dnf维护服务器 安图妮15天,DNF带3次暴走安图恩被封15天 我这数据哪异常了?
- 将springboot打包成的jar文件做成windows服务
- redis的持久化之RDB的配置和原理
- 组件端Apollo配置放到NAS中
- 使用xshell6连接linux提示 WARNING! The remote SSH server rejected X11 forwarding
- Android开发笔记(九十四)图片的基本加工