如何理解“局部变量表存放了编译期可知的各种基本数据类型”?
最近在学习JVM相关知识,在《深入理解Java虚拟机:JVM高级特性与最佳实践》(第2版)中,对于虚拟机栈中的局部变量表存放内容是这样描述的:“局部变量表存放了编译期可知的各种基本数据类型(boolean、byte、char、short、int、flat、long、double)”。

关于这句话我的理解不是很深刻,举个例子顺带提出我的疑问:

int i = 10;
int j = 10;

对Java内存结构有了解的都知道,对于判断 i == j 的结果为true,因为i和j的值都存储在常量池中。

那么问题就是,对于这句代码,它在局部变量表中存访的内容是什么?

我个人理解是存的 i 和 j,仅仅代表有int类型的这么两个变量(因为int类型长度固定故而局部变量表的空间在编译期就能确定)。

请各位大神答疑解惑一下,感激不尽!

1个回答

其实就是变量表里存放了变量名、类型,并不是只有类型。

mxxrgxg
mxxrgxg 嗯嗯,跟我预想的差不多,多谢大佬!
8 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
运行时栈帧之局部变量表
Slot单元的可重用性局部变量表的容量以slot为最小单位,一个slot可以存放32位数据类型,局部变量表中的slot是可以重用的,举个例子 public static void main(String[] args) { { byte[] pc = new byte[64*1024*1024]; // 64兆 } Sys
JVM 之(15)局部变量表
        在《JVM 之(1)运行时数据区》提到,虚拟机栈是描述Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。本篇主要分析局部变量表的原理结构。        局部变量表是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量。在Java程序被编译为Class文件时,就在方法的Code属...
JVM局部变量表
    局部变量表是JVM线程栈中每个frame中一个组成单元(具体细节见《JVM线程栈》),存放线程在当前方法执行过程中依然有效的局部变量。局部变量表的长度在类编译过程中就能确定,这样有利于frame初始化。     void fun () {         int a = 0;         int b = 1;         int c = 2;     }     fun的局部...
栈帧-局部变量表
局部变量表是栈帧的重要组成部分,它用于保存函数的参数和局部变量,局部变量表中的变量只在当前函数调用中有效,当函数调用结束后,随着函数栈帧的销毁,局部变量也会随之销毁。可以通过jclasslib查看函数的局部变量信息。局部变量表中槽位是可以重用的,如果一个局部变量过了作用域,那么在其作用域之后申请的新的局部变量就很有可能会复用过期局部变量的槽位,从而节省资源。局部变量表中的变量也是重要的垃圾回收根节点
从i++, ++i理解局部变量表和操作数栈
看一个面试题: public static void main(String[] args) { int i = 1; i = i++; int j = i++; int k = i + ++i * i++; System.out.println("i=" + i); System.out.println("j=" + j); System.out.println("k...
编译期可知,运行期不可变的方法
主要包括静态方法和私有方法两类,前者与类型直接相关,后者在外部不可被访问,两种方法各自的特点决定了它们不可能通过继承或别的方式重写其他版本,他们都适合在类的加载阶段进行解析。...
java虚拟机 jvm 局部变量表实战
http://blog.csdn.net/qq_30739519/article/details/51043512
局部变量表影响GC之实例解析
最近GC相关的资料,看到一些好玩的东西,在些总结一下! 代码清单1-1 public static void main(String[] args){ byte[] placeholder = new byte[64*1024*1024]; System.gc(); }代码清单1-1中的代码很简单,即向内存填充了64MB的数据,然后通知虚拟机进行垃圾收集。我们在虚拟
JVM学习-操作数栈(Operand Stack-官方翻译)
2019独角兽企业重金招聘Python工程师标准>>> ...
java虚拟机 jvm 局部变量表实战
java局部变量表是栈帧重要组中部分之一。他主要保存函数的参数以及局部的变量信息。局部变量表中的变量作用域是当前调用的函数。函数调用结束后,随着函数栈帧的销毁。局部变量表也会随之销毁,释放空间。 由于局部变量表存在栈帧中。所以,如果函数参数和局部变量比较多,会使的局部变量表膨胀,每一次调用会占用更多的栈空间。最终结局就是栈空间内存一定的情况下调用的次数减少。 1.1.1. 局部变量表变量影响
帧栈、局部变量表、操作数栈
栈帧(frame)栈帧是用来存储数据和部分过程结果的数据结构,同时也用来处理动态链接(dynamic linking)、方法返回值和异常分派(dispatch exception)。栈帧随着方法的调用而创建,随着方法的销毁而销毁(无论方法正常执行还是抛异常都算方法结束)。栈帧的存储空间由创建他的线程分配在java虚拟机中,每一个栈帧都有自己的本地变量表(local variable)、操作数栈(o...
深入理解Java虚拟机之编译期优化
1 概述 Java语言的“编译期”其实是一段“不确定”的操作过程,因为它可能是指一个前端编译器(其实叫“编译器的前端”更准确一些)把.java文件转变成.class文件的过程;也可能是指虚拟机的后端运行期编译器(JIT编译器,Just In Time Compiler)把字节码转变成机器码的过程;还可能是指使用静态提前编译器(AOT编译器,Ahead Of Time Compiler)直接把*....
List里面存放了Map
List result 里面的值是[N_SELF_CUST_PRIVILEGE_ID=7, N_SELF_CUST_PRIVILEGE_ID=8, N_SELF_CUST_PRIVILEGE_ID=9, N_SELF_CUST_PRIVILEGE_ID=10, N_SELF_CUST_PRIVILEGE_ID=1, N_SELF_CUST_PRIVILEGE_ID=2, N_SELF_CUST_PRIVILEGE_ID=3, N_SELF_CUST_PRIVILEGE_ID=4, N_SELF_CUST_PRIVILEGE_ID=5, N_SELF_CUST_PRIVILEGE_ID=6]rn 小弟刚入行,很多都不会,现在我想要获取出数字,然后放到数组里,传到前台jsp页面去。应该怎样写,数字不是N_SELF_CUST_PRIVILEGE_ID=1的,就要1,补充下,我用的是struts1
编译期
#Java虚拟机之编译期及其优化 ##1、有三种可能的编译期 I.前端编译器将.java文件转换成.class文件的过程 II.虚拟机的后端运行期编译器(JIT编译器:Just In Time Complier)把字节码转换成机器码的过程 III.静态提前编译器(AOT编译器:Ahead Of Time Complier)直接把.java文件转换成本地机器代码的过程 而一般认知中的...
各种基本数据类型的长度
[code="c++"] #include #include using namespace std; class MapSort{ public: bool operator()(int size1,int size2){ return size1
如何实现编译期的累加器?
如题:如何实现编译期的累加器?rn编译期的累加器: 我指,此累加器当时的值能够在编译时当作常量处理rn例:rn[code=c]rntemplate struct A;rnint main()rnrn A<__COUNTER__> a; // 标准累加器,编译时作常量处理rn// A b; // 如何作一个自己的累加器,也可作常量处理 rnrnrn[/code]rn 另外,哪位大神给个C币换积分的链接,以前找得到,忽然找不到了[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/27.gif][/img]
局部static变量一直存在吗
比如有这段代码rnvoid fun1();rnvoid main()rn rn int i;rn for(i=0;i<10;i++) fun1();rnrnvoid fun1()rn rn static int x=0;rn x++;rn cout<
js基本数据类型理解
js数据类型分为两类:1.基本数据类型:null undefined number boolean string2.引用数据类型:function object array基本数据类型存的是值,而引用类型存的是地址。例如 var a = &quot;c&quot;,那么a的值就是'c'。如果 var a = [1,2,3],那么a存的是这个数组在内存中的地址。所以会出现深拷贝,和浅拷贝。var a = [1,2,3]...
深入理解基本数据类型
本课程主要介绍C++语言程序设计,学习本课程要求学习者掌握计算机学科的基本知识,初步的C语言基础,此课程主要是全面介绍C++的基本知识,通过实践编程理解运用C++语言。
关于oracle变量表和sql server变量表。
sql server中的变量表可以进行insert、update、select操作,oracle中的临时表好像不能进行这些操作,有什么替代的吗?
变量表与临时表
本人分页存储过程一直用的变量表,可能是他有一些局限性,不能用于字符串的拼接,如rndeclare @Sql varchar(300)rnset @Sql='select * from a,@b where a.id=b.id'--@b是变量表rn但是临时表就可以,那是不是我的操作都换成临时表呢,临时表多了会不会对系统造成很大的负担呢,如果我做的是电子商务的网站,用户每浏览一次我的页面就会在系统生成一张临时表,那有一万个用户在访问呢,我不是要有一万个临时表啊,系统是如何处理临时表的,假如系统删除临时表不即时,再在一万的基础上再累加怎么办?
理解java中的基本数据类型
有8种,分别是 boolean、byte、short、int、long、char、float、double
深入理解 Java 基本数据类型
数据类型分类 Java 中的数据类型有两类: String 值类型 Java 语言提供了 8 种基本类型,大致分为 4 类 整数型 byte - 8 位。 short - 16 位。 int - 32 位。 long - 64 位,赋值时一般在数字后加上 l 或 L 。 浮点型 float - 32 位,直接赋值时必须在数字后加上 f 或 F 。 double - 64 位...
js基本数据类型和创建对象的理解
js是弱类型语言,基本数据类型有字符串、数字、布尔、undefined、null、对象基本数据类型和js内置对象Object、Number、Boolean、Function、String、Array有关联,如var a = true;typeof a&quot;boolean&quot;var a = {};typeof a&quot;object&quot;var a = new Object(); var a = {};typeof...
理解DL的局部最小
    DL是在一个非常高维的世界里做梯度下降。局部最小值很难形成,因为局部最小值要求函数在所有维度上都是局部最小。更实际得情况是,函数会落到一个鞍点上,如下图:多层神经网络,大部分局部极小值都在底部 ,已经非常接近全局最小值,如下图    DL训练的困难主要是鞍点问题。我们很可能也从来没有真的遇到过局部极值。Bengio组这篇文章Eigenvalues of the Hessian in Dee...
局部静态变量简单理解
李国帅 2006-4-15 10:46谨以这样的短文,告诫自己:勿以恶小而为之,勿以善小而不为现在看来,局部静态变量确实很有用,我以前申请的好多变量都可以用它简单的加以处理。可以将外部变量的作用范围限定在一个文件的范围(文件中的静态变量),也可以将内部变量限定在函数范围内,这些变量不会因为堆栈的消失而消失,因为他们保存在外部内存中。写个小测试int func() { static int
Java虚拟机中栈,栈帧,局部变量表的概念和特征。
Java虚拟机栈的特征: 线程私有: 后进先出(LIFO)栈 java虚拟机栈和程序计数器一样,他是线程私有的内存区域,他的生命周期与线程相同,java虚拟机栈描述的是java方法执行时候的内存概念模型,每个方法在执行的时候都会创建一个栈帧,用来创建这个方法的操作数栈,局部变量表,方法出口,动态链接等信息,每一个方法在调用和结束的过程就对应了一个栈帧在虚拟机栈中入栈到出栈的过程,java虚拟
浅谈虚拟机(2.1)凶器简介の局部变量表
局部变量表内存 局部变量表是一组变量存储空间,用于存储方法参数和方法内部定义的局部变量(local variable)。在java进程被编译为class文件的时候,就根据方法的code属性中max_locals数据项分配了局部变量表所需的最大空间。 局部变量表以slot为最小单位,长度为32位,虚拟机规范中明确表明,每一个slot都应该能够存放一int,byte,char,short,boolea
电脑操作可知
mstsc ---Microsoft terminal services client 创建与终端服务器或其他远程计算机的连接
jvm中的局部变量表中的Slot中的作用是什么?
> 原文地址:http://www.tuicool.com/articles/URZrMnbn> 局部变量表中的Slot是可重用的,方法体中定义的变量,其作用域并不一定会覆盖整个方法,如果当前字节码PC计算器的值已经超出了某个变量的作用域,那么这个变量对应的Slot就可以交给其它变量使用。nn求大神解释下,上面的这句话,最好举个实例。
如何给变量表加索引
declare @tt table(aa int,bb int)rninsert into @tt(aa,bb)select * from kkrn想给表@tt加上索引如何做呢?
play1.2.7局部编译,局部打包完整解决方案
play 框架在开发效率方面确实非常的非常的不错,优点在此处就不做介绍! 缺点在后期,后期项目较大后,打包越来越慢,打个包 10 多分钟,这在更新频率非常高的公司,完全无法忍受,只能整体编译,无法局部编译。 前段时间一直在研究如何达到这一目的(快速编译、打包、部署),在了解的过程中,慢慢有了一套完整的解决方案,来处理 play 的这个弊端。今天将近期的了解的整理成文章分享给大家,希望能帮到在这方面有同样困惑的朋友。
创建变量表
$tbsql="CREATE TABLE IF NOT EXISTS `test1` ("; 这是第一名,我现在想test1表是个变量 test2 test3...rnrn我写成rnrn$tbsql="CREATE TABLE IF NOT EXISTS `$tabs` ("; 错了吗?
如何理解C的各种版本?
我原来是学VB的 但是感觉VB的局限性太大 所以现在想改学C。rn但是现在发现C有好多“版本”,自己却无法区分。rnrn希望有经验的高手们用几句简短的话帮我解释下c++, VC++, C#, C++ Builder ,VC++.NET, C#.NET的区别.rnrn谢谢~~~~~~~~~~~~~rn
Java中的局部变量表及使用jclasslib进行查看
文章搬家自:https://my.oschina.net/itsyizu/blog/548686 直接上下载地址jclasslib是一个独立的工具,不是包含在JDK中的工具,需要自己进行下载。一个栈帧至少需要包含局部变量表、操作数栈、帧数据区这三个部分。局部变量表是用于保存函数的参数以及局部变量的。
exec(变量表)
create table table1rn(Stuname varchar(20)rn)rninsert into table1 select '小王'rninsert into table1 select '小李'rninsert into table1 select '小周'rnrnrnselect @Sql=@Sql+',e.['+Stuname+']' from table1rn这样是正确的,但是由于table1是变量表rn所以rndeclare @Sql varchar(8000) rnrnset @Sql ='1 ' rnselect @Sql=@Sql+',e.['+Stuname+']' from exec('table1 ')rn其中:table1是变量表,rnexec总是报错,请求解决。。。。
双重vector中的vector存放了结构体
大家好呀!我现在定义了一个双重vector数组,vector > maze(M, vector(M)),接下来要一直用到这个数组,进行增加或删除元素等操作,怎么实现呀?我用vector的目的就是当没有输入时,生成默认迷宫大小,当有输入时,生成输入大小的迷宫。rn谢谢各路大神解答了^_^rnrnstruct Coordinaternrn int hori; rn int vert; rn;rnrnrnstruct Cellrn rn enum Boolean wall[4]; rn enum Boolean visited; rn int visitID; rn;rnrnint M;rnvector > maze(M, vector(M)); rnvector stack(M*M); rnint top = -1;rnrnrnvoid Push(int hori, int vert)rnrn ++ top;rn stack.hori.push_back = hori;rn stack[top].vert = vert;rnrnrnvoid ClearStack()rnrn int i;rn for(i=0;i
DepthJVM-编译期优化
1.Java编译器编译过程 1.1 解析与填充符号表 词法、语法分析: 填充符号表: 1.2 插入式注解处理器的注解处理过程 用于处理注解,类似于一组编译器插件,可以读取、修改、添加语法树中的任意元素,如果对语法树进行了修改编译器将回到解析及填充符号表过程重新处理,直至没有修改位置,每一个循环称为一个Round(回环) 插入式注解处理器初始化过程在initProcess
编译期常量
编译期常量static final
10.编译期的异常
不管你是Java小白,还是Java初级, 没关系,学完我们的教程,你会对Java的核心知识体系有清晰的理解,你将会站在高处鸟瞰Java,为接下来的学习打下坚实的基础。 本教程的每一个细节都经过精心专研,完全针对Java初学者。真正做到让初级轻松入门,直到掌握java SE的部分。
相关热词 c# 线程结束时执行 c# kb mb 图片 c# 替换第几位字符 c#项目决定成败 c# 与matlab c# xml缩进 c#传感器基础 c#操作wps c# md5使用方法 c# 引用父窗口的组件