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

Peter Verhas peter at verhas.com
2014. Jún. 4., Sze, 13:27:11 CEST


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
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: <http://lists.javaforum.hu/pipermail/javalist/attachments/20140604/3f6ca9eb/attachment.html>


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