比较两个基元的内存位置
Compare memory locations of two primitives
有什么方法可以比较 java 中两个 int
的内存位置?
int x = 25;
int y = 25;
我想检查并证明这两个变量是引用相同的值还是创建了两次。
x == y
上一行比较了文字 values 这不是我想要的。有什么想法吗?
您所要求的是不可能的。
Java 中的原始值就是:原始 值。他们的 "definition" 中没有任何内容与内存位置有关。
javac 编译器会进行常量折叠,当然如果这是您的问题,jit 会在运行时应用各种优化。但是您无法获得关于原始值的 "memory layout"。即使是 *com.misc.Unsafe" 和 VarHandle 也只处理引用类型。
虽然这不可能用代码来完成,但您可以查看代码段生成的字节码。
0: bipush 25
2: istore_1
3: bipush 25
5: istore_2
6: return
看到 bipush
被调用了两次,看来是进行了两次堆栈分配。不过,稍后可以很好地进行优化。
有什么方法可以比较 java 中两个 int
的内存位置?
int x = 25;
int y = 25;
我想检查并证明这两个变量是引用相同的值还是创建了两次。
x == y
上一行比较了文字 values 这不是我想要的。有什么想法吗?
您所要求的是不可能的。
Java 中的原始值就是:原始 值。他们的 "definition" 中没有任何内容与内存位置有关。
javac 编译器会进行常量折叠,当然如果这是您的问题,jit 会在运行时应用各种优化。但是您无法获得关于原始值的 "memory layout"。即使是 *com.misc.Unsafe" 和 VarHandle 也只处理引用类型。
虽然这不可能用代码来完成,但您可以查看代码段生成的字节码。
0: bipush 25
2: istore_1
3: bipush 25
5: istore_2
6: return
看到 bipush
被调用了两次,看来是进行了两次堆栈分配。不过,稍后可以很好地进行优化。