🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.java
Article #154038

Re: Prędkość Java kontra C#

#154038
From: Arivald
Date: Mon, 14 Jul 2014 07:15
57 lines
3412 bytes
On 2014-07-14 00:43, Borneq wrote:
> W dniu 2014-07-14 00:40, Borneq pisze:
>> Czy mi się zdaje, że program w Javie jest dużo szybciej wykonywany niż w
>> C#? Tu pełne zaskoczenie. Kod w Javie szybszy był od Delphi, mimo że był
>> bardziej skomplikowany. Natomiast kod w C# to to samo co w Javie a dużo
>> wolniej.
>
> Czy C# miałby kompilację debug i release ? Java nie ma, w np. w C++ jest
> ogromna różnica prędkości.

W C++ ta ogromna różnica prędkości nie płynie z istnienia bądź nie 
informacji do debugowania w kodzie. Różnica płynie z włączonych 
optymalizacji kodu. A generalnie nie włącza się optymalizacji przy 
debugowaniu, ponieważ po ich włączeniu spora cześć kodu przestaje 
istnieć, inne partie są za to powtarzane wielokrotnie (aka "loop 
unwinding").
Szczególnego kopa dają metody "inline", czyli takie metody których ciała 
kompilator wstawia w miejscach wywołań, zamiast wywołań. Po typowych 
kilkunastu poziomach inlineowania, kod STLa zupełnie nie przypomina 
źródła ;-) Na tej optymalizacji opiera się wiele technik użytych w STLu, 
np traity, alokatory, czy klasy-tagi.


Java też ma tryb debugowania, ale AFAIK prawie nikt nie używa. Np. 
"assert" działa jak Delphiowe Assert(), i tak samo jego wykonanie można 
wyłączyć w trakcie kompilacji.

Inną metoda na "dubug-only code" w Javie, już popularnie używaną, jest 
takie konstruowanie wyrażeń, że w określonych warunkach część kodu nie 
jest kompilowana.
Typowe zastosowanie: wyłączenie logowania.

Po pierwsze, gdzieś deklarujesz zmienną "final static boolean DEBUG = 
true" (nazwa dowolna)

i potem w kodzie

if (DEBUG) Log.l(....);

I teraz jak przestawisz DEBUG na false, to kompilator zauważy że 
"Log.l(....)" się nigdy nie wykona, i go nie wkompiluje.


Także narzędzia do budowania potrafią tu pomóc. Np Gradle pozwala na 
różne "buildType", z czego domyślnie są dwa, "debug" i "release". A 
"buildType" ma wpływ na wiele rzeczy, między innymi można automatycznie 
zmieniać część kodu źródłowego, np zmieniać DEBUG = true w buildzie 
"debug", i DEBUG = false w buildzie "release".


A C#, dlaczego dużo wolniejszy? Stawiam raczej że coś źle 
skonfigurowałeś. Albo dany kod, algorytm, akurat nie pasuje do języka, 
zmuszając go do nieoptymalnego zachowania.


-- 
Arivald
Technical Details
Message-ID: <lq002d$3i7$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!news.nask.pl!news.nask.org.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail
References: <lpv1t6$363$1@node2.news.atman.pl> <lpv236$363$2@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!news.nask.pl!news.nask.org.pl!newsfeed.pionier.net.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: Mon, 14 Jul 2014 09:15:30 +0200
Organization: Dialog Net
Lines: 60
Message-ID: <lq002d$3i7$1@news.dialog.net.pl>
References: <lpv1t6$363$1@node2.news.atman.pl> <lpv236$363$2@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 1405322125 3655 78.8.97.109 (14 Jul 2014 07:15:25 GMT)
X-Complaints-To: abuse@dialog.net.pl
NNTP-Posting-Date: Mon, 14 Jul 2014 07:15:25 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.0
In-Reply-To: <lpv236$363$2@node2.news.atman.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit