Czy to po prostu zaśmieca kod na coś, co tak czy inaczej JIT zajmie się automatycznie?Czy adnotacja @inline w Scali naprawdę pomaga w osiągnięciu wydajności?
58
A
Odpowiedz
53
Muszę jeszcze znaleźć przypadek, w którym poprawia wydajność, a próbowałem w kilku różnych miejscach. JVM wydaje się być całkiem dobry w zakładaniu, kiedy jest to możliwe, i nawet jeśli pytasz o @line w Scali, nie zawsze może to zrobić (i czasami zauważyłem, że nawet wtedy, gdy myślę, że powinien być w stanie).
W miejscu, gdzie można oczekiwać, aby zobaczyć różnicę kodu bajtowego jest coś takiego:
object InlineExample {
final class C(val i: Int) {
@inline def t2 = i*2
@inline def t4 = t2*2
}
final class D(val i: Int) {
def t2 = i*2
def t4 = t2*2
}
}
gdy skompilowany z -optimise
. I widzisz różnicę, ale generalnie nie działa ona szybciej, ponieważ kompilator JIT może zauważyć, że te same optymalizacje mają zastosowanie do D
.
Warto więc wypróbować ostatnie etapy optymalizacji, ale nie zawracałbym sobie głowy rutynowym sprawdzaniem, czy nie ma to wpływu na wydajność.
Powiązane problemy
- 1. Czy sortowanie pomaga w wydajności grep w Perl
- 2. W jaki sposób kompilator JIT pomaga w wydajności aplikacji?
- 3. Czy zajęcia abstrakcyjne w Scali naprawdę działają lepiej niż cechy?
- 4. Subclass.fetchRequest() Swift 3.0, rozszerzenie naprawdę nie pomaga w 100%?
- 5. Czy time.sleep pomaga procesorowi?
- 6. Czy const pomaga optymalizatorowi? C++
- 7. Czy projekt Lombok działa dobrze w Scali?
- 8. Czy w IDEA znajduje się adnotacja @NonNullByDefault?
- 9. Czy normalizacja naprawdę szkodzi wydajności w witrynach o wysokim natężeniu ruchu?
- 10. Czy uczenie się jednej Lisp pomaga w uczeniu się drugiej?
- 11. Czy spinlocki naprawdę potrzebują DMB?
- 12. Czy umowy na kody naprawdę pomagają w testowaniu jednostek?
- 13. Czy istnieje wersja NavalableMap w Scali?
- 14. Czy w Scali jest jakiś silnik gry?
- 15. Czy zakres może być dopasowany w Scali?
- 16. Czy naprawdę używane są strumienie w ocaml?
- 17. Czy CultureInfo.CurrentCulture jest naprawdę potrzebne w String.Format()?
- 18. Czy mogę przestać używać "inline" w ogóle?
- 19. pomaga zrozumieć makro
- 20. Czy istnieje adnotacja weryfikatora uuid?
- 21. Hibernate pomaga Wyjątek: TransientObjectException
- 22. Jak wydrukować mapę w Scali
- 23. Zamiennik regex inline w perlu
- 24. Algorytm Kadane'a w Scali
- 25. funkcja inline w c
- 26. Parametry "Spread" w Scali?
- 27. Relacje równości w Scali
- 28. Dystrybucja Scali w klastrze?
- 29. Powtarzanie listy w Scali
- 30. Drukowanie tablicy w Scali
Dzięki za zgłoszenie wyników testu; uratowałeś mnie i pewnie jeszcze jakiś czas :) –
Twoja argumentacja jest prawdziwa tylko wtedy, gdy na planecie był tylko jeden kompilator JIT. - Ale to nie jest prawda. Jest Android, jest IBM, który produkuje własne JVM. Więc wszystko, co kompilator Scala robi * na pewno * jest lepsze niż coś, co może zrobić jakiś JIT *. – Martin
@Martin - Przyznaję, że nie próbowałem Androida. Próbowałem JRockit i IBM JVM z takim samym skutkiem jak Sun JVM (tj. Brak). –