Article View: pl.comp.lang.java
Article #154049Re: Prędkość Java kontra C#
From: Arivald
Date: Wed, 16 Jul 2014 09:26
Date: Wed, 16 Jul 2014 09:26
61 lines
4067 bytes
4067 bytes
On 2014-07-16 09:06, Borneq wrote: > W dniu 2014-07-15 20:02, Borneq pisze: >> Widać kolosalną różnicę, czyżby Java inliniowało funkcje? Natomiast C# >> ma pewnie jakiś narzut w wykonaniu > > Nie wiem, czy chodzi o narzut, bo w Delphi jest 1140, zmiana na inline: > 413, dalsza zmiana na inline wołającej: 408 > w trybie release Delphi: 376, inline 63, cała inline 69 (nawet gorzej) > inc_ jako assembler: podobnie jak inline > Natomiast C++ debug: 5050 a release 70 > Tak BTW, C++-ów jest jak mrówków, mają różna optymalizacje. Zresztą już samo "release" C++ w jednym kompilatorze może się diametralnie różnić, zależnie od włączonych optymalizacji. Taki prosty przypadek jak podałeś mógł być zoptymalizowany przez rozwinięcie pętli, i równoległą artmetykę przy użyciu SSE. Ogólnie porównywanie prędkości rożnych języków w tak prostych przypadkach daje dziwne wyniki, z powodów różnych optymalizacji i różnych obowiązkowych narzutów. Np w Delphi masz spory narzut na tworzenie obiektu, po pierwsze w alokacji (np obowiązkowa VTABLE), kiedy w C++ jest możliwe że obiekt alokuje tylko jeden bajt, zresztą go nie używając, bo alokacja jest tylko żeby obiekt posiadał unikalny adres. Przy wywołaniach procedur największy narzut jest najczęściej na ramkę stosu i inicjalizację zmiennych na stosie (jeśli dany język inicjalizuje, np C++ tego nie robi, Delphi też nie). I tu C++ pokazuje swoją siłę, ponieważ po inline metody nie ma wywołania metody, ergo nie ma ramki i całego narzutu. Za to Delphi, jeśli tylko używasz w metodzie stringa, rekordu, interfejsu lub obsługi wyjątków, automatycznie dodaje do funkcji kod finalizujący zmienne i obsługujący wyjątki, dlatego narzut może być spory. Co do Javy: "czyżby Java inliniowało funkcje" - tak i nie. Kompilator Javy nie robi tego. Ale maszyna wirtualna Javy, w trakcie kompilacji bytecodu to natywnego, ma prawo sobie tak zoptymalizować. Zresztą optymalizacje JVM są dużo bardziej zaawansowane. Np. JVM często obserwują działającą aplikację, i optymalizują niektóre ścieżki na podstawie częstotliwości ich wykonania. Dlatego w niektórych serwerach aplikacyjnych Javy jest coś takiego jak "warming up", czyli serwer przez jakiś czas po restarcie nie obsługuje żądań, tylko wykonuje fragmenty kodu dając czas JVM na zauważenie że są istotne, i zoptymalizowanie działania. Java jest dość wrażliwa na alokację obiektów, ale nie tylko chodzi o samą alokację, co o garbage collector - jego cykle czyszczenia potrafią całkiem mocno spowolnić aplikację. W aktualnych maszynach GC został mocno zoptymalizowany, tak że nie jest to już aż taki problem. C# nie znam, nie wiem co mogło wpłynąć na akurat takie wyniki. -- Arivald
Technical Details
Message-ID:
<lq5gfi$np8$1@news.dialog.net.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!news.dialog.net.pl!not-for-mailReferences:
<lpv1t6$363$1@node2.news.atman.pl> <lpv236$363$2@node2.news.atman.pl> <lq002d$3i7$1@news.dialog.net.pl> <lq01a6$u1c$1@node2.news.atman.pl> <lq3p5v$iff$1@node2.news.atman.pl> <lq3qb3$jl6$1@node2.news.atman.pl> <lq58ak$tbh$1@node2.news.atman.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!news.dialog.net.pl!not-for-mail From: Arivald <NOSPAMarivald@interia.pl> Newsgroups: pl.comp.lang.java Subject: Re: Prędkość Java kontra C# Date: Wed, 16 Jul 2014 11:26:11 +0200 Organization: Dialog Net Lines: 62 Message-ID: <lq5gfi$np8$1@news.dialog.net.pl> References: <lpv1t6$363$1@node2.news.atman.pl> <lpv236$363$2@node2.news.atman.pl> <lq002d$3i7$1@news.dialog.net.pl> <lq01a6$u1c$1@node2.news.atman.pl> <lq3p5v$iff$1@node2.news.atman.pl> <lq3qb3$jl6$1@node2.news.atman.pl> <lq58ak$tbh$1@node2.news.atman.pl> NNTP-Posting-Host: dynamic-78-8-97-109.ssp.dialog.net.pl Mime-Version: 1.0 X-Trace: news.dialog.net.pl 1405502770 24360 78.8.97.109 (16 Jul 2014 09:26:10 GMT) X-Complaints-To: abuse@dialog.net.pl NNTP-Posting-Date: Wed, 16 Jul 2014 09:26:10 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.0 In-Reply-To: <lq58ak$tbh$1@node2.news.atman.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit