- JVM變得更快(在某些方面)與各主要版本
- 模塊化的9將帶來更快的啓動時間。
爲了加速Maven構建,我已經下載了jdk9-ea
並發現它需要更長的時間。而且,感覺Maven開始之前會有更長的延遲。
我試圖用粗略的估計JVM啓動時間下面的代碼
public class Sampler {
public static void main(String[] args) throws IOException, InterruptedException {
long t = System.currentTimeMillis();
if (args.length == 0 || args[0].startsWith("-")) {
sample(30, args);
} else {
long t0 = Long.parseLong(args[0]);
System.out.println(t - t0);
}
}
static void sample(int n, String[] options) throws IOException, InterruptedException {
File samples = new File("samples.txt");
for (int i = 0; i < n; i++) {
String javaPath = String.join(
System.getProperty("file.separator"),
System.getProperty("java.home"),
"bin",
"java");
List<String> command = new ArrayList<String>();
command.add(javaPath);
command.addAll(Arrays.asList(options));
command.add("Sampler");
command.add(Long.toString(System.currentTimeMillis()));
ProcessBuilder processBuilder = new ProcessBuilder(command)
.inheritIO()
.redirectOutput(ProcessBuilder.Redirect.appendTo(samples));
Process process = processBuilder.start();
process.waitFor();
}
prettyPrint(samples);
samples.delete();
}
...
}
它開始與Java 9
>java -version java version "1.8.0_74" Java(TM) SE Runtime Environment (build 1.8.0_74-b02) Java HotSpot(TM) Client VM (build 25.74-b02, mixed mode, sharing) >javac Sampler.java && java Sampler n=30 units=milisec min=124 max=205 mean=143 median=132 >java -version java version "9-ea" Java(TM) SE Runtime Environment (build 9-ea+111) Java HotSpot(TM) Client VM (build 9-ea+111, mixed mode) >javac Sampler.java && java Sampler n=30 units=milisec min=279 max=387 mean=301 median=294 >javac Sampler.java && java Sampler -XX:+UseParallelGC n=30 units=milisec min=279 max=382 mean=297 median=292 >java -version java version "1.8.0_76-ea" Java(TM) SE Runtime Environment (build 1.8.0_76-ea-b04) Java HotSpot(TM) Client VM (build 25.76-b04, mixed mode, sharing) >javac Sampler.java && java Sampler n=30 units=milisec min=123 max=227 mean=159 median=141 >java Sampler -XX:+UseG1GC n=99 units=milisec min=188 max=340 mean=213 median=199
注花費兩倍的時間:本來我用服務器虛擬機(x64),相同的2倍差距,Java9啓動時間約爲0.6秒。
後java -Xshare:dump
>java -version java version "9-ea" Java(TM) SE Runtime Environment (build 9-ea+111) Java HotSpot(TM) Client VM (build 9-ea+111, mixed mode, sharing) >javac Sampler.java && java Sampler n=50 units=milisec min=228 max=422 mean=269 median=269 >javac Sampler.java && java Sampler -Xshare:on <error messages> n=44 units=milisec min=227 max=392 mean=247 median=238 >javac Sampler.java && java Sampler -Xshare:off n=50 units=milisec min=280 max=513 mean=315 median=288 >javac Sampler.java && java Sampler -Xshare:auto n=50 units=milisec min=228 max=361 mean=283 median=285
在Java 8 EA
>java -Xshare:off Sampler n=99 units=milisec min=124 max=264 mean=150 median=136
錯誤消息:
An error has occurred while processing the shared archive file. Unable to map ReadOnly shared space at required address. Error occurred during initialization of VM Unable to use shared archive.
44成功啓動總分50是最高的NUM我可以得到。 最低的是 - 13.
你真的專注於VM啓動時間,Maven編譯時間或JVM速度嗎?你似乎使用所有這些術語,就像它們是相同的,但它們不是。 – eis
正如標題所暗示的,我專注於啓動時間。其他「術語」並不意味着被用作平等的,但肯定是相互關聯的。 Maven是一個衆所周知的程序的例子,其中啓動時間在整個執行時間中佔有相當大的份額。在我的理解中,啓動_is_是VM性能(速度)的一個重要特徵,而mvn build是VM性能的實際應用。不知道這是否比我最初悲傷,但在這裏更清楚。 – user2418306
Maven肯定還沒有寫在Java 9中。 JVM速度通常指執行速度 - 取決於您可以選擇的服務器/客戶端模式,如果您想強調啓動時間或JVM速度以及哪種內存特性。 – eis