Java Runtime Performance Vs Native C / C ++ Code?

Stałem się coraz bardziej komfortowym programistą w Javie niż w C ++ lub C. Mam nadzieję, że uda mi się wyczuć uderzenie wydajności przy użyciu interpretera JVM, w przeciwieństwie do wykonywania tego samego „projektu” natywnie. Zdaję sobie sprawę, że istnieje tutaj pewien poziom subiektywności; jakość programu zależy w dużej mierze od dobrego wdrożenia. Interesuję się następującymi aspektami w ogólnym znaczeniu:

Podczas korzystania z tłumacza musi istnieć jakaś podstawa narzutów. Czy jest jakaś ogólna zasada do zapamiętania? 10% 15%? (Wyciągnąłem te liczby z powietrza) Przeczytałem sporadyczny blog, w którym napisano, że kod Java jest prawie tak szybki jak kod natywny, ale myślę, że mógł być stronniczy.

Czy moduł czyszczenia pamięci JVM wnosi znaczny narzut do wydajności środowiska wykonawczego? Wiem, że aplikacje Cocoa zaczęły używać modelu zbierania śmieci i zgadzam się, że sprawia, że ​​programowanie jest dużo prostsze, ale za jaką cenę?

Jaki jest koszt wykonywania wywołań systemowych z Java? Na przykład utworzenie obiektu Socket w przeciwieństwie do interfejsu API gniazda C.

Wreszcie przypominam sobie, że czytam gdzieś, że implementacja JVM jest pojedynczym wątkiem. Jeśli to prawda (co do tego jestem sceptyczny), czy oznacza to, że wątki Java naprawdę nie są prawdziwymi wątkami? Czy wątek java ogólnie odpowiada wątkowi dostarczanemu przez jądro? Czy aplikacja Java korzysta w taki sam sposób, jak aplikacja natywna z wielu rdzeni / wielu procesorów?

Wszelkie porady od deweloperów, którzy rozumieją zawiłości JVM i wydajności programu Java, będą mile widziane. Dzięki.

questionAnswers(10)

yourAnswerToTheQuestion