认识JIT编译器
发布日期:2021-05-09 09:33:57 浏览次数:20 分类:博客文章

本文共 10208 字,大约阅读时间需要 34 分钟。

JVM��������� 

������������������������JIT���������,,���������������JVM������������������,JIT���������������������������������.

java���������������������

���������������������������������.java������������������������.class������,������������������������������������������,���������������������������������������.class������,������������������������.���������������JVM���.class������������������������,������������������������������.���������������

JIT���������������

������������JAVA������������JIT���������������������������.���������������������������������.class������������������������������������������������������?���������������������.class���������,������������������������.class���������������������������,���������������������,������������������������������������,������������������������������������,���������������������for���������,���������������������������������������������������������.���������������������������.���������������������������������������������.���������������������

������������

���������������������������������������������?������������������������������������������������������������������.

1������������������������

2���������������������������.

������������,������������������������������������������������.������������������������������������������������������������,������������������������������������,���������������������������,���������������������.

���������������������������������

������������������������������������.

1���������������������������
������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
2������������������������������
������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
���������������������������������������������������������������������������������������������������������������������������������

HotSpot������������������������������

���HotSpot���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
���������������������������������������������������������JIT��������� 

���������������������

������������������������������������������������������������������������JVM client���������������������1500������Server���10000������������������������������������ -XX���
CompileThreshold���������������JVM���������������������������������������������������������������������������������������

���������������

������������������������������������������������������������������������������������������������������������������������������������������������

JIT������������

JIT���������������������������������������,������������������������������������������,���������������������������

1���������������������������

������������������������������������������������������������������������������������������������������������������������������E������������������������������������������������������E���������������������������������������������������E���������������������������������
���������������������������������������������������������������������������������������������������������������������������������������������E���������������
���������������������������������������������������������������������������������������������Local Common Subexpression Elimination���������������������������������������������������������������������������������������������������Global Common
Subexpression Elimination������������������������������������������������������������������������������������
int d = (c*b)*12+a+(a+b*c); 
������������������������Javac���������������������������������������������������������������������������������������Java��������������������������������� 
iload_2 // b
imul // ������b*c
bipush 12 // ������12
imul // ������(c*b)*12
iload_1 // a
iadd // ������(c*b)*12+a
iload_1 // a
iload_2 // b
iload_3 // c
imul // ������b*c
iadd // ������a+b*c
iadd // ������(c*b)*12+a+(a+b*c)
istore 4 
������������������������������������������������������������������������������������������������������cb���������bc������������������������������������������������b���c������������������������������������������������������������������ 
int d = E*12+a+(a+E);
���������������������������������������������������������������������������������������������������������������������������������������������Algebraic Simplification��������������������������� 
int d = E*13+a*2; 
������������������������������������������������������������������������������

2������������

������������������������,������������������������������������������,���������Method������,���������������������������,���������������������������������.���������

���������������������������������,������������������������������������������������������������,���������������.���������JIT���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������JVM������������������������������������������������������������������������������������������������ 

������������������������ 
private int add4(int x1��� int x2��� int x3��� int x4) {
������return add2(x1��� x2) + add2(x3��� x4);
}
private int add2(int x1��� int x2) {
������return x1 + x2;
���������������������������������������JVM������add2��������������������������������������������� 
private int add4(int x1��� int x2��� int x3��� int x4) {
������return x1 + x2 + x3 + x4;

������������

������������(Escape Analysis)���������Java������������������������������������������������������������������������Java������������������������������������������������������������������������������������������������������������Java Hotspot������
���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
���������������������
������������������������
���������������������
������������������������
������������:������������������������������������������������������������������
public class EscapeAnalysis {������//������������������public static Object object;������public void globalVariableEscape(){//������������������������������object = new Object();������}������public Object methodEscape(){ //���������������������������������return new Object();}������public void instancePassEscape(){ //������������������������������������this.speak(this);������}������public void speak(EscapeAnalysis escapeAnalysis){������������System.out.println("Escape Hello");������}}
View Code
������������JIT������������������������������������������

1 ������������������������

������������������������������������������������������������������������������������������������������������������JIT���������������������������������������������������������������������������JIT���������������������������������������������������������������������
���������������������������������������������������������������������������������������������
public class Test {    public static void main(String[] args) {        for (int i = 0; i < 1000000; i++) {            alloc();        }        // ���������������������������������������������������sleep        try {            Thread.sleep(1000000);        } catch (InterruptedException e1) {            e1.printStackTrace();        }    }    private static void alloc() {        User user = new User();    }    static class User {    }}
View Code

���jdk 1.7������������������������������������.������������������������100W���User������,������������������������10W���,���������������������������������.

������������������������������.idea������������������,���������������������,���������������������,������100W���,������������������100W������������������������.

-Xmx4G -Xms4G -XX:-DoEscapeAnalysis -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError

2 ������������

���������������������������������������������JAVA������������������������������������������int���long���������������������������reference������������������������������������������������������������������������������������������������������������JAVA���������������������������������������������������.������������������.���JIT������������������������������������������������������������������������������������������������JIT������������������������������������������������������������������������������������������������

3 ���������������

���������������������,���������StringBuffer���,������������������������������������,���������������������������������������.������������������������������������������.JIT������������������������,������StringBuffer������������������������������,������������������������������,������������������������������������������������.

public class Test {    public static String getString(String s1, String s2) {        StringBuffer sb = new StringBuffer();        sb.append(s1);        sb.append(s2);        return sb.toString();    }    public static void main(String[] args) {        long tsStart = System.currentTimeMillis();        for (int i = 0; i < 10000000; i++) {            getString("TestLockEliminate ", "Suffix");        }        System.out.println("���������������" + (System.currentTimeMillis() - tsStart) + " ms");    }}
View Code

���������������������������������������������������������������

 

 ���������������������������������������,���������������������������������������������������

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

上一篇:java的注解
下一篇:Maven中A项目依赖于B项目B项目install后A项目package报错问题

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月23日 07时22分18秒