深入Java编程:Java的字节代码 - 编程入门网
ava.lang.String)>
11 aload_2
12 invokevirtual #10 <Method java.lang.StringBuffer append(java.lang.String) >
15 invokevirtual #13 <Method java.lang.String toString()>
18 areturn
Method void concat (java.lang.StringBuffer, java.lang.String)
0 aload_1
1 aload_2
2 invokevirtual #10 <Method java.lang.StringBuffer append(java.lang.String)>
5 pop
6 return
第一个concat方法有五个方法调用: new,invokestatic,invokespecial和两个invokevirtual 。这比第二个cacat 方法多了好多些工作,而第二个cacat只有一个简单的invokevirtual调用。 String类的一个特点是其实例一旦创建,是不能改变的,除非重新给它赋值。在 我们学习Java编程时,就被告知对于字符串连接来说,使用StringBuffer比使用 String更有效率。使用javap分析这点可以清楚地看到它们的区别。如果你怀疑两 种不同语言架构在性能上是否相同时,就应该使用javap分析字节代码。不同的 Java编译器,其产生优化字节代码的方式也不同,利用javap也可以清楚地看到它 们的区别。以下是JBuilder产生字节代码的分析结果:
可以看到经过JBuilder的优化,第一个concat方法有三 个方法调用:两个invokestatic invokevirtual 。这还是没有第二个concat方 法简洁。 不管怎样,熟悉即时编译器(JIT, Just-in-time)。因为当某个 方法被第一次调用时,即时编译器将对该虚拟方法表中所指向的字节代码进行编 译,编译完后表中的指针将指向编译生成的机器码,这样即时编译器将字节代码 重新编译成本机代码,它可以使你进行更多javap分析没有揭示的代码优化。除非 你拥有虚拟机的源代码,你应当用性能基准来进行字节代码分析。 深入Java编程:Java的字节代码(5)时间:2011-09-04 comprg.com.cn2.防止 应用程序中的错误 以下的例子说明如何通过检测字节代码来帮助防止应用 程序中的错误。首先创建两个公共类,它们必须存放在两个不同的文件中。
如果运行 EternallyConstant类,应该得到如下信息: EternallyConstant beginning execution. 现在我们修改ChangeALot文件,将debug和log变量 的值都设置为true。只重新编译ChangeALot文件,再运行EternallyConstant,输 出结果如下:
在调试模式下怎么了?即使设置deb |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |