JVM 编译器

一 点睛

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

你可能感兴趣的:(JVM,jvm)