gpt4 book ai didi

java - 在 Java VM 中,如何处理对象引用

转载 作者:太空宇宙 更新时间:2023-11-04 08:40:47 25 4
gpt4 key购买 nike

在 Java 应用程序执行期间,对象引用是由运行时使用还是在编译时被剥离?

我想我可以反编译类文件,看看它们是如何用作局部变量和成员变量的。

当您不需要时创建对象引用是否浪费,或者编译器会删除不需要的引用?

例如

最终字符串 abc = "abc";方法(abc);

相对于:

方法(“abc”);

最佳答案

方法存储在对象数据区域(如类定义所示),但 block 本地引用存储在 JVM 堆栈帧的特殊区域中。当帧从执行线程的帧堆栈中弹出时,所有 block 本地引用都会丢失,因为它们实际上并未存储在对象的数据结构中。

请注意,如果您不熟悉 JVM 堆栈帧,则在进入每个方法时都会获得一个新的堆栈帧,并在从方法返回时从线程堆栈中弹出。堆栈帧包含许多元素,包括指向当前指令(位于类的指令页中)的指针、指向“this”对象的指针,以及用于保存当前方法计算中的中间体的小堆栈。有时,变量引用不需要任何存储,许多优化编译器将编译代码以使用本地堆栈而不是“对象引用存储”,这意味着逆向代码将导致根本无法发现该人使用了变量。

“this”指针始终占据对象引用存储区域的第一个条目,所有这些概念都是概念性的。实际的实现只需要符合操作标准,不需要符合特定的内存布局。

关于java - 在 Java VM 中,如何处理对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5344369/

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