Compiler bei Lambda Funktionen / Stream API sehr langsam #320

Closed
opened 2024-04-10 18:12:51 +00:00 by i21023 · 2 comments
Collaborator

Schon bei relativ simplen Aufrufen der Stream API compliliert das Programm nicht mehr in einer akzeptablen Zeit.

Beispiel

//Bar.jav
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.lang.String;
import java.util.stream.Stream;
import java.util.function.Predicate;
import java.lang.Integer;

class Bar{
    public bar(){

        List<Integer> i = new ArrayList<>(List.of(1,2,3,4,5,6,7,8,9,10));

        Optional<Integer> tmp = i.stream().filter(x -> x == 5).map(x -> x*2).findFirst();  

        return tmp;
    }
}

Auf meinem Rechner (i5-12400f) habe ich den Compiler nach etwa 10 Minuten abgebrochen, daher weiß ich leider nicht, ob das Programm terminiert wäre. Aber mit den aktuellen Compilezeiten können StreamAPI/Lambda Ausdrücke nicht wirklich verwendet werden.

Zumindest bei meinem Test scheint der Compiler auch nur einen Kern verwendet zu haben. Zumindest interpretiere ich so die Ausgabe des GUI time Befehls

real    9m24,229s
user    9m56,665s
sys     0m4,481s
Schon bei relativ simplen Aufrufen der Stream API compliliert das Programm nicht mehr in einer akzeptablen Zeit. ### Beispiel ```java //Bar.jav import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.lang.String; import java.util.stream.Stream; import java.util.function.Predicate; import java.lang.Integer; class Bar{ public bar(){ List<Integer> i = new ArrayList<>(List.of(1,2,3,4,5,6,7,8,9,10)); Optional<Integer> tmp = i.stream().filter(x -> x == 5).map(x -> x*2).findFirst(); return tmp; } } ``` Auf meinem Rechner (i5-12400f) habe ich den Compiler nach etwa 10 Minuten abgebrochen, daher weiß ich leider nicht, ob das Programm terminiert wäre. Aber mit den aktuellen Compilezeiten können StreamAPI/Lambda Ausdrücke nicht wirklich verwendet werden. Zumindest bei meinem Test scheint der Compiler auch nur einen Kern verwendet zu haben. Zumindest interpretiere ich so die Ausgabe des GUI time Befehls ``` real 9m24,229s user 9m56,665s sys 0m4,481s ```
Owner

Ich glaube für die Lambdas werden zu viele Constraints generiert, hier könnte man sicher noch die Typinferenz optimieren.

Ich glaube für die Lambdas werden zu viele Constraints generiert, hier könnte man sicher noch die Typinferenz optimieren.
dholle added the
invalid
works for me
labels 2024-04-12 12:28:48 +00:00
Owner

Zur Dokumentation: java.util.function.Function war nicht importiert. Die Typinferenz sollte sowas eigentlich erkennen, tut sie aber momentan nicht.

Zur Dokumentation: `java.util.function.Function` war nicht importiert. Die Typinferenz sollte sowas eigentlich erkennen, tut sie aber momentan nicht.
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: JavaTX/JavaCompilerCore#320
No description provided.