Java引用变量管理?

Java引用变量管理?,java,reference,java-ee-6,Java,Reference,Java Ee 6,我想了解Java中引用变量的精确管理。 对他们来说,内存是如何管理的?一个引用变量本身有多少内存,比如说32位或64位操作系统 下面的两个代码呢?基于以上问题,哪一个更好 创建参考变量1并将其指定给新对象(我猜是飞锤模式??) StringBuilder strReference=null; 对于(int i=0;i

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

下面的两个代码呢?基于以上问题,哪一个更好

创建参考变量1并将其指定给新对象(我猜是飞锤模式??)

StringBuilder strReference=null;
对于(int i=0;i<1000000;i++){
strReference=//从某处(比如从DB列表)分配某个对象
//使用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
        }
for(int i=0;i<1000000;i++){
StringBuilder strReference=//从某处(比如从DB列表)分配某个对象
//使用strReference对对象执行某些操作
}

我可以通过profiler查看上面两个代码语句的确切效果吗?

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

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

因此,这不是关于在何处/如何创建引用,而是关于在何处/如何创建引用中的数据

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



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

这两个变量都不好,因为您正在创建存储在内存中的一百万个唯一字符串。根据需要尝试stringBuffer或stringBuilder。是,我现在。。StringBuffer会更好,但我只是想问一下引用变量请检查..这两个代码片段的差异可以忽略不计,为什么要麻烦呢。
        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
        }