logo头像
Snippet 博客主题

聊聊逃逸分析

本文于 452 天之前发表,文中内容可能已经过时。

逃逸分析

Java对象一般都是在堆中分配内存,但是也不一定,jvm做了一些优化,将一些对象通过逃逸分析,直接在栈上分配.也就少了内存拷贝,加快了jvm的运行速度.直接上代码

public class EscapeAnalysisTest {

    public static void main(String[] args) {
        long curtime = System.currentTimeMillis();
        for (int i = 0; i < 10000000; i++) {
            byte[] b = new byte[2];
        }
        System.out.println((System.currentTimeMillis()-curtime) + "ms");
    }

}

开启逃逸分析

-Xmx10m -Xms10m -Xlog:gc -XX:+DoEscapeAnalysis
[0.017s][info][gc] Using G1
[0.042s][info][gc] Periodic GC disabled
[0.155s][info][gc] GC(0) Pause Young (Normal) (G1 Evacuation Pause) 4M->1M(10M) 3.230ms
[0.169s][info][gc] GC(1) Pause Young (Normal) (G1 Evacuation Pause) 3M->1M(10M) 2.557ms
12ms

共耗时12ms

关闭逃逸分析

-Xmx10m -Xms10m -Xlog:gc -XX:-DoEscapeAnalysis
[0.015s][info][gc] Using G1
[0.038s][info][gc] Periodic GC disabled
[0.143s][info][gc] GC(0) Pause Young (Normal) (G1 Evacuation Pause) 4M->1M(10M) 2.461ms
[0.147s][info][gc] GC(1) Pause Young (Normal) (G1 Evacuation Pause) 3M->1M(10M) 2.036ms
[0.149s][info][gc] GC(2) Pause Young (Normal) (G1 Evacuation Pause) 3M->1M(10M) 0.732ms
[0.150s][info][gc] GC(3) Pause Young (Normal) (G1 Evacuation Pause) 4M->1M(10M) 0.651ms
[0.151s][info][gc] GC(4) Pause Young (Normal) (G1 Evacuation Pause) 4M->1M(10M) 0.500ms
[0.153s][info][gc] GC(5) Pause Young (Normal) (G1 Evacuation Pause) 5M->1M(10M) 0.666ms
[0.154s][info][gc] GC(6) Pause Young (Normal) (G1 Evacuation Pause) 5M->1M(10M) 0.476ms
[0.156s][info][gc] GC(7) Pause Young (Normal) (G1 Evacuation Pause) 6M->1M(10M) 0.664ms
[0.158s][info][gc] GC(8) Pause Young (Normal) (G1 Evacuation Pause) 6M->1M(10M) 0.491ms
[0.159s][info][gc] GC(9) Pause Young (Normal) (G1 Evacuation Pause) 6M->1M(10M) 0.493ms
[0.160s][info][gc] GC(10) Pause Young (Normal) (G1 Evacuation Pause) 6M->1M(10M) 0.475ms
[0.162s][info][gc] GC(11) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.433ms
[0.164s][info][gc] GC(12) Pause Young (Normal) (G1 Evacuation Pause) 6M->1M(10M) 0.447ms
[0.165s][info][gc] GC(13) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.466ms
[0.167s][info][gc] GC(14) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.412ms
[0.168s][info][gc] GC(15) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.462ms
[0.169s][info][gc] GC(16) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.527ms
[0.171s][info][gc] GC(17) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.512ms
[0.173s][info][gc] GC(18) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.456ms
[0.174s][info][gc] GC(19) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.445ms
[0.176s][info][gc] GC(20) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.469ms
[0.177s][info][gc] GC(21) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.465ms
[0.179s][info][gc] GC(22) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.471ms
[0.180s][info][gc] GC(23) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.415ms
[0.182s][info][gc] GC(24) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.389ms
[0.183s][info][gc] GC(25) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.400ms
[0.185s][info][gc] GC(26) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.378ms
[0.186s][info][gc] GC(27) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.373ms
[0.187s][info][gc] GC(28) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.324ms
[0.189s][info][gc] GC(29) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.354ms
[0.190s][info][gc] GC(30) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.391ms
[0.192s][info][gc] GC(31) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.410ms
[0.193s][info][gc] GC(32) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.382ms
[0.195s][info][gc] GC(33) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.325ms
[0.196s][info][gc] GC(34) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.417ms
[0.197s][info][gc] GC(35) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.373ms
[0.199s][info][gc] GC(36) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.418ms
[0.200s][info][gc] GC(37) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.323ms
[0.202s][info][gc] GC(38) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.364ms
[0.203s][info][gc] GC(39) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.396ms
[0.204s][info][gc] GC(40) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.341ms
[0.206s][info][gc] GC(41) Pause Young (Normal) (G1 Evacuation Pause) 7M->1M(10M) 0.370ms
73ms

共耗时73ms,比开启逃逸分析慢了6倍.