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
230
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
330
ChatGPT とつくる PHP で OS 実装
m3m0r7
PRO
3
250
事業観点から見る技術的負債の返済
m3m0r7
PRO
4
1.1k
PHP でアセンブリ言語のように書く技術
m3m0r7
PRO
1
220
PHP でアセンブリっぽく書く技術
m3m0r7
PRO
1
140
How to implement a RubyVM with PHP?
m3m0r7
PRO
3
2.7k
二郎系ラーメンのコールで学ぶ AST 解析
m3m0r7
PRO
8
2.8k
RubyVM を PHP で実装する 〜Hello World を出力するまで〜
m3m0r7
PRO
1
880
令和最新版 PHP メモリ管理術
m3m0r7
PRO
7
4.6k
Other Decks in Programming
See All in Programming
生成AI時代のフルスタック開発
kenn
9
2k
インターフェース設計のコツとツボ
togishima
2
130
TypeScript だけを書いて Tauri でデスクトップアプリを作ろう / Tauri with only TypeScript
tris5572
2
470
What Spring Developers Should Know About Jakarta EE
ivargrimstad
1
370
AIコーディングの本質は“コード“ではなく“構造“だった / The essence of AI coding is not “code” but "structure
seike460
PRO
2
680
テスト分析入門/Test Analysis Tutorial
goyoki
8
2.4k
Feature Flag 自動お掃除のための TypeScript プログラム変換
azrsh
PRO
4
540
〜可視化からアクセス制御まで〜 BigQuery×Looker Studioで コスト管理とデータソース認証制御する方法
cuebic9bic
0
210
Storybookの情報をMCPサーバー化する
shota_tech
3
1.6k
REST API設計の実践 – ベストプラクティスとその落とし穴
kentaroutakeda
2
230
External SecretsのさくらProvider初期実装を担当しています
logica0419
0
190
AWS診断200件の分析から見る頻出指摘と対策
shoodagiri
0
100
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
5
600
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
14
1.5k
Six Lessons from altMBA
skipperchong
28
3.8k
Practical Orchestrator
shlominoach
187
11k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
19
1.2k
Agile that works and the tools we love
rasmusluckow
329
21k
A better future with KSS
kneath
239
17k
For a Future-Friendly Web
brad_frost
178
9.7k
The Language of Interfaces
destraynor
158
25k
Building Applications with DynamoDB
mza
95
6.4k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
450
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