gpt4 book ai didi

Java引用变量管理?

转载 作者:行者123 更新时间:2023-12-01 13:09:18 24 4
gpt4 key购买 nike

我想了解Java中引用变量的精确管理。他们的内存是如何管理的?对于 32 位或 64 位操作系统,引用变量本身占用多少内存。

下面的两个代码怎么样?根据上述问题哪个会更好

创建引用变量一并将其分配给新对象(我猜是享元模式??)。

    StringBuilder strReference = null; 
for(int i = 0;i < 1000000; i ++) {
strReference = // assiging some object from somewhere say from DB list
// doing some operation on object with strReference
}

现在每次都创建引用变量

        for(int i = 0;i < 1000000; i ++) {
StringBuilder strReference = // assiging some object from somewhere say from DB list
// doing some operation on object with strReference
}

我可以通过分析器查看以上两条代码语句的确切效果吗?

最佳答案

Java 规范并未强制规定引用的确切大小(您可以查看强制规定的内容 here )。这个大小完全取决于Java虚拟机的实现,因此在某些系统中它可以是32位,在其他系统中可以是64位。

关于示例代码,两者对于 JVM 来说完全相同(尽管如此,请参见脚注 #1)。请记住,在函数内部创建的变量的空间保留在 Stack 中。因此,在进入函数之前,JVM 将为该变量 (strReference) 腾出空间。来源:here .

因此,这不是关于您在哪里/如何创建引用文献的问题,而是关于您在哪里/如何创建引用文献中的数据的问题。

如果您想了解更多信息,请尝试编译代码,然后使用 javap 查看生成的字节码。这样您就可以看到实现是否真的发生了变化。

<小时/>

脚注#1:每个方法中的前 4 个变量/参数/this 在字节码内都有特殊的管理,因此如果您在代码中尽早声明引用,在这种情况下可能会有所不同。这种差异与字节码的大小和速度有关,因为前 4 个变量具有特殊的“操作码”。

关于Java引用变量管理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23019260/

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