gpt4 book ai didi

java - 局部变量的最大内存分配

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:17:18 26 4
gpt4 key购买 nike

在Java中,局部变量是否分配了最大32位的内存空间?如果是,如果我在 Java 代码的方法中使用数据类型为 long(64 位)的局部变量会怎样?内存以什么方式分配给这个变量?

每当我用谷歌搜索得到答案时,我得到的解释只与 java 内存区域有关,它解释了在哪里(在堆栈中相关方法的框架中..没关系,我知道这一点)局部变量获取内存,这肯定不是对我的查询的相关响应。

最佳答案

原来的 VM 规范在局部变量方面实际上是一团糟,每个局部变量都在堆栈上保留了一个“槽”(只是一个索引号),每个槽应该容纳 4 个字节。所以每个变量都映射到一个“槽”。但是占用超过 4 个字节(double,long)的变量需要占用两个连续的槽位。然而,引用确实占用一个插槽,尽管它们在 64 位 VM 上可能是 8 个字节。指定时没有 64 位 VM,因此该规范假定引用 32 位。

在实践中,我很确定任何当前的 VM 都会按照它认为合适的方式重新映射堆栈槽,并且堆栈上保留的实际大小也将由 VM 决定。所以剩下的就是字节码中一个特殊的槽分配方案,所有实际的“槽”东西都纯粹在字节码级别——虚拟机不需要物理地遵守字节码指定的槽布局。

查看字节码规范:http://docs.oracle.com/javase/specs/jvms/se5.0/html/Overview.doc.html#17257

关于java - 局部变量的最大内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17933510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com