WEB开发网
开发学院软件开发Java 从虚拟机视角谈 Java 应用性能优化 阅读

从虚拟机视角谈 Java 应用性能优化

 2010-07-15 00:00:00 来源:WEB开发网   
核心提示: 清单 1. Java 字节码例/*0x000092c4:0x04a7:*/_SCONST_0,/*0x000092c5:0x04a8:*/_SCONST_0,/*0x000092c6:0x04a9:*/_INVOKESTATIC,HIGH(0x08e8),LOW(0x08e8),/*0x0000

清单 1. Java 字节码例

 /* 0x000092c4:0x04a7: */ _SCONST_0, 
 /* 0x000092c5:0x04a8: */ _SCONST_0, 
 /* 0x000092c6:0x04a9: */ _INVOKESTATIC, HIGH(0x08e8), LOW(0x08e8), 
 /* 0x000092c9:0x04ac: */ _POP, 
 /* 0x000092ca:0x04ad: */ _INVOKESTATIC, HIGH(0x8046), LOW(0x8046), 
 /* 0x000092cd:0x04b0: */ _IFEQ, 84, 
 /* 0x000092cf:0x04b2: */ _INVOKESTATIC, HIGH(0x8044), LOW(0x8044), 
 /* 0x000092d2:0x04b5: */ _GOTO, 79, 
 /* 0x000092d4:0x04b7: */ _ASTORE, 7,  

当程序计数器中值为 0x000092ca:0x04ad,表明下一条即将执行字节码为 _INVOKESTATIC, HIGH(0x8046), LOW(0x8046),该字节码表明将调用某个静态方法。

Java 语言一大好处就是不用关心对于内存的分配和回收,一切由垃圾收集器搞定。然而这并不代表 Java 程序员可以高枕无忧,再高效的收集器也可能因为滥用而导致性能问题。我们已经知道,Java 程序所涉及的空间分配和回收包括:

Java 堆,创建的 Java 对象(包括数组,数组也是一种对象)分配在堆中,垃圾收集对象来释放空间;

Java 栈,栈划分为操作数栈、栈帧数据和局部变量区,方法中分配的局部变量在栈中,同时每一次方法的调用都会在栈中分配栈帧,因此程序员在设计和开发应用时需考虑调用层数。

来看一段字节码在 Java 栈中的执行示例,100 与 98 相加:

清单 2. 整数加法运算的 Java 字节码

 iload_0  // 载入局部变量 0,整型,压入栈中 
 iload_1  // 载入局部变量 1,整型,压入栈中 
 iadd   // 弹出两个整型数,相加,将结果压入栈 
 istore_2 // 弹出整型数,存入局部变量 2 

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:虚拟 视角 Java

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接