赞
踩
对于:
public class TestFinal {
final int a = 20;
}
对应的字节码为:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: aload_0
5: bipush 20
7: putfield #2 // Field a:I
<-- 写屏障
10: return
发现 final 变量的赋值也会通过 putfield 指令来完成,同样在这条指令之后也会加入写屏障(保证在该屏障之前的,对共享变量的改动,都同步到主存当中),保证在其它线程读到它的值时不会出现为 0 的情况
IDEA安装ASM Bytecode Outline 插件:
安装后重启IDEA
我们随便写一段代码:
对应字节码文件:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。