Kann ein JIT von Generics profitieren?

8

Es ist bekannt, dass generische Typen den Kompilierungsvorgang nicht überleben. Sie werden durch Klassencasts ersetzt.

Aber trotzdem ist die Typinformation in der Klassendatei vorhanden und kann durch Reflexion gesehen werden:

%Vor%

Bei der Ausführung wird java.lang.String gedruckt.

Kann ein JIT dies für eine Art von Optimierung nutzen? Oder ist diese Information aus Sicht des JIT nutzlos?

    
yankee 27.07.2011, 09:04
quelle

2 Antworten

3

Es könnte, aber so weit ich weiß, tut es nicht. Um dies zu umgehen, hat Scala vor einiger Zeit die Unterstützung für die Typ-Spezialisierung generischen Code, der spezialisierte Versionen der Klasse erzeugt - ohne irgendwelche Umwandlungen - und diese transparent in den Rest der Codebasis legt, so dass der Code immer noch wie erwartet funktioniert. In diesen Fällen kann der kompilierte Scala-Code tatsächlich merklich schneller sein als Java, da Java mit Generics immer Umwandlungen verwendet.

    
Esko 27.07.2011, 09:51
quelle
2

Es ist der JVM nicht möglich, das Objekt nicht zu werfen, da die zugrunde liegende Sammlung möglicherweise keine Strings hat. z.B. Wenn Löschen verwendet wird, um der Liste eine Ganzzahl hinzuzufügen.

Ich kann mir keine mögliche Optimierung vorstellen, und es gibt viele potenzielle Optimierungen, die das JIT nicht leistet. ;)

    
Peter Lawrey 27.07.2011 09:43
quelle

Tags und Links