Java虚拟机栈介绍

与程序计数器一样,Java虚拟机栈(Java Virtual Machine Stack)也是线程私有的,它的生命周期 与线程相同。虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都 会同步创建一个栈帧[1](Stack Frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信 息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
经常有人把Java内存区域笼统地划分为堆内存(Heap)和栈内存(Stack),这种划分方式直接继 承自传统的C、C++程序的内存布局结构,在Java语言里就显得有些粗糙了,实际的内存区域划分要比 这更复杂。不过这种划分方式的流行也间接说明了程序员最关注的、与对象内存分配关系最密切的区 域是“堆”和“栈”两块。其中,“堆”在稍后笔者会专门讲述,而“栈”通常就是指这里讲的虚拟机栈,或 者更多的情况下只是指虚拟机栈中局部变量表部分。
局部变量表存放了编译期可知的各种Java虚拟机基本数据类型(boolean、byte、char、short、int、 float、long、double)、对象引用(reference类型,它并不等同于对象本身,可能是一个指向对象起始 地址的引用指针,也可能是指向一个代表对象的句柄或者其他与此对象相关的位置)和returnAddress 类型(指向了一条字节码指令的地址)。
这些数据类型在局部变量表中的存储空间以局部变量槽(Slot)来表示,其中64位长度的long和 double类型的数据会占用两个变量槽,其余的数据类型只占用一个。局部变量表所需的内存空间在编 译期间完成分配,当进入一个方法时,这个方法需要在栈帧中分配多大的局部变量空间是完全确定 的,在方法运行期间不会改变局部变量表的大小。请读者注意,这里说的“大小”是指变量槽的数量, 虚拟机真正使用多大的内存空间(譬如按照1个变量槽占用32个比特、64个比特,或者更多)来实现一 个变量槽,这是完全由具体的虚拟机实现自行决定的事情。
在《Java虚拟机规范》中,对这个内存区域规定了两类异常状况:如果线程请求的栈深度大于虚 拟机所允许的深度,将抛出StackOverflowError异常;如果Java虚拟机栈容量可以动态扩展[2],当栈扩 展时无法申请到足够的内存会抛出OutOfMemoryError异常。
[1] 栈帧是方法运行期很重要的基础数据结构,在本书的第8章中还会对帧进行详细讲解。 [2] HotSpot虚拟机的栈容量是不可以动态扩展的,以前的Classic虚拟机倒是可以。所以在HotSpot虚拟 机上是不会由于虚拟机栈无法扩展而导致OutOfMemoryError异常——只要线程申请栈空间成功了就不 会有OOM,但是如果申请时就失败,仍然是会出现OOM异常的,后面的实战中笔者也演示了这种情 况。本书第2版时这里的描述是有误的,请阅读过第2版的读者特别注意

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《关键对话——何谓关键对话》读书笔记(一)

《关键对话——何谓关键对话》读书笔记(一) 利用假期的时间,将关键对话阅读了一遍,书中提到的观点,方法,场景等很适合我目前处的状态,有的时候读起来仿佛就是自己身临其境,有种感同身…

从java读取Excel继续说大道至简 .

在上一篇博客《从复杂到简单,大道至简》中说道我们要把复杂的问题简单化,也就是要把问题细分,让大问题变成小问题,这样解决起来会相对容易,当我们把容易的小问题解决掉了,大问题自动就会迎刃而解。 所以今天…

Java堆介绍

对于Java应用程序来说,Java堆(Java Heap)是虚拟机所管理的内存中最大的一块。Java堆是被所 有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,Java 世界里“几乎”所有的对象实例都…

推荐算法工程师的成长之道

推荐算法工程师的成长之道 原创: gongyouliu 大数据与人工智能 3月20日 源链接:原文地址 本文,作者会基于自己的实践经验讲述推荐算法工程师的成长之道,这里的“道”有发展路径和道(道理、方法论、经验、智慧)两层意思。 所以本文…

java电子商务源码解读 b2b2c o2o

大型企业分布式互联网电子商务平台,推出PC微信APP云服务的云商平台系统,其中包括B2B、B2C、C2C、O2O、新零售、直播电商等子平台。 分布式、微服务、云架构电子商务平台 java b2b2c o2o 技术解决方案 开发语言: java、j2ee 数据库&#x…

jQuery上传插件-uploadify3.1使用说明

uploadify ,简单实用的flash上传组件,兼容性良好。 现已有html5版本。 官方地址:http://www.uploadify.com/ 官方英文文档:http://www.uploadify.com/documentation/ Demos Download 使用方法(.net版本): 前台JS $("#id&q…

《关键对话——掌握关键对话》读书笔记(二)

《关键对话——掌握关键对话》读书笔记(二) 上一节中我们已经定义了关键对话,在面对关键对话时(比如老板给你安排了一项非常不合适的任务),你的选择可能只有如下两种: 1.当面表示反对,把老板惹怒 2.沉默接…

信息流推荐多样性

信息流推荐多样性 一、问题现状 信息流产品中一个常见的问题是多样性越来越差,造成这种问题的原因在于机器学习算法本身。下面通过一副系统循环图来介绍多样性差的问题。 资讯库随机推荐文章,由于是按照全库比例采样,娱乐占比较大&#xf…

Robocode教程2——你的第一个robo,取个好名字哦

摘自:http://site.douban.com/widget/notes/7736245/note/210029011/ 你需要准备的东西:1.c语言的知识和一点点的java知识,robocode意在学习java,不要要太深的java水平,你只要理解java和c的区别就可以了。2.robocode A…

《关键对话——从“心”开始,如何确定目标》读书笔记(三)

从“心”开始,如何确定目标、 我们的问题并不是行为本身是错误的,而是我们的动机有问题,即我们常常弄错要面对的目标。 一、从心开始 对话高手总是能做到从心开始。在开展高风险对话时,他们总是首先明确目的和动机,无…

UI设计师的面试过程

Palantir Technologies是一家提供分析、整合、可视化各种数据的IT型技术公司。在该公司,前端工程师和后端工程师有同样的面试过程,前端工程师也需要的一定的编程基础。该公司技术博客Palantir TeckBlog日前发表了一篇博文《The UI Design Interview》&am…

C语言代码实现数组(简单)

前一节课讲了数组的删除功能实现&#xff1a;删除功能 本节课内容我们实现数组的反转功能和冒泡排序功能&#xff1a; #include <stdio.h> #include <string.h> #include <malloc.h> #include <stdlib.h>struct Arr{int * pBase; //存储数组第一个元…

数据在市场运营中的应用

数据在市场运营中的应用 1. 背景 目前的产品运营、用户拉新、渠道投放、留存等都是靠人工进行策略制定&#xff0c;有的公司和部门完全靠着以前的经验在尝试互联网产品的市场营销和运营。这样不仅效率很低&#xff0c;而且效果也不显著。 主要存在的问题有以下几点&#xff…

C语言的typedef用法

案例1&#xff1a; #include <stdio.h> #include <string.h> #include <malloc.h>typedef int zhangsan; //为int在多取一个名字 zhangsan等价于intstruct Student{int sid;char sname[100];char sex;} ST;int main() {int i 10; //等价于zhangsan i10…

信息流项目计划和思路

目录 一、对项目的认识. 4 1&#xff0e;用户需求和竞品. 4 2. 项目现状. 4 3. 发展前景. 4 二、项目的业务方向和思路. 6 1. 业务方向. 6 2. 2020年目标. 6 3. 思路. 6 3.1用户留存提升&#xff08;6%->12%&#xff09;. 6 3.2日活提升&#xff08;30万->80万…

MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结

MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中&#xff0c;N指的是字符的长度,VARCHAR类型最大支持65535,指的是65535个字节,但并不支持65535长度的varchar&#xff0c;65535中应该包含了所有字段的长度、变长字段长度标示…

数据结构链表知识入门

链表定义: n个节点离散分配&#xff0c; 彼此通过指针相连 每个节点只有一个前驱节点&#xff0c;每个节点只有一个后续节点 首节点没有前驱节点尾节点没有后续节点 专业术语: 首节点:第一个有效节点尾节点:最后一个有效节点头结点: 1&#xff0c;第一个有效节点之前的那个节…

《关键对话——注意观察,如何判断对话氛围是否安全》读书笔记(四)

《关键对话——注意观察&#xff0c;如何判断对话氛围是否安全》读书笔记(四) 在对话过程中&#xff0c;既要关注对话内容&#xff08;即讨论的主题&#xff09;&#xff0c;也要观察对话气氛&#xff08;即参与者的反应&#xff09;。越早意识到你和对方退出了对话机制&#x…

扬长避短使用Windbg和Visual Studio高效调试调试你的代码

扬长避短使用Windbg和Visual Studio高效调试调试你的代码 经常被问及这样的问题&#xff1a; 你为什么非要使用Windbg调试你的程序&#xff1f; 记得有一次面试的时候笔者也被问到这样的问题&#xff0c;我的回答是&#xff1a;不是我非要使用Windbg, 只是在不同的情况下使用不…