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
280
JVM の仕組みを理解して PHP で実装してみよう
Nextbeat Tech Bar: Java/JVM祭り
memory
PRO
May 23, 2025
Tweet
Share
More Decks by memory
See All by memory
コードゴルファー道
m3m0r7
PRO
0
380
ChatGPT とつくる PHP で OS 実装
m3m0r7
PRO
3
250
事業観点から見る技術的負債の返済
m3m0r7
PRO
4
1.2k
PHP でアセンブリ言語のように書く技術
m3m0r7
PRO
1
230
PHP でアセンブリっぽく書く技術
m3m0r7
PRO
1
150
How to implement a RubyVM with PHP?
m3m0r7
PRO
3
2.8k
二郎系ラーメンのコールで学ぶ AST 解析
m3m0r7
PRO
8
2.8k
RubyVM を PHP で実装する 〜Hello World を出力するまで〜
m3m0r7
PRO
1
900
令和最新版 PHP メモリ管理術
m3m0r7
PRO
7
4.7k
Other Decks in Programming
See All in Programming
NPOでのDevinの活用
codeforeveryone
0
780
PHP 8.4の新機能「プロパティフック」から学ぶオブジェクト指向設計とリスコフの置換原則
kentaroutakeda
2
740
プロダクト志向ってなんなんだろうね
righttouch
PRO
0
180
Discover Metal 4
rei315
2
120
Modern Angular with Signals and Signal Store:New Rules for Your Architecture @enterJS Advanced Angular Day 2025
manfredsteyer
PRO
0
190
Node-RED を(HTTP で)つなげる MCP サーバーを作ってみた
highu
0
120
#QiitaBash MCPのセキュリティ
ryosukedtomita
0
950
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
3
430
0626 Findy Product Manager LT Night_高田スライド_speaker deck用
mana_takada
0
150
git worktree × Claude Code × MCP ~生成AI時代の並列開発フロー~
hisuzuya
1
540
Deep Dive into ~/.claude/projects
hiragram
12
2.4k
Hypervel - A Coroutine Framework for Laravel Artisans
albertcht
1
110
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Rails Girls Zürich Keynote
gr2m
94
14k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
Adopting Sorbet at Scale
ufuk
77
9.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
730
YesSQL, Process and Tooling at Scale
rocio
173
14k
Building Adaptive Systems
keathley
43
2.6k
Documentation Writing (for coders)
carmenintech
72
4.9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
107
19k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
The World Runs on Bad Software
bkeepers
PRO
69
11k
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