Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JVM の仕組みを理解して PHP で実装してみよう
Search
memory
PRO
May 23, 2025
Programming
1
330
JVM の仕組みを理解して PHP で実装してみよう
Nextbeat Tech Bar: Java/JVM祭り
memory
PRO
May 23, 2025
Tweet
Share
More Decks by memory
See All by memory
AI 時代だからこそ学ぶべき PHP の基礎
m3m0r7
PRO
5
1.4k
コードゴルファー道
m3m0r7
PRO
0
450
ChatGPT とつくる PHP で OS 実装
m3m0r7
PRO
3
270
事業観点から見る技術的負債の返済
m3m0r7
PRO
4
1.2k
PHP でアセンブリ言語のように書く技術
m3m0r7
PRO
1
240
PHP でアセンブリっぽく書く技術
m3m0r7
PRO
1
150
How to implement a RubyVM with PHP?
m3m0r7
PRO
3
2.9k
二郎系ラーメンのコールで学ぶ AST 解析
m3m0r7
PRO
8
3k
RubyVM を PHP で実装する 〜Hello World を出力するまで〜
m3m0r7
PRO
1
940
Other Decks in Programming
See All in Programming
r2-image-worker
yusukebe
1
140
フロントエンド開発のためのブラウザ組み込みAI入門
masashi
7
3.7k
CSC509 Lecture 09
javiergs
PRO
0
290
PHPライセンス変更の議論を通じて学ぶOSSライセンスの基礎
matsuo_atsushi
0
120
Webサーバーサイド言語としてのRustについて
kouyuume
1
5.1k
Vue 3.6 時代のリアクティビティ最前線 〜Vapor/alien-signals の実践とパフォーマンス最適化〜
hiranuma
2
410
iOSでSVG画像を扱う
kishikawakatsumi
0
190
SUZURIの規約違反チェックにおけるクリエイタフィードバックの試⾏錯誤/Trial and Error in Creator Feedback for SUZURI's Terms of Service Violation Checks
ae14watanabe
1
130
詳細の決定を遅らせつつ実装を早くする
shimabox
1
910
Pythonに漸進的に型をつける
nealle
1
160
エンジニアに事業やプロダクトを理解してもらうためにやってること
murabayashi
0
140
マイベストのシンプルなデータ基盤の話 - Googleスイートとのつき合い方 / mybest-simple-data-architecture-google-nized
snhryt
0
130
Featured
See All Featured
Become a Pro
speakerdeck
PRO
29
5.6k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
660
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Navigating Team Friction
lara
190
15k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.2k
A Modern Web Designer's Workflow
chriscoyier
697
190k
What's in a price? How to price your products and services
michaelherold
246
12k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
2.9k
Fireside Chat
paigeccino
41
3.7k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Transcript
ΊΓʔ +7.ͷΈΛཧղͯ͠ 1)1Ͱ࣮ͯ͠ΈΑ͏ /FYUCFBU5FDI#BSɿ+BWB+7.ࡇΓ 1
ΊΓʔ NNS ෳͷϕϯνϟʔاۀελʔτ Ξοϓاۀɼ্اۀͰιϑτΣ ΞΤϯδχΞ$50ͱͯ͠׆ಈɻ ීஈ3VCZͱ5ZQF4DSJQUॻ͍ͯ ·͢ɻ 2 NNS NNS
3 NEW!
1)1Ͱ+7.ͷ࣮ !1)1FS,BJHJ 4 1)1Ͱ3VCZ7.ͷ࣮ !3VCZ,BJHJ աڈͷ࡞ʜ
7.ʢ7JSUVBM.BDIJOFʣͷΈ +7.ͷ࣮ํ๏ 1)1Ͱͷ࣮ํ๏ %&.0 5 ͋͐͡Μͩ
ҙࣄ߲ 6
࣮ͷ͢͠͞ͷ؍Ͱ+%,Λڭࡐͱ͠·͢ ίϯύΠϥʹ͍ͭͯ͠·ͤΜ 1)1 +BWBͷॻ͖ํʹ͍ͭͯ͠·ͤΜ +7.4QFDJ fi DBUJPOͷৄ͍͠ಡΈํʹ͍ͭͯ 7 ҙࣄ߲ ͠·ͤΜ
8 ϦϙδτϦͷ͝հ IUUQTHJUIVCDPNQIQKBWBQIQKBWB
ଟ͘ͷਓ͕֤ʑͷ͖ͳݴޠͰ +7.Λ࣮͢Δ͜ͱ͕ྲྀߦΓ·ͨ͠Ͷ ʢલʣ 9
ࠓ--.͋Γɼੲ΄Ͳ࣮ʹ ۤ৺͠ͳ͍ͩΖ͏ͱࢥ͍·͢ɻ ϓϩάϥϛϯάॳ৺ऀͷํઓ͕Ͱ͖Δ ͱͯྑ͍͕࣌౸དྷ͖ͯ͠·ͨ͠ɻ 10
ͷͰͥͻઓͯ͠ΈͯͶʂ 11
7. 7JSUVBM.BDIJOF ʹ͍ͭͯ 12
+7.Λ࣮͢Δʹ͋ͨͬͯ7.ͷཧղඇৗʹॏཁͰ͢ɻ 7.7JSUVBM.BDIJOFͱ͍͍ɼͦͷίϯϐϡʔλͷಈ࡞ΛιϑτΣΞ্Ͱ࠶ݱ ͢ΔͷͰ͢ɻ ྫ͑7JSUVBM#PYͳͲ͕Πϝʔδʹ͍ۙΜ͡Όͳ͍Ͱ͠ΐ͏͔ɻ ͨͩɼ͜ΕΒͷ΄ͱΜͲɼ+7.ͷΑ͏ͳ7.ͱগ͠ҟͳΓ·͢ɻ 13
7. 7JSUVBM.BDIJOF ʹ͍ͭͯ
ҰํͰɼ+7.ʢ+BWB7JSUVBM.BDIJOFʣ;FOE7. 1)1༻ͷ7JSUVBM.BDIJOF ɼ 3VCZ7.ͳͲશ͘ҟͳΓ·͢ɻ ઌ΄ͲͷྫϋʔυΣΞϨϕϧͷͷͰ͕͢ɼ͜ΕΒΞϓϦέʔγϣϯϨϕϧ ͷͷͰ͢ɻ 7.ͱॻ͍͍ͯͯɼ͍͔ͭ͘छྨ͕͋ΔΜͩɼͱ͓΅͓͖͑ͯ·͠ΐ͏ɻ
࣍ʹྫͷਤΛࣔ͠·͢ɻ 14 7. 7JSUVBM.BDIJOF ʹ͍ͭͯ
15 7. 7JSUVBM.BDIJOF ʹ͍ͭͯ macOS VirtualBox (VM) JVM Java ϓϩάϥϜ
JVM Java ϓϩάϥϜ Zend VM PHPϓϩάϥϜ
ͦͯ͠ɼ΄ͱΜͲͷΞϓϦέʔγϣϯϨϕϧͷ7.ελοΫϚγϯʹ͍͔ۙͨͪͰ ࣮ͯ͠͞Ε͍ͯ·͢ʢ%BMWJLͳͲআ͘ʣɻ ͪΖΜ+7.3VCZ7.ελοΫϚγϯͷΑ͏ͳܗͰɼ$16ͷ΄ͱΜͲ ʢYʣϨδελϚγϯͰ͢ɻ ελοΫϚγϯͱɼࢦఆ͞Ε͍͔ͨͭ͘ͷϨδελ্ʹԿ͔Λ֨ೲ͢ΔͷͰͳ ͘ɼσʔλΛελοΫʢੵΈ্͛ʣͳ͕Βɼॲཧ͍ͯ͘͠ํ๏Ͱ͢ɻ
ҰํϨδελϚγϯɼ͋Β͔͡ΊܾΊΒΕͨϨδελͱݺΕΔྖҬʹΛ֨ೲ ͯ͠ܭࢉΛߦ͍ͬͯ͘ͷͰ͢ɻ 16 7. 7JSUVBM.BDIJOF ʹ͍ͭͯ
ϨδελϚγϯͷݩΛ֞ؒݟ͍ͨͷͰ͋ΕɼΞηϯϒϦݴޠΛॻ͍ͯɼ֤$16ʹ ࠷దԽ͞ΕͨܗͰτϥϯεύΠϧ͢Εɼ͋ΔఔཧղͰ͖ΔΜ͡Όͳ͍͔ͳͱࢥ͍ ·͢ɻ ༨ஊͰ͕͢ɼελοΫϚγϯҰ෦ͷϨδελϚγϯͷΈΛऔΓೖΕ͍ͯΔ͜ͱ ͋Γ·͢ɻ 17 7. 7JSUVBM.BDIJOF
ʹ͍ͭͯ
ελοΫϚγϯ ʙ Λٙࣅ໋ྩηοτͰܭࢉ͢Δʙ 18
Λٙࣅ໋ྩηοτͰܭࢉ͢Δ 19 7. 7JSUVBM.BDIJOF ʹ͍ͭͯ constadd (operand: 1)
constadd (operand: 2) constadd (operand: 3) plus plus output - constadd ໋ྩ 1 ͭͷΦϖϥϯυΛऔΓɼͦΕΛελοΫ ʹϓογϡ͢Δ໋ྩ - plus ελοΫ͔Β 2 ͭΛϙοϓ͠ɼͦΕΛՃࢉͨ͠ͷ ΛελοΫʹϓογϡ͢Δ໋ྩ - output ελοΫ͔ΒҰͭϙοϓ͠ग़ྗ͢Δ໋ྩ - ্هͷ 3 ͭͷ໋ྩͰ࣮ݱՄೳͰ͢ɻ͜ͷҰ࿈ͷྲྀΕΛ໋ྩ γʔέϯεͱݴͬͨΓ͠·͢ɻ
Λٙࣅ໋ྩηοτͰܭࢉ͢Δ 20 7. 7JSUVBM.BDIJOF ʹ͍ͭͯ constadd (operand: 1)
constadd (operand: 2) constadd (operand: 3) plus plus output ελοΫ 1 ελοΫʹ 1 Λϓογϡ
Λٙࣅ໋ྩηοτͰܭࢉ͢Δ 21 7. 7JSUVBM.BDIJOF ʹ͍ͭͯ constadd (operand: 1)
constadd (operand: 2) constadd (operand: 3) plus plus output ελοΫ 1 ελοΫʹ 2 Λϓογϡ 2
Λٙࣅ໋ྩηοτͰܭࢉ͢Δ 22 7. 7JSUVBM.BDIJOF ʹ͍ͭͯ constadd (operand: 1)
constadd (operand: 2) constadd (operand: 3) plus plus output ελοΫ 1 2 ͭͷσʔλΛϙοϓ 2 3 Ճࢉͨ݁͠ՌΛϓογϡ
Λٙࣅ໋ྩηοτͰܭࢉ͢Δ 23 7. 7JSUVBM.BDIJOF ʹ͍ͭͯ constadd (operand: 1)
constadd (operand: 2) constadd (operand: 3) plus plus output ελοΫ 3 ελοΫʹ 3 Λϓογϡ 3
Λٙࣅ໋ྩηοτͰܭࢉ͢Δ 24 7. 7JSUVBM.BDIJOF ʹ͍ͭͯ constadd (operand: 1)
constadd (operand: 2) constadd (operand: 3) plus plus output ελοΫ 3 2 ͭͷσʔλΛϙοϓ 3 6 Ճࢉͨ݁͠ՌΛϓογϡ
Λٙࣅ໋ྩηοτͰܭࢉ͢Δ 25 7. 7JSUVBM.BDIJOF ʹ͍ͭͯ constadd (operand: 1)
constadd (operand: 2) constadd (operand: 3) plus plus output ελοΫ 6 1 ͭͷσʔλΛϙοϓ
ϨδελϚγϯͷΈ $16ʹΑͬͯҟͳΔͷͰׂѪ͠·͢ 26
+7.ͷ࣮ํ๏ 27
7.ͷ࣮ํ๏͕֓ͶΘ͔Γ·ͨ͠ͶɻͰɼ࣮ࡍʹ+7.ͷ࣮ํ๏ʹ͍ͭͯཧղ ΛਂΊ͍͖ͯ·͠ΐ͏ɻ +7.DMBTTϑΝΠϧͱݺΕΔσʔλߏͷू߹Λ໋ྩͱղऍͯ͠ಈ࡞ͤ͞ΔΞ ϓϦέʔγϣϯϨϕϧͷ7.Ͱ͢ɻ DMBTTϑΝΠϧɼ+7.ͷنʹଇΓɼҰൠతʹ+BWBϓϩάϥϜ͔ΒίϯύΠϧ ͞Ε·͢ɻ
͋Δ͍ɼ,PUMJO 4DBMBͷΑ͏ͳ+7.ݴޠͱݺΕΔϓϩάϥϜɼͪΖΜ ίϯύΠϥΛࣗ࡞ͯ͠+7.ݴޠͱ͢Εɼࣗࣗͷ͖ͳͷؚΈ·͢ɻ 28 +7.ͷ࣮ํ๏
ͦͯ͠ɼ͜ΕΒ+7.4QFD 5IF +BWB7JSUVBM.BDIJOF 4QFDJ fi DBUJPO ͱݺΕΔɼυΩϡϝϯτ͕ΦϯϥΠϯͰެ։͞Ε͓ͯΓɼ+7. Λࣗ࡞͢ΔڭՊॻͱͳΓ·͢ɻ
+%,͔Βɼจࣈྻॲཧͷ࠷దԽͳͲ͕͋Γ࣮͕ࡶʹͳΔͨΊɼखܰʹΔ ͨΊʹ+%,Λਪ͠·͢ɻ +%,͕͍͍ײ͡ʹಈ͍ͨΒɼ+%,ͳͲʹγϑτ͍ͯ͘͜͠ͱΛ͓͢͢Ί͠ ·͢ɻ υΩϡϝϯτͪ͜ΒIUUQTEPDTPSBDMFDPNKBWBTFTQFDTKWNTTFIUNM 29 +7.ͷ࣮ํ๏
ͱ͍͑ʜ 30
ۙͰ--.ൃల͖͍ͯͯ͠ΔͷͰɼ$IBU(15ɼ$MBVEFɼ(FNJOJͳͲΛύʔτ φʔͱͯ͠ɼ࣮͢Δશવ͋ΓͰ͢ɻ ྫ͑ɼDMBTTϑΝΠϧͷࠜఈͷσʔλߏ$MBTT'JMF4USVDUVSFͱݺΕΔͷ Ͱ͕͢ɼ$IBU(15PͰదͳճΛग़ͯ͘͠Ε·͢ɻ 31 +7.ͷ࣮ํ๏
32 +7.ͷ࣮ํ๏ +7.4QFDΛಡΜͰ͍͘߹ IUUQTEPDTPSBDMFDPNKBWBTFTQFDTKWNTTFIUNM KWNTIUNMKWNT $IBU(15ͱҰॹʹ࡞͍ͬͯ͘
ͦͯ͠$IBU(15ͱ͍ͬ͠ΐʹ ࡞͍ͬͯ͘߹ྫࣔͯ͘͠Ε·͢ 33
34 +7.ͷ࣮ํ๏ $IBU(15ͱҰॹʹ࡞͍ͬͯ͘ͱʜ
$MBTT'JMF4USVDUVSFDMBTTϑΝΠϧͷߏΛఆٛ͢ΔॏཁͳσʔλߏͰ͢ɻ 㙽ʹ֯ʹ͜ͷΈΛΒͳ͚ΕɼଞݴޠͰ࣮Ͱ͖·ͤΜɻ ຊࢿྉΛࢀߟʹ࣮தʹ͍᪴ͨ߹ɼͥͻ--.ʹฉ͖ͳ͕ΒͬͯΒ͑Δͱ εϜʔζ͔ͳͱࢥ͍·͢ɻ Ͱɼ$MBTT'JMF4USVDUVSFΛಡΈࠐΉΈ1)1Ͱ࣮ͭͭ͠ɼࠓճ )FMMP8PSMEͷग़ྗΛΰʔϧͱ࣮ͯ͠·ͰͬͯΈ·͠ΐ͏ɻ
)FMMP8PSMEͷग़ྗͰ͋Εɼ+7.4QFDʹهࡌ͞Ε͍ͯΔ༰ͯ͢Λɼ దʹཧղ࣮ͯ͢͠Δඞཁͳ͍ͷͰɼָ࣮͘͠Ͱ͖Δ͜ͱؒҧ͍ͳ͠Ͱ͢ɻ 35 +7.ͷ࣮ํ๏
1)1Ͱͷ࣮ํ๏ 36
1)1ͰόΠφϦΛಡΉʹʜʁ 37
1)1ʹόΠφϦΛಡΈࠐΉํ๏͕ఏ ڙ͞Ε͍ͯ·͢ɻ͜͏͍ͬͨέʔεͰ GPQFO GSFBE VOQBDLͳͲ͕ ศརͰ͢ɻ DMBTTϑΝΠϧσʔλߏͱ͍͑ɼ +40/ͷΑ͏ʹϚγϯϦʔμϒϧͰ
ώϡʔϚϯϦʔμϒϧͰͳ͘ɼόΠ φϦͰ͢ɻ 38 1)1ͰόΠφϦΛಡΉʹʜʁ
όΠφϦΛಡΈࠐΜͰ͍͘ྲྀΕ 39
40 όΠφϦΛಡΈࠐΜͰ͍͘ྲྀΕ ClassFile Structure ΛಡΈࠐΉ Constant Pool ΛಡΈࠐΉ ϝιουͷใΛಡΈࠐΉ Code
Attribute ΛಡΈࠐΉ ΦϖίʔυΛ࣮ߦ͢Δ ΦϖίʔυʢϓϩάϥϜʣΛ࣮ߦ͢ΔͨΊͷ લॲཧ
$MBTT'JMF4USVDUVSF 41
$MBTT'JMF4USVDUVSFDMBTTϑΝΠϧ ͷϝλใͳͲ͕֨ೲ͞Ε͍ͯΔσʔλ ߏͰ͢ɻ ྫ͑ɼίϯύΠϧ࣌ʹ༻͍ΒΕͨ +BWBͷόʔδϣϯɼ͜ͷ͋ͱղઆ͢ Δ+7.Λ࣮͢ΔࡍͷίΞͱͳΔ $POTUBOU1PPMɼϑΟʔϧυͷใɼ ϝιουͷใͳͲͰ͢ɻ
42 $MBTT'JMF4USVDUVSF
43 $MBTT'JMF4USVDUVSF $MBTT'JMF4USVDUVSFDMBTTϑΝΠϧ ͷϝλใͳͲ͕֨ೲ͞Ε͍ͯΔσʔλ ߏͰ͢ɻ ྫ͑ɼίϯύΠϧ࣌ʹ༻͍ΒΕͨ +BWBͷόʔδϣϯɼ͜ͷ͋ͱղઆ͢ Δ+7.Λ࣮͢ΔࡍͷίΞͱͳΔ
$POTUBOU1PPMɼϑΟʔϧυͷใɼ ϝιουͷใͳͲͰ͢ɻ
$POTUBOU1PPM 44
45 $POTUBOU1PPM $POTUBOU1PPM$MBTT'JMF 4USVDUVSFͷσʔλߏͷҰ෦Ͱ +7.ʹͱͬͯಛʹίΞͱͳΔσʔλߏ Ͱ͢ɻ ɼจࣈྻɼϝιου໊ʢҾؚ ΉʣͳͲͷσʔλ͕֨ೲ͞Ε͍ͯ·͢ɻ
͜ΕΒΛऔΓग़͢͜ͱʹΑͬͯ)FMMP 8PSMEΛग़ྗ͢Δ͜ͱ͕Ͱ͖ΔΑ͏ ʹͳΓ·͢ɻ
ϝιου 46
47 ϝιου ϝιουɼ$MBTT'JMF4USVDUVSFͷ σʔλߏͷҰ෦ͰɼΞΫηεम০ࢠ ɼҾͷใΛɼͲͷ$POTUBOU 1PPM͔Βࢀর͢Δ͔Λ͍ࣔͯ͠Δͷ Ͱ͢ɻ ͜ΕΛಡΈࠐΉ͜ͱͰɼ)FMMP
8PSMEͷग़ྗ͕࣮͞Ε͍ͯΔ QVCMJDTUBUJDNBJO 4USJOH<> BSHT ͷใ͕औಘͰ͖·͢ɻ
$PEF"UUSJCVUF 48
$PEF"UUSJCVUF$MBTT'JMF4USVDUVSF Ͱఆٛ͞Ε͍ͯΔͷϝιουͷσʔλߏͷ Ұ෦Ͱ͢ɻ ϝιουʹଐੑͱͯ͠ϓϩάϥϜͷใ͕ ਵ͍ͯ͠·͢ɻ $MBTT'JMF4USVDUVSFࣗମͷ"UUSJCVUFͱ ͯ͠ɼίʔυͷߦΛ֨ೲ͍ͯ͠Δଐੑͷ
ใͳͲ͕͋Γ·͢ɻ 49 $PEF"UUSJCVUF
Φϖίʔυͷ࣮ߦ 50
Φϖίʔυʢ0Q$PEF0QFSBUJPO$PEFʣɼ໋ྩΛ͘ϚγϯϦʔμϒϧʹදݱ͠ ͍ͯΔͷͰ͢ɻ·ͨҾͷ͜ͱΛΦϖϥϯυͱ͍͍·͢ɻ $PEF"UUSJCVUFΛಡΈࠐΉ͜ͱͰɼ͜ͷ໋ྩΛऔಘͰ͖·͢ɻ 51 Φϖίʔυͷ࣮ߦ B2 00 02
12 03 B6 00 04 B1 getstatic ͷΦϖίʔυ getstatic ͷΦϖϥϯυ (Constant Pool ͷ2 ൪)
ώϡʔϚϯϦʔμϒϧͰͳ͍ͷͰɼཧղ ͕͍͠Ͱ͕͢ɼ͜ΕΒΛώϡʔϚϯϦʔ μϒϧʹͨ͠ͷ͕͋ΓɼͦΕΒΛχʔϞ χοΫʢNOFNPOJDʣͱݺΜͩΓ͠· ͢ɻ ΞηϯϒϦݴޠΛॻ͍ͨ͜ͱ͕͋Δਓ ɼͳΜͱͳ͘Πϝʔδ͔ͭ͘ͳͱࢥ͍ ·͢ɻ
+BWBKBWBQDίϚϯυͰɼͲ͏͍͏ ίʔυ͔͚·͢ɻ 52 Φϖίʔυͷ࣮ߦ
͜ͷKBWBQίϚϯυͱ ಉ͡ΦϖίʔυΛ࣮͢ΕΑ͍Ͱ͢ 53
54
KBWB-BOH4ZTUFN1)1ͷ OBNFTQBDFΛ͏·͘׆༻ͯ͠ʜ 55
56
%&.0 57 IUUQTHJTUHJUIVCDPNNNSEEDFBGFDFFBGCFDBBF
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ 58