我们知道,有些人说Java的JIT比C++更快。我有一些想法,可以利用JIT在运行时删除一些指令。
以下是我尝试的示例代码:
以下是我尝试的示例代码:
/**
* Created by kadirbasol on 4/6/14.
*/
public class RemoveJump {
public final boolean test;
private static RemoveJump instance = new RemoveJump();
public static final RemoveJump getInstance() {
return instance;
}
private RemoveJump() {
//set the test on the constructor once and
//remove this if statement forever from testLoop
test = false;
}
public final long getData() {
return 1000000000;
}
public final void testLoop() {
long l = System.currentTimeMillis();
int ppp = 0;
long count = System.currentTimeMillis();
final long data = getData();
//this loop should be removed from function because
//RemoveJump set test to false and modified testLoop function
for (int i = 0; i < data ; i++) {
if(test) {
ppp++;
}
if(test) {
ppp++;
}
if(test) {
ppp++;
}
if(test) {
ppp++;
}
if(test) {
ppp++;
}
}
long lastTime = System.currentTimeMillis() - l;
System.out.println(lastTime);
System.out.println(ppp);
}
public static void main(String[] args) {
RemoveJump.getInstance().testLoop();
}
}
代码中有5个if语句。 是否可以在函数中删除这5个检查if语句? 构造函数将设置最终的布尔变量并删除跳转。 构造函数将修改testLoop函数。
但是我尝试的代码没有效果。 JIT不会修改代码吗? 为什么? 如果不行,我们能否在构造函数中修改JVM函数? 我听说过http://asm.ow2.org,这是一个用于生成或修改JVM的asm java库。