首页 > 编程语言 >关于java 虚拟机栈

关于java 虚拟机栈

时间:2023-07-02 14:11:30浏览次数:64  
标签:java JVM 虚拟机 局部变量 关于 数组 Java

线程的栈是在哪里提出来了的?

Oracle官网的java虚拟机规范里面,2.5.2章节。网址:https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-2.html

下图就是我们常说的java虚拟机栈。

java虚拟机栈的栈帧具体是什么?

栈帧(Stack Frame)是以方法(Method)为基础的。栈帧里面有局部变量表(Local Variables)、操作数栈、动态连接(Dynamic Linking)、方法返回值地址等。

局部变量是存在哪里?

局部变量表里面。

  • 栈帧的局部变量部分被组织为基于零的单词数组。它包含该方法的所有参数和局部变量。
  • 数组中的每个插槽(slot)或条目(entry)都是4个字节(Byte),32位。
  • 该数组首先被方法参数占用,然后是局部变量(有序方式)。
  • 如果方法是实例方法,则局部变量数组中的第一个槽被“this”引用占用。
  • int、float和reference类型的值在数组中占据1个slot or entry,即4个字节。
  • double和long的值占据数组中的2个连续插槽,即总共8个字节。
  • Byte、short和char值将在存储前转换为int类型,并占用1个插槽,即4个字节。
  • 但是存储布尔值的方式因JVM而异。但是大多数JVM在局部变量数组中为布尔值提供了一个槽。

The Ultimate Stack Frame
Java Virtual Machine (JVM) Stack Area
Local variable Table In JVM Stack

关于方法参数传递,后面博客具体讲。推荐阅读:
形参和实参——Java值传递详细说明
探讨Java参数传递问题

感谢:
深入理解JVM虚拟机读书笔记——运行时栈帧结构
深入理解Java内存(图解堆栈)
图解栈帧,别再死记硬背

标签:java,JVM,虚拟机,局部变量,关于,数组,Java
From: https://www.cnblogs.com/zhangjin1116/p/17520735.html

相关文章

  • JAVA_OPTS
    JAVA_OPTS是一个环境变量,它可用于设置Java虚拟机(JVM)的运行参数。通过设置JAVA_OPTS环境变量,您可以为Java应用程序提供各种运行时配置。以下是使用JAVA_OPTS环境变量进行常见配置的示例:指定堆内存大小:-Xmx:设置最大堆内存大小,如 -Xmx2G 表示将最大堆内存设置为2GB......
  • 什么是JAVA内容仓库(Java Content Repository)
    内容仓库模型JSR-170是这样定义内容仓库的,内容仓库由一组workspace(工作空间)组成,这些workspace通常应该包含相似的内容。一个内容仓库有一个到多个workspace。每个workspace都是一个树状结构,都有一个唯一的树根节点(rootnode)。树上的item(元素)或者是个node(节点)或者是个property......
  • JSON中,java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher问题解决
    使用JSON,在SERVLET或者STRUTS的ACTION中取得数据时,如果会出现异常:java.lang.NoClassDefFoundError:net/sf/ezmorph/Morpher是因为需要的类没有找到,一般,是因为少导入了JAR包,使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-bean......
  • 深入探究Java中的Map数据结构
    引言:在Java编程中,Map是一种重要的数据结构,它提供了键值对的存储和检索功能。在本篇博客文章中,我们将深入探究Java中的Map,包括不同实现类的比较,常见的用法和一些高级技巧。通过深入理解Map的内部机制和使用方法,你将能够更好地应用它解决实际问题。一、Map概述Map是Java中的一个接......
  • Java学习——数组
    数组一、数组的定义Java语言中提供的数组是用来存储固定大小的同类型元素。二、数组声明和创建1.声明数组变量首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:dataType[]arrayRefVar;//首选的方法或dataTypearrayRefVar[];//效果相同,......
  • Java主流jdk发行版有哪些?
    Java的特点是百花齐放,不像c#或者go只有一家主导。oraclejdk收费了,没关系,不是只有它可用。java还有很多免费的主流的jdk发行版,记录下来备忘。OpenJDK-官方网站-源代码-文档-下载地址OpenJDK是其他所有jdk发行版的基础,可以用于开发和测试,但不建议将它用于Java生产环......
  • java.net.BindException: Address already in use: JVM_Bind <null> 的解决方案
    问题描述在学习SSM整合中,启用Tomcat插件时出现以下错误java.net.BindException:Addressalreadyinuse:JVM_Bind<null>通过查阅资料发现是端口被占用了解决方案通过命令查看进程,这里我的是8080端口号被占用了netstat-ano再运行命令去杀死占用端口进程taskk......
  • java中NaN是什么意思
    NaN,是NotaNumber的缩写。NaN用于处理计算中出现的错误情况,比如0.0除以0.0或者求负数的平方根。由上面的表中可以看出,对于单精度浮点数,NaN表示为指数为emax+1=128(指数域全为1),且尾数域不等于零的浮点数。IEEE标准没有要求具体的尾数域,所以NaN实际上不是一个,而是......
  • JavaScript逻辑运算符AND和OR之间的区别
    AND&&和OR||是JavaScript中的逻辑运算符,可用于执行不同的逻辑表达式。在这篇文章中,我将解释它们之间的区别。本文的目标是让您了解这些运算符的工作原理以及它们的不同之处。要理解这些运算符,了解JavaScript中真值和假值的概念非常重要。(更|多优质内|容:java567点c0m) ......
  • Java中类 DefaultTableModel 的概念
    columnIdentifiers          Vector,由多个列标识符组成dataVector          Vector,由包含多个 Object 值的 Vector 组成。一个DefaultTableModel 就是一个二维表,以下是使用函数:DefaultTableModel()构造默认的DefaultTableModel,它是一个零......