[Javalist] StringBuilder találós kérdés

Gábor Garami gabor.garami at hron.me
2014. Jún. 4., Sze, 13:56:37 CEST


Hat maga megbolondult, hat maga megbolondult, hogy mindent ketszer
mond, hogy mindent ketszer mond?
Garami Gábor
E-mail: gabor.garami at hron.me
Tel: +36 20 235 9621
MSN: hrgy at vipmail.hu
Skype: hron84


2014-06-04 13:27 GMT+02:00 Peter Verhas <peter at verhas.com>:
> Bele kell nézni a generált kódba. Fordítónként változik. Az az egyetlen
> válasz, hogy miből mit generál. Vita nincs, az van, ami a bájtkódban van.
> Javap -v
>
> A javac nem optimalizál. Majd a JIT.
>
> Vannak post opimalizálók, amik a lefordított kódot valamennyire
> optimalizálják, de. Azok is inkább a nem használt osztályokat és metódusokat
> veszik ki feltételezve, hogy nem hívja őket senki reflectiönnel. Ha valakit
> érdekel, akkor a yworks oldalain talál ilyesmit. Engem nem érintett ilyesmi,
> ezért. Nem foglalkoztam ilyen termékekkel.
>
> Péter
>
>
>
> On Wed, Jun 4, 2014 at 1:26 PM, Peter Verhas <peter.verhas at gmail.com> wrote:
>>
>> Bele kell nézni a generált kódba. Fordítónként változik. Az az egyetlen
>> válasz, hogy miből mit generál. Vita nincs, az van, ami a bájtkódban van.
>> Javap -v
>>
>> A javac nem optimalizál. Majd a JIT.
>>
>> Vannak post opimalizálók, amik a lefordított kódot valamennyire
>> optimalizálják, de. Azok is inkább a nem használt osztályokat és metódusokat
>> veszik ki feltételezve, hogy nem hívja őket senki reflectiönnel. Ha valakit
>> érdekel, akkor a yworks oldalain talál ilyesmit. Engem nem érintett ilyesmi,
>> ezért. Nem foglalkoztam ilyen termékekkel.
>>
>> Péter
>>
>>
>> On Wed, Jun 4, 2014 at 10:12 AM, Laszlo Hornyak <laszlo.hornyak at gmail.com>
>> wrote:
>>>
>>> Hali!
>>>
>>> Nagyon elméleti kérdés lesz... Vegyük például ezt a példa kódot
>>>
>>> public static String makeLongString(int a, int b) {
>>>   return "foo: "+a+" bar:"+b;
>>> }
>>>
>>> Ez ugyanarra fordul le, mintha a kicsit bőbeszédűbb StringBuilder-es
>>> kódot írtam volna le:
>>>
>>> public static String makeLongString(int a, int b) {
>>>   return new StringBuilder().append("foo: ").append(a).append("
>>> bar:").append(b);
>>> }
>>>
>>> Ez egész jónak tűnik, de egy apróság hiányzik. Ha átpasszolná a
>>> StringBuilder-nek, hogy mekkora buffer-re lesz szüksége, akkor kód nyerhetne
>>> egy kicsit azon, hogy a StringBuilder-nek nem kell újraallokálnia a
>>> bufferét.
>>> Például a fenti példá kódra azt mondhatná a compiler, hogy van két
>>> string, azok együtt 10 karakter, plusz az int maximum 12 karaketeren fér ki,
>>> akkor az összesen 34 karakter, így megúsznánk több újraallokációt is, ha az
>>> alábbi módon előre lefoglalná a buffert:
>>>
>>> public static String makeLongString(int a, int b) {
>>>   return new StringBuilder(34).append("foo: ").append(a).append("
>>> bar:").append(b);
>>> }
>>>
>>> A kérdés az, hogy bárki tud-e róla miért nem ezt csinálja a javac?
>>>
>>> Köszi!
>>>
>>>
>>> --
>>>
>>> EOF
>>
>>
>
>
> _______________________________________________
> Javalist mailing list
> Javalist at lists.javaforum.hu
> http://lists.javaforum.hu/mailman/listinfo/javalist
>


További információk a(z) Javalist levelezőlistáról