Der folgende Code scheint die Escape-Analyse einwandfrei auszulösen (getestet durch Hinzufügen von -verbose:gc< /code> und Ausführen des Codes mit und ohne -XX:-DoEscapeAnalysis Läufe ohne EA drucken GC-Aktivität, während Läufe mit EA dies nicht tun)
Code: Select all
public static int mapSum_boxed(){
record TestObject(int i){};
return IntStream.range(0, 1_000_000_000)
.boxed()
.map(x-> new TestObject(1))
.mapToInt(x-> x.i())
.sum();
}
Code: Select all
public static void main(String[] args) {
System.out.println(mapSum_boxed());
}
Code: Select all
> Task :org.example.Main.main()
[0.002s][info][gc] Using G1
1000000000
Code: Select all
public static int mapSum_boxed(){
record TestObject(int i){};
return IntStream.range(0, 1_000_000_000)
.boxed()
.map(x-> 1) // new TestObject(1))
.mapToInt(x-> x.i())
.sum();
}
Code: Select all
> Task :org.example.Main.main()
[0.002s][info][gc] Using G1
[0.053s][info][gc] GC(0) Pause Young (Normal) (G1 Evacuation Pause) 23M->2M(246M) 1.398ms
[0.117s][info][gc] GC(1) Pause Young (Normal) (G1 Evacuation Pause) 120M->2M(246M) 0.965ms
.... // many many more lines of GC
[6.530s][info][gc] GC(123) Pause Young (Normal) (G1 Evacuation Pause) 258M->2M(428M) 0.724ms
1000000000