Escape analysis in Java

前端 未结 3 817
闹比i
闹比i 2020-12-01 00:41

As far as I know the JVM uses escape analysis for some performance optimisations like lock coarsening and lock elision. I\'m interested if there is a possibility for the JVM

3条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-01 01:22

    I don't think it does escape analysis for stack allocation. example:

    public class EscapeAnalysis {
    
        private static class Foo {
            private int x;
            private static int counter;
    
            public Foo() {
                x = (++counter);
            }
        }
        public static void main(String[] args) {
            System.out.println("start");
            for (int i = 0; i < 10000000; ++i) {
                Foo foo = new Foo();
            }
    
            System.out.println(Foo.counter);
        }
    }
    

    with -server -verbose:gc -XX+DoEscapeAnalysis:

    start
    [GC 3072K->285K(32640K), 0.0065187 secs]
    [GC 3357K->285K(35712K), 0.0053043 secs]
    [GC 6429K->301K(35712K), 0.0030797 secs]
    [GC 6445K->285K(41856K), 0.0033648 secs]
    [GC 12573K->285K(41856K), 0.0050432 secs]
    [GC 12573K->301K(53952K), 0.0043682 secs]
    [GC 24877K->277K(53952K), 0.0031890 secs]
    [GC 24853K->277K(78528K), 0.0005293 secs]
    [GC 49365K->277K(78592K), 0.0006699 secs]
    10000000
    

    Allegedly JDK 7 supports stack allocation.

提交回复
热议问题