-
121. Data: 2011-08-24 10:37:08
Temat: Re: jaki wybrac jezyk?
Od: Edek <e...@g...com>
On 08/24/2011 11:45 AM, Michoo wrote:
> W dniu 18.08.2011 02:42, m...@t...pl pisze:
>> Java używa wszędzie new, nie można położyć statycznego obiektu na stosie.
>> Mocno rozrzuca dane po przestrzeni adresowej. Słabo działa cache, a sama
>> alokacja trochę czasu też zajmuje.
> Java wymaga słowa kluczowego new. Afaik kompilator w sytuacji gdy widzi,
> że zmienna nie wychodzi z zakresu umieszcza ją na stosie.
>
Z ciekawości, a kiedy widzi? Bo samo to, że w jednej metodzie referencja
ginie niestety jeszcze nie znaczy, że nie ucieka.
-
122. Data: 2011-08-24 11:45:21
Temat: Re: jaki wybrac jezyk?
Od: Michoo <m...@v...pl>
W dniu 24.08.2011 12:37, Edek pisze:
> On 08/24/2011 11:45 AM, Michoo wrote:
>> Java wymaga słowa kluczowego new. Afaik kompilator w sytuacji gdy widzi,
>> że zmienna nie wychodzi z zakresu umieszcza ją na stosie.
>>
>
> Z ciekawości, a kiedy widzi? Bo samo to, że w jednej metodzie referencja
> ginie niestety jeszcze nie znaczy, że nie ucieka.
>
Zmienne lokalne.
--
Pozdrawiam
Michoo
-
123. Data: 2011-08-24 11:55:23
Temat: Re: jaki wybrac jezyk?
Od: Maciej Sobczak <s...@g...com>
On 24 Sie, 11:45, Michoo <m...@v...pl> wrote:
> Java wymaga s owa kluczowego new. Afaik kompilator w sytuacji gdy widzi,
> e zmienna nie wychodzi z zakresu umieszcza j na stosie.
Jaka zmienna? int? Tego nie trzeba przydzielać przez new, to się od
razu robi na stosie.
A jeżeli to nie jest int (i nie jest to rekord składający się z samych
intów), to w środku w konstruktorze ma pierdylion następnych newów,
których już się tak nie zoptymalizuje. Czyli na pierdylion+1 newów
optymalizacja pozwala pominąć ten 1.
Pisząc "int" mam oczywiście na myśli każdy inny fundamentalny typ.
Czy ktoś kiedyś zmierzył ile ta optymalizacja faktycznie wnosi?
Tak na poważnie, to ja poproszę o String, który się mieści na stosie.
Ten jeden przypadek chyba byłby najbardziej cenny, bo w sumie
stringami operuje się najczęściej.
--
Maciej Sobczak * http://www.msobczak.com * http://www.inspirel.com
-
124. Data: 2011-08-24 11:56:29
Temat: Re: jaki wybrac jezyk?
Od: "Stachu 'Dozzie' K." <d...@g...eat.some.screws.spammer.invalid>
On 2011-08-24, Michoo <m...@v...pl> wrote:
> W dniu 24.08.2011 12:37, Edek pisze:
>> On 08/24/2011 11:45 AM, Michoo wrote:
>>> Java wymaga słowa kluczowego new. Afaik kompilator w sytuacji gdy widzi,
>>> że zmienna nie wychodzi z zakresu umieszcza ją na stosie.
>>>
>>
>> Z ciekawości, a kiedy widzi? Bo samo to, że w jednej metodzie referencja
>> ginie niestety jeszcze nie znaczy, że nie ucieka.
>>
> Zmienne lokalne.
I wierzysz że lokalność referencji do obiektu powoduje, że obiekt
stworzony za pomocą new jest odkładany na stosie? Bo to mi nie wygląda
na wiedzę, tylko na wiarę.
--
Secunia non olet.
Stanislaw Klekot
-
125. Data: 2011-08-24 12:09:28
Temat: Re: jaki wybrac jezyk?
Od: Paweł Kierski <n...@p...net>
W dniu 2011-08-24 13:55, Maciej Sobczak pisze:
> On 24 Sie, 11:45, Michoo<m...@v...pl> wrote:
>
>> Java wymaga s owa kluczowego new. Afaik kompilator w sytuacji gdy widzi,
>> e zmienna nie wychodzi z zakresu umieszcza j na stosie.
>
> Jaka zmienna? int? Tego nie trzeba przydzielać przez new, to się od
> razu robi na stosie.
> A jeżeli to nie jest int (i nie jest to rekord składający się z samych
> intów), to w środku w konstruktorze ma pierdylion następnych newów,
> których już się tak nie zoptymalizuje. Czyli na pierdylion+1 newów
> optymalizacja pozwala pominąć ten 1.
>
> Pisząc "int" mam oczywiście na myśli każdy inny fundamentalny typ.
W C# ładnie to rozróżniają pozwalając definiować typy wartościowe
(struct) od referencyjnych (class). Wiadomo, że lokalna zmienna struct
może być na pewno na stosie - ewentualnie i tak będzie kopia lub
pakowanie w typ referencyjny.
> Czy ktoś kiedyś zmierzył ile ta optymalizacja faktycznie wnosi?
>
> Tak na poważnie, to ja poproszę o String, który się mieści na stosie.
> Ten jeden przypadek chyba byłby najbardziej cenny, bo w sumie
> stringami operuje się najczęściej.
Dobry alokator, który można dostroić do potrzeb też by pomógł. Zazwyczaj
operuje się napisami w jakiś zakresach długości. Niestety czasem jest to
1 do 7 znaków, czasem 42 do 107 znaków, a czasem 1 do 7 oraz 42 do 107.
--
Paweł Kierski
n...@p...net
-
126. Data: 2011-08-24 12:58:25
Temat: Re: jaki wybrac jezyk?
Od: Edek <e...@g...com>
On 08/24/2011 01:45 PM, Michoo wrote:
> W dniu 24.08.2011 12:37, Edek pisze:
>> On 08/24/2011 11:45 AM, Michoo wrote:
>>> Java wymaga słowa kluczowego new. Afaik kompilator w sytuacji gdy widzi,
>>> że zmienna nie wychodzi z zakresu umieszcza ją na stosie.
>>>
>>
>> Z ciekawości, a kiedy widzi? Bo samo to, że w jednej metodzie referencja
>> ginie niestety jeszcze nie znaczy, że nie ucieka.
>>
> Zmienne lokalne.
>
void doSomething ()
{
o = new MyObject (); // nie nie, nie na stosie
}
bo MyObject () robi Register.register(this) albo
rzuca wyjątek zawierający this.
A jak już się zanalizuje sprawę głębiej, to faktycznie
na stosie mogą być obiekty skompilowane, o których wiadomo,
że nie uciekają. Dotyczy to wszelkiego obchodzenia się z this,
non-static inner classes; jak już obiekt jest na stosie,
to dalsze pytanie jest czy jego pola, jeżeli pochodzą z new
też mogą być na stosie, czy nie. Jeżeli nie, to ta cała
optymalizacja niewiele daje.
No i jest kwestia, jak głęboko sięga to interprocedural,
to było to moje "z ciekawości".
Edek
-
127. Data: 2011-08-24 21:11:25
Temat: Re: jaki wybrac jezyk?
Od: Maciej Sobczak <s...@g...com>
On 24 Sie, 14:09, Paweł Kierski <n...@p...net> wrote:
> W C# ładnie to rozróżniają pozwalając definiować typy wartościowe
> (struct) od referencyjnych (class).
Nie podoba mi się, bo związuje sposób "trzymania" czegoś z typem. Czy
mam robić dwa różne-ale-takie-same typy jeśli raz potrzebuję coś
trzymać przez wartość a innym razem przez referencję?
A może mam robić dwa różne-ale-takie-same typy na wszelki wypadek, bo
a nuż ktoś będzie chciał sobie coś tak zoptymalizować?
> > Tak na poważnie, to ja poproszę o String, który się mieści na stosie.
> > Ten jeden przypadek chyba byłby najbardziej cenny, bo w sumie
> > stringami operuje się najczęściej.
>
> Dobry alokator, który można dostroić do potrzeb też by pomógł.
Właśnie jest problem z tymi alokatorami, bo w sumie wiadomo, że można,
ale w praktyce to dość ciężkawe narzędzie i dlatego mało kto to robi.
Stringi na stosie mogą być out-of-the-box jako właściwość języka.
Wtedy nie potrzeba dla niż *żadnego* alokatora. A jak chcesz to mieć
na stercie, to robisz jawne new.
Inna sprawa, że wtedy takich stringów nie da się łatwo rozciągać
(append), ale skoro w wielu językach stringi są immutable i nikomu to
nie przeszkadza (wtedy istnieje osobna klasa do obsługi rozciągliwych
stringów), to można pójść właśnie w takim kierunku a największą zaletą
jest natychmiastowe i bezproblemowe użycie czegoś, co jest
równocześnie optymalne wydajnościowo.
Dla przykładu, Ada ma takie stringi [*]:
Msg : String := "Hello";
Msg jest w całości na stosie. Wygląda łatwiej, niż konstrukcja ze
strojonym alokatorem.
[*] Pomijam tu fakt, że ta prawdziwa Ada miała raczej pantalony... :-D
--
Maciej Sobczak * http://www.msobczak.com * http://www.inspirel.com
-
128. Data: 2011-08-26 15:37:00
Temat: Re: jaki wybrac jezyk?
Od: m...@t...pl
> Java wymaga słowa kluczowego new. Afaik kompilator w sytuacji gdy widzi,
> że zmienna nie wychodzi z zakresu umieszcza ją na stosie.
Osobiście nie wiem, tylko powtórzyłem. Często słyszałem to jako główny
zarzut wydajnościowy Javy. Jeśli jest jak mówisz to bardzo miło ze strony
kompilatora Javy.
Pozdrawiam
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
-
129. Data: 2011-09-20 23:12:19
Temat: Re: jaki wybrac jezyk?
Od: Edek <e...@g...com>
On 08/18/2011 03:34 PM, Jordan Szubert wrote:
> Dnia 18-08-2011 o 02:42:05 <m...@t...pl> napisał(a):
>
> [...]
>> Nie wiem... dawno nie jestem na bieżąco z nowymi prockami i
>> kompilatorami.
>> Jak pisałem wyżej, bazowałem na eksperymencie - zmiana kodu i pomiar
>> czasu.
>
> chodzi chyba o to, żebyś jeszcze poeksperymentował ze zmianą opcji
> kompilatora i pomiarem czasu.
>
> [...]
... raczej w tym kierunku, co expression templates.
Edek
-
130. Data: 2011-09-23 20:28:47
Temat: Re: jaki wybrac jezyk?
Od: " " <k...@g...pl>
m...@t...pl napisał(a):
> pamięci niż rozmiar danych. Niektóre programy mogą unikać tych krytycznych
> sytuacji i dlatego takie różnice w porównywaniu do C/C++. Program
obliczeniowy
> w Javie który przetwarza wielokrotnie te same dane w pętlach działa bardzo
> szybko. Skąd wiem? Też z pomiarów.
Ja kiedys sporo czasu (sumarycznie z miesiac-dwa) spedzilem w pracy nad
optymalizowaniem dosc krotkiego algorytmu w Java, ktorego dlugi czas
wykonania byl problemem w procesie produkcyjnym (chodzilo o wycene slynnych
CDO, jakby ktos pytal ;-)). Udalo mi sie zbic czas pojedynczej wyceny do 1-2
minut, i uznalem, ze to juz jest niezle, i ze ta Java wcale taka wolna nie
jest.
Potem zobaczylem biblioteke C++, ktora ten sam algorytm, na podobnej klasy
sprzecie, wykonywala w 10-20s.
Well.
KK
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/