java虚拟机栈(关于java虚拟机内存的那些事)
《深入理解 java 虚拟机》 读书扩展
作者:淮左白衣
写于 2018年4月13日16:26:51
目录
java虚拟机栈是什么
平时大家在说 JVM内存 的时候,最常见的说法就是:堆、栈,这种说法很浅显,这里大家理解的栈,就是我们今天讲的java虚拟机栈,或者可能只是虚拟机栈中的 局部变量表 部分;
特点
- 线程私有的
- 生命周期与线程一致
- 每个方法执行的同时,都会在java虚拟机栈中创建一个
栈帧 - 会抛出
StackOverflowError、OutOfMemoryError异常
栈帧
,每个方法在执行的时候,在内存中的模型就是创建一个栈帧,栈帧是方法运行时的基本数据结构,可以理解为栈帧是当前正在运行时的方法的对象;栈帧中存储着方法运行时需要的一些信息:局部变量表、操作数栈、动态链接、方法出口等信息;
(我们后期再去着重理解栈帧,现在只需要知道一些基本概念就好了)
常说入栈出栈,就是栈帧的入栈出栈;
局部变量表
局部变量表中,保存着方法中用到的局部变量(基本数据类型,引用类型);
局部变量表,所占的内存空间在 编译期间 就确定下来了,也就是当方法入栈的时候,栈帧中为方法的局部变量表分配多大空间是完全确定的;你可能会问,假如我程序中有if-else块,那么if块和else块中的变量,会全部算进局部变量表里面吗;答案是肯定的,分支结构中的变量,都会被算进去;
其中long和double占两个局部变量空间(slot),其他类型占用一个slot;因此,我们写的方法,如果方法中的局部变量太多,会占用更大的虚拟机栈空间;
什么时候抛出 StackOverflowError 、OutOfMemoryError 异常
StackOverflowError :当线程申请的栈深度大于虚拟机允许的深度,抛出StackOverflowError 异常;
OutOfMemoryError :假如线程申请的栈深度已经大于虚拟机所允许的深度了,但是虚拟机支持动态扩展 栈的深度,则进行扩展栈的深度,而不是抛 StackOverflowError 异常;最后,假如虚拟机无法获得足够的内存进行栈深度的扩展,则抛出 OutOfMemoryError 异常 ;
后记:本地方法栈
在JVM的内存中,还有一个本地方法栈,它和虚拟机栈的功能基本一样,只是它里面的栈帧,是本地方法对象;它同样抛出 StackOverflowError 、OutOfMemoryError 这两个异常,没啥好说的;
java虚拟机栈(关于java虚拟机内存的那些事)的更多相关文章
- 虚拟机栈(Java Stack)基础知识
虚拟机栈即是程序运行时的单位,而堆是数据存储的单位.换句话说,栈解决的是程序运行的问题,即程序如何执行,如何处理数据,而堆是解决数据的存储问题,数据存在哪,放在哪 虚拟机栈细节如下图所示,其中当前栈帧 ...
- Java 内存结构之虚拟机栈
2.虚拟机栈 定义:虚拟机栈(Java Virtual Machine Stacks)就是每个线程运行需要的内存空间,栈由一个一个的栈帧(Frame)组成,栈帧就是每个方法运行时需要的内存(方法的参数 ...
- <<深入Java虚拟机>>-第二章-Java内存区域-学习笔记
Java运行时内存区域 Java虚拟机在运行Java程序的时候会将它所管理的内存区域划分为多个不同的区域.每个区域都有自己的用途,创建以及销毁的时间.有的随着虚拟机的启动而存在,有的则是依赖用户线程来 ...
- 深入理解java虚拟机读书笔记--java内存区域和管理
第二章:Java内存区域和内存溢出异常 2.2运行时数据区域 运行时数据区分为方法区,堆,虚拟机栈,本地方法栈,程序计数器 方法区和堆是线程共享的区域 虚拟机栈,本地方法栈,程序计数器是数据隔离的数据 ...
- 深入理解java虚拟机(一)虚拟机内存划分
Java虚拟机在执行Java程序时,会把它管理的内存划分为若干个不同的数据区.这些区域有不同的特性,起不同的作用.它们有各自的创建时间,销毁时间.有的区域随着进程的启动而创建,随着进程结束而销毁,有的 ...
- Java虚拟机2:Java内存区域
1.几个计算机的概念 为以后写文章考虑,也为巩固自己的知识和一些基本概念,这里要理清楚几个计算机中的概念. 1.计算机存储单位 从小到大依次为位Bit.字节Byte.千字节KB.兆M.千兆GB.TB, ...
- Java虚拟机栈---本地方法栈
1.Java虚拟机栈(Java Virtual Machine Stacks) 线程私有,它的生命周期与线程相同.描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack ...
- 深入学习重点分析java基础---第一章:深入理解jvm(java虚拟机) 第一节 java内存模型及gc策略
身为一个java程序员如果只会使用而不知原理称其为初级java程序员,知晓原理而升中级.融会贯通则为高级 作为有一个有技术追求的人,应当利用业余时间及零碎时间了解原理 近期在看深入理解java虚拟机 ...
- 深入理解JVM虚拟机11:Java内存异常原理与实践
本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutori ...
- JVM运行时数据区--Java虚拟机栈
虚拟机栈的背景 由于跨平台性的设计,java的指令都是根据栈来设计的.不同平台CPU架构不同,所以不能设计为基于寄存器的. 根据栈设计的优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样 ...
随机推荐
- 10月清北学堂培训 Day 3
今天是钟皓曦老师的讲授~ zhx:题很简单,就是恶心一些qwq~ T1 别人只删去一个字符都能AC,我双哈希+并查集只有40?我太菜了啊qwq 考虑到越短的字符串越难压缩,越长的字符串越好压缩,所以我 ...
- 享学课堂java架构vip课程
1.wps文档地址 https://docs.qq.com/doc/DRVNLUndvTmFSdEhO 2.百度网盘地址 https://pan.baidu.com/s/1uxaTzJZHKrsw_H ...
- uiautomator代码例子--java
在androidtest下创建文件Ui2Test.java package com.example.myapplication; import android.app.Instrumentation; ...
- RESTful入门
RESTful入门 1. REST简介 和RPC一样,都是目前比较主流的URL链接风格,也可以说是web服务的一种架构风格.REST全称Representational State Transfer, ...
- 记录一次腾讯X5内核64位手机初始化失败
之前一直在使用x5内核,只需要一个jar包和so文件就能让webview实现多余原生webview的水平,在32位的手机上能够正常运行,但是到了64位手机上就报如下错误: E/ERROR:: .... ...
- RT-Thread 柿饼GUI
目前主流的嵌入式GUI开发技术中,RT-Thread/Persimmon.TouchGFX和emWin是最受人瞩目的. RT-Thread/ Persimmon是国内主导开发的实时线程操作系统RT ...
- 实现一个微信小程序组件:文字跑马灯效果
marquee.json { "component": true, "usingComponents": {} } marquee.wxml <!--co ...
- OpenGL ES: (1) OpenGL ES的由来 (转)
1. 电脑是做什么用的? 电脑又被称为计算机,那么最重要的工作就是计算.看过三体的同学都知道, 电脑中有无数纳米级别的计算单元,通过 0 和 1 的转换,完成加减乘除的操作. 2. 是什么使电脑工作? ...
- supervisor :a running process with pid = 0,程序PID为0
Neo君作为一只小白,今天踩到了一个supervisor的坑. 如上图所示,出现这种情况后,想把这个进程停止.或者重启,甚至stop all它还是这个样子,如下图(马赛克部分为进程名称): 一:背景 ...
- ISO/IEC 9899:2011 条款5——5.2.3 信号与中断
5.2.3 信号与中断 1.函数应该被设计为它们可以被一个信号在任一时刻打断,或是被一个信号处理所调用,或是两者都发生,对于初期不发生改变,但仍然处于活动状态,调用的控制流(在中断之后),函数返回值, ...