在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ JVM逃逸分析

JVM逃逸分析

最近學(xué)習(xí)JVM時(shí),開啟逃逸分析棧上分配對(duì)象優(yōu)化,在實(shí)踐中發(fā)現(xiàn)并沒有任何效果!!

開啟逃逸分析,JVM參數(shù):

-server -verbose:gc -XX:+DoEscapeAnalysis  

不開啟就是去掉后面的-XX:+DoEscapeAnalysis參數(shù)

主要代碼

package com.cjt;

public class Test {

  private static class Foo {
    private int x;
    private static int counter;

    public Foo() {
      x = (++counter);
    }
  }

  public static void main(String[] args) {
    long start = System.nanoTime();
    for (int i = 0; i < 1000 * 1000 * 10; ++i) {
      Foo foo = new Foo();
    }
    long end = System.nanoTime();
    System.out.println("Time cost is " + (end - start));
  }

}

最終結(jié)果是,無論上述JVM參數(shù)如何設(shè)置,JVM gc不變,沒有出現(xiàn)網(wǎng)上那種“棧上分配對(duì)象,堆上gc不會(huì)發(fā)生”現(xiàn)象。gc日志如下:

[GC 30464K->616K(116800K), 0.0014522 secs]
[GC 31080K->568K(116800K), 0.0010129 secs]
[GC 31032K->600K(116800K), 0.0008023 secs]
[GC 31064K->552K(147264K), 0.0014494 secs]
Time cost is 57097349

不知是哪里出現(xiàn)問題,我也設(shè)置過-Xmx調(diào)整堆大小,沒有作用。不太清楚網(wǎng)絡(luò)上的文章都經(jīng)過實(shí)踐沒有!

望知情大佬解決,感謝!

回答
編輯回答
爛人

已經(jīng)解決,是由于開發(fā)工具的debug模式有影響。

1:逃逸分析JDK1.6及以后版本默認(rèn)開啟;

2:可以自定義一個(gè)循環(huán)創(chuàng)建對(duì)象的方法,不設(shè)置任何參數(shù)run啟動(dòng)是debug啟動(dòng)循環(huán)方法耗時(shí)的10倍左右

我也不太清楚為什么會(huì)出現(xiàn)這種情況,猜測(cè)java逃逸分析在debug模式是禁用的,有知情人可以講解下,謝謝。

2017年9月17日 18:50
編輯回答
墻頭草

說明你分配的對(duì)象還未達(dá)到重新分配的要求,你可以將 最Xms設(shè)置小點(diǎn)

2017年8月27日 05:39