Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java Bytecode Vertical Tasting

Java Bytecode Vertical Tasting

Javaのバイトコードを垂直試飲する

punchdrunker

January 17, 2020
Tweet

More Decks by punchdrunker

Other Decks in Programming

Transcript

  1. Java Bytecode

    Vertical Tasting

    View Slide

  2. 7FSUJDBM5BTUJOHਨ௚ࢼҿͱ͸
    ಉ͡໏ฑͷϫΠϯΛ೥౓ҧ͍Ͱࢼҿ͢Δख๏
    ೥౓͝ͱͷಛ௃Λ೺ѲͰ͖Δ
    ϙςϯγϟϧͱมԽΛ֬ೝ͢Δࣄ͕Ͱ͖Δ
    ࠓճ͸ޙ൒ͷσϞͰ೥౓ҧ͍ͷKBWBDΛ࣮ߦ
    ͠ɺग़དྷ্͕ͬͨDMBTTϑΝΠϧͷಛ௃΍มԽ
    ΛςΠεςΟϯά͍ͨ͠ͱࢥ͍·͢ɻ

    View Slide

  3. ຊ೔ఏڙυϦϯΫͷ঺հ
    4VOTFU$FMMBSTϫΠϯछ ന੺
    1BVM(JSBVEͿͲ͏δϡʔε ඍ୸ࢎ

    ʮΤϯδχΞ͚ͩͲถࠃͰϫΠφϦʔΛങͬͨ࿩ʯ
    ͷϫΠφϦʔͰ͢
    ίχϟοΫੜ࢈ऀ͕ຖ೥࡞Δ
    ͿͲ͏ՌोͷδϡʔεͰ͢
    ͓ञͰ͸͋Γ·ͤΜ

    View Slide

  4. ,PUMJO$POGࢀՃ
    w ϫʔΫγϣοϓࢀՃ
    w ͋·Γ"OESPJEΆ͘ͳ͍ηογϣϯΛݟΔ
    w ϏʔϧΛҿΈʹߦ͘
    w ಉ͡ళʹଞͷࢀՃऀ΍+BLF΋͍ͨ

    View Slide

  5. ͜ͷτʔΫͷ໨త
    ͠͹Β͘ಡΉͷΛޙճ͠ʹ͍ͯͨ͠+BLF8IBSUPOͷ࠷ۙͷ
    CMPH΍ࠓճͷ࿩ΛҰؾʹಡΜͰΈͯɺͱͯ΋໘ന͔ͬͨͰ
    ͢ɻ
    IUUQTKBLFXIBSUPODPNCMPH
    ͨͩɺॳ৺ऀ΍+BWBͷ஌͕ࣝແ͍ͱ͔ͳΓͱ͖ͬͭʹ͍͘಺
    ༰ͳͷͰɺཧղʹඞཁͱͳΔલఏ஌ࣝͳͲΛͳΔ΂͘Θ͔Γ
    ΍͘͢આ໌͠·͢ɻ

    View Slide

  6. ໘ന͔ͬͨτʔΫ
    w 5IFTIVUUMFDBTF4UFQIFO$BSWFS
    w LFZOPUFΞʔΧΠϒಈը I
    ͷ࠷ॳͷηογϣϯ
    w εϖʔεγϟτϧͷࣄނͱൃలͷྺ࢙Λ঺հ
    w "TZODISPOPVT%BUB4USFBNTXJUI,PUMJO'MPXCZ3PNBO&MJ[BSPW
    w ਤղ͕Θ͔Γ΍͍͢$PSPVUJOFͷ࿩
    w ,PUMJO3VOT5BYFTJO/PSXBZCZ+BSMF)BOTFO"OEFST.JLLFMTFO
    w ϊϧ΢Σʔͷࠃ੫γεςϜΛ,PUMJOY4QSJOH#PPUͰӡ༻ͯ͠Δ࿩

    View Slide

  7. ࠓճ঺հ͢Δͷ͸

    View Slide

  8. Ͱ΋౰೔ݟ·ͤΜͰͨ͠
    w ࠷ۙͷ+BWBͷ࿩ΛΩϟονΞοϓ͍ͯ͠ͳ͔ͬͨ
    w ࣮ࡍʹ৮ͬͨ͜ͱͷ͋Δ࠷৽ͷ+BWB͸
    w ͦ΋ͦ΋࠷৽ͷ"OESPJEͰ΋+BWB·Ͱ͔͠࢖͑ͳ͍
    w ࠷ۙͷঢ়گͱ͔Λௐ΂͔ͯΒษڧ͠Α͏ͱࢥͬͨ

    View Slide

  9. ઌʹ+BLFͷ݁࿦Λ·ͱΊΔͱ
    +BWBͷ৽͍͠ػೳ΍7.ͷਐԽ͸,PUMJOʹ΋Ըܙ͕͋ΔɻͳͥͳΒͦΕΒ͸LPUMJOD͔
    Β΋ར༻Մೳ͔ͩΒɻ
    OVMMഇࢭͷಈ͖͸ͳͦ͞͏ͩΑɻڊେͳܕγεςϜʹͱͬͯ͸OVMMͷԸܙ΋͋Δ͔Β
    Ͷɻ
    ,PUMJOʹ͸ϚΠάϨʔγϣϯͱ͔ࣗಈͰग़དྷͪΌ͏͍͢͝*%&͕͋Δ͠ɺͦΕ͸+BWB
    ʹ͸ग़དྷͳ͔ͬͨࣄͩͶɻ
    NVMUJQMBUGPSNͷ໘Ͱ΋,PUMJO͸͔ͳΓΠέͯΔ͠ɺ,PUMJO΋࢖ΘΕଓ͚Δͱࢥ͏Αɻ
    ೥ޙ΋Ҿ͖ଓ͖KBWBͱLPUMJO͸੾᛭ୖຏ͍ͯ͠Δͱࢥ͏ɻ

    View Slide

  10. View Slide

  11. ݁࿦ͷഎܠ ਪଌؚΉ

    +BWB͸ϦϦʔεαΠΫϧ΋มԽͯ͠ͲΜͲΜਐԽͯ͠ɺ͜
    ͷϖʔεͩͱ೥ޙʹ͸$PSPVUJOF૬౰ͷ΋ͷ΋ϦϦʔε
    ͞ΕΔݟࠐΈɻ 1SPKFDU-PPNͱ͔

    ͦ͏ͳΔͱ,PUMJOͬͯଘࡏҙٛͲͷ͘Β͍ͳͷ ͱ͍͍͏
    ໰͍ʹର͢ΔΞϯαʔηογϣϯ͕ࠓճͷ͓୊Ͱ͢ɻ

    View Slide

  12. എܠΛཧղ͢ΔͨΊͷॏཁͳτϐοΫ
    w +BWBϦϦʔεαΠΫϧ
    w "OESPJEͰಈ͘+BWBͬͯ
    w +BLF8IBSUPO#MPHͷ%3TFSJFT ೥݄͘Β͍͔Βͷ࿈࡞

    w %ʹΑΔEFTVHBS
    w +BWBͷ৽ػೳ͍Ζ͍Ζ
    w +BWBͷόΠτίʔυΛ஌Δ
    w KBWBDKBWBQͭͷίϚϯυ͕࢖͑Ε͹େৎ෉ େৎ෉͡Όͳ͍

    View Slide

  13. +BWBͷۙگ
    w ࠷৽όʔδϣϯ͸
    w +BWB͸0SBDMF͕ॴ༗
    w େମ+BWBͷ్த͘Β͍Ͱ4VO͕0SBDMFʹങऩ͞ΕͯΔ
    w େࡶ೺ʹݴ͏ͱ0QFO+%,ͱͦΕʹ঎༻ػೳΛ௥Ճͨ͠0SBDMF+%,͕͋Δ
    w +BWB͋ͨΓ͔Β৽͍͠ϦϦʔεαΠΫϧʹͳͬͨ
    w ΊͬͪΌ৽ػೳ͕௥Ճ͞Ε͍ͯͬͯΔ

    View Slide

  14. 8JLJQFEJBΑΓ

    View Slide

  15. 8JLJQFEJBΑΓ

    View Slide

  16. "OESPJEͱ+BWB
    w "OESPJE"1*Ҏ߱͸+BWBͷຆͲͷػೳΛ࢖͑Δ
    w "OESPJE"1*͸+BWB͔͠ಈ͔ͳ͍
    w NJO4EL7FSTJPO͕ҎԼͩͱ+BWBͷόΠτίʔυ͕ඞཁ
    w ͘Θ͘͠͸ެࣜͰˠ+BWBݴޠػೳͷ࢖༻
    w IUUQTEFWFMPQFSBOESPJEDPNTUVEJPXSJUFKBWBTVQQPSU

    View Slide

  17. Ͱ΋+BWBͰ։ൃͰ͖ͯΔ͚Ͳ

    View Slide

  18. ͦΕɺ%FTVHBS͞Εͯ·͢

    View Slide

  19. EFTVHBS

    View Slide

  20. EFTVHBS

    View Slide

  21. class Java8 {

    interface Logger {

    void log(String s);

    }

    public static void main(String!!... args) {

    sayHi(s !-> System.out.println(s));

    }

    private static void sayHi(Logger logger) {

    logger.log("Hello!");

    }

    }

    DMBTTDPVOU
    .FUIPEDPVOU
    ͨͱ͑͹MBNCEB͸

    View Slide

  22. ͜͏ͳΔ
    +BWBͰ΋
    ಈ͖ͦ͏
    class Java8 {

    interface Logger {

    void log(String s);

    }

    public static void main(String!!... args) {

    sayHi(Java8$1.INSTANCE);

    }

    static void lambda$main$0(String s) {

    System.out.println(s);

    }

    private static void sayHi(Logger logger) {

    logger.log("Hello!");

    }

    }

    class Java8$1 implements Java8.Logger {

    static final Java8$1 INSTANCE = new Java8$1();

    @Override public void log(String s) {

    Java8.lambda$main$0(s);

    }

    }

    View Slide

  23. class Java8 {

    interface Logger {

    void log(String s);

    }

    public static void main(String!!... args) {

    sayHi(Java8$1.INSTANCE);

    }

    static void lambda$main$0(String s) {

    System.out.println(s);

    }

    private static void sayHi(Logger logger) {

    logger.log("Hello!");

    }

    }

    class Java8$1 implements Java8.Logger {

    static final Java8$1 INSTANCE = new Java8$1();

    @Override public void log(String s) {

    Java8.lambda$main$0(s);

    }

    }

    Ͱ΋
    ͍Ζ͍Ζ૿͑ͯΔ
    $MBTTDPVOU
    .FUIPEDPVOU

    View Slide

  24. ϝιου਺͕૿͑Δͱ
    MULTIDEX

    View Slide

  25. MBNCEB͸Ͳ͜ʹߦͬͨͷ
    NJO4EL7FSTJPOʹ͢Ε͹
    /BUJWF-BNCEBΛ࢖͑ΔΆ͍Ͱ͢ɻ
    ૣͯ͘೥ޙ͘Β͍ େମ+BWBͷ࣌ظ

    View Slide

  26. +BWB·Ͱͷ৽ػೳ·ͱΊ
    w +BWB
    w MBNCEB
    w NFUIPESFGFSFODF
    w TUBUJDBOEEFGBVMUNFUIPETJOJOUFSGBDFT
    w +BWB
    w $PODJTF5SZ8JUI3FTPVSDFT
    w "OPOZNPVT%JBNPOE
    w 1SJWBUF*OUFSGBDF.FUIPET
    w TUSJOHDPODBUXJUIPVU4USJOH#VJMEFS
    w +BWB
    w 7BSGPSMPDBMWBSJBCMF XIFOUIFUZQFDBOCFJOGFSSFE

    w +BWB
    w WBSPOMBNCEBWBSJBCMFT
    w /FTUNBUFT
    w KBWB
    w TXJUDIFYQSFTTJPOT OPU੍ޚจ

    w KBWB
    w NVMUJMJOFTUSJOH USJQMFRVPUFT

    View Slide

  27. +BWBҎ߱༧ఆ͍ͯ͠Δ৽ػೳ
    w KBWB
    w SFDPSET EFTUSVDUVSJOH

    w TFBMFEJOUFSGBDF
    w UZQFNBUDIJOH
    w QBUUFSONBUDIJOHPGJOTUBODF
    w KBWB
    w MPDBMGVODUJPO
    w 7JSUVBM5ISFBET -PPN

    w KBWB
    w JOMJOFDMBTT

    View Slide

  28. ͔͜͜Β͕ຊ୊

    View Slide

  29. +BWBͱ+BWBͰϏϧυͯ͠Έ·͢
    public class Outer {

    private String name = "Jake";

    class Inner {

    String sayHi() {

    return "Hi " + name + "!";

    }

    }

    }

    w

    View Slide

  30. ࢖͏ίϚϯυ
    w YYE
    w όΠφϦΛਐ਺Ͱදࣔͯ͘͠ΕΔίϚϯυ
    w KBWBD
    w +BWBͷίʔυΛίϯύΠϧͯ͘͠ΕΔίϚϯυ
    w KBWBQ
    w ίϯύΠϧͨ͠੒Ռ෺ΛٯΞηϯϒϧͯ͘͠ΕΔίϚϯυ

    View Slide

  31. +BWB

    View Slide

  32. +BWB

    View Slide

  33. ,PUMJO

    View Slide

  34. ࠓճ֬ೝͰ͖ͨ఺
    w *OOFSDMBTT͔ΒQSJWBUFpFME΁ΞΫηεͨ࣌͠ʹൃੜ͢Δ߹੒ΞΫηα͕
    ࣗಈੜ੒͞ΕΔ ϝιου͕૿͑ͯ͠·͏
    ໰୊͕ղফ͞Εͨ /FTUNBUFT

    w จࣈྻ࿈͕݁಺෦తʹ͸4USJOH#VJMEFSͷBQQFOEͰ͸ͳ͘ɺίΞϥΠϒϥ
    Ϧͷ໋ྩͰॲཧ͞ΕΔΑ͏ʹͳͬͨɻ
    w ,PUMJOͰॻ͍ͯ΋ੜ੒͞ΕΔόΠτίʔυ͸มΘΒͳ͍

    View Slide

  35. ·ͱΊ
    w ,PUMJO͸4UZMJTI4IJOZ͕ͩɺੜ੒͞ΕΔCZUFDPEF͸ࠜຊతʹ͸+BWBͰ
    ॻ͍ͯ΋Ұॹͷ΋ͷ͕ग़དྷΔɻ
    w ,PUMJO΋+BWBͱڞʹ੒௕͍ͯ͘͠ɻ
    w "OESPJEͰ+BWB΍͕ಈ͘Α͏ʹͳͬͨͱͯ͠΋͠͹Β͘͸ैདྷͷ
    "OESPJE +BWBPS
    ͱޓ׵ੑΛอͭҝʹEFTVHBS͠ଓ͚Δඞཁ͕͋Δɻ
    w ΑΓྑ͍όΠτίʔυͰΞϓϦΛ഑৴͢ΔͨΊʹ͸௕͍͕͔͔࣌ؒΔ
    w ͍͢͝ൃ໌ͰҰؾʹϏϧυपΓͷվળ͕Ճ଎͢ΔࣄΛظ଴ ଞྗຊئ

    View Slide

  36. View Slide