一 点睛
1 JVM 编译器默认采用的是混合模式。
2 解释器
bytecode inteperter
3 JIT
Just in-Time compiler,相对于编译成 exe。
4 混合模式
a 混合使用解释器+热点代码编译
b 起始阶段采用解释执行
c 热点代码检测
多次被调用的方法(方法计数器:检测方法执行频率)
多次被调用的循环(循环计数器:检测循环执行频率)
5 编译选项
-Xmixed:默认为混合模式,开始解释执行,启动速度较快,对热点代码实行检测和编译
-Xint:使用纯解释模式,启动很快,执行稍慢
-Xcomp:使用纯编译模式,执行很快,启动很慢
-XX:CompileThreadhold = 10000 :检测热点代码阀值
二 代码
package jvm;
import org.apache.commons.lang.StringUtils;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class T009_WayToRun {
public static void main(String[] args) {
for (int i = 0; i < 101000; i++) {
getDigestResult("SHA-256","SHA-256");
getDigestResult("SHA-rewrewreeeeeeeeeeeeeeee1","SHA-512");
}
// 开始计时
long start = System.currentTimeMillis();
int u = 0;
for (int i = 0; i < 240000; i++) {
getDigestResult("SHA-256","SHA-256");
getDigestResult("SHA-rewrewreeeeeeeeeeeeeeee1","SHA-512");
}
// 结束计时
long end = System.currentTimeMillis();
System.out.println(end - start);
}
// 测试代码
public static String getDigestResult(String inputStr,String hashAlgorithm) {
MessageDigest messageDigest;
String reslutStr = null;
// 获得某种摘要,例如hashAlgorithm可取为SHA-512
try {
// Oracle's JVM supports MD2, MD5, SHA-1, SHA-256, SHA-384, and SHA-512
// 返回实现指定摘要算法的MessageDigest对象。
messageDigest = MessageDigest.getInstance(hashAlgorithm);
// inputStr不能为空
if(StringUtils.isNotEmpty(inputStr)){
// 使用指定的字节更新摘要。
messageDigest.update(inputStr.getBytes("UTF-8"));
// 将bytes数组转换为BigInterger类型。1,表示 +,即正数。
BigInteger bigInteger = new BigInteger(1,messageDigest.digest());
reslutStr = bigInteger.toString(16);
}else {
System.out.println("getDigestResult function param inputstr is null");
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return reslutStr;
}
}
三 测试
1 混合编译
2260
2 纯解释
无限长,不出结果
3 纯编译
3404