SlideShare a Scribd company logo
1 of 68
Download to read offline
R5-5

JVMコードリーディング入門
- JVMのOS抽象化レイヤーについて 虎塚
November 9, 2013
JJUG CCC 2013 Fall
自己紹介

鳥形由希 (id: torazuka)
(株)電通国際情報サービス勤務
http://twitter.com/torazuka
http://d.hatena.ne.jp/torazuka/
この入門セッションが生まれた経緯
皆さんなら何のテーマで入門セッションをしますか?
相談して題目をもらいました
JVMのソースコードについて
話せばよいのでは?
メモリらへん

ぎゃっぱぎゃっぱ

某上司

本当にありがとうございました.
このセッションのテーマ
● JVM(Java Virtual Machine)を読む基本的な方法
● JVMのOS抽象化レイヤーの構成
○ 基本的な方法を使ってソースコードを読むと,
どんなことが分かるかを共有します
発表内容
1. JVMコードリーディング入門
1.1. ソースコードの入手からツールの選定まで
1.2. JVMソースコードの読み方
2. JVMのOS抽象化レイヤー
3. まとめ
対象のソースコード
OpenJDK(http://openjdk.java.net/)
7

JDK7のupdate

Oracle JDK
OpenJDK

6

JDK7のベース,
Java6のOSS版

8

7

7u

JDK7のベース,
Java7のOSS版

8
JDK8のベース
になる予定
今回は7u
ソースコードの入手
● zipで取得する
○ メリット:入手が簡単、解凍すれば読める
○ デメリット:提供バージョンが固定の場合がある

● ソースコードリポジトリから取得する
○ メリット:好きなバージョンを入手できる
○ デメリット:読むまでに苦労する場合もある,
java.netが繋がりづらい
リポジトリからソースコードを入手する

(追記)下記手順の代わりにget_source.shを実行する方法もあります
1. Mercurialをインストールする
sudo apt-get install mercurial
2. hgforest-crewからforest.pyをダウンロードして任意の場所に置く
3. 設定ファイルhgrcにforest.pyを使う設定を追記
[extensions]
forest={forest.pyを置いたディレクトリパス}/forest.py
4. リポジトリからコードをcloneする
hg clone http://hg.openjdk.java.net/jdk7u/jdk7u hgforest
ビルド
● デバッグ実行しながら動作を調べるなら必要
○ ビルドツールの理解
○ 依存ライブラリの取得
○ 環境変数の設定

● 動かす前の調査としてコードを読むなら不要
○ ビルドで生成されるソースコードがある場合は注意
OpenJDKのビルド方法は,README_builds.html参照
(参考)ビルドしようよ派
 (略)次の理由でビルドすることを勧めます.
 第一の理由は,ビルド処理の工程でソースファイル自体を生成することが
あるからです.(略)第二の理由は、Apacheのような巨大なソフトウェア特有
の事情です.(略)該当するソースコードがコンパイルされていない,つまり実
行ファイルに含まれてもいない,ことがあります.(略)最後の理由は,やや
気分的なものですが,そもそもビルドすら通せないソースでは,読むことは難
しいはずです.
(引用)WEB+DB PRESS Vol.69,p.133
(松原克弥さん,井上誠一郎さん)
(参考)ビルドは最終手段派
gdb
動作を調べる必要があるときに使います。
ただし、これは最終手段です。読んですぐに理解できるものなら実際に動か
して調べる必要はまったくありません。どうしてもわからないときに使いましょ
う。
よくわからないプロジェクトのビルドは面倒ですし、対象の関数を動かすのは
もっと面倒ですから。
(引用)ソースコードを読むときの3カ条(nariさん) http://d.hatena.ne.
jp/authorNari/20111213/1323745618
ツール(1) エディタ
● C, C++ソースコードを扱い慣れているエディタ
○ Emacs, vi, 秀丸...お好きなエディタでどうぞ

● エディタが持っていて欲しい機能
○ 正規表現が使える検索
○ ブックマーク
○ シンタックスハイライティング
ツール(2) エディタ続き
● サクラエディタ
○ http://sakura-editor.sourceforge.net/
○ for Windows(8にも対応)
○ もし習熟したエディタがまだないならいいかも

● Eclipse IDE for C/C++ Developers
○ http://www.eclipse.org/downloads/
○ ただし,C, C++のコードを真っ当に読めるように
設定するのは大変…
ツール(3) エディタ以外
● 正規表現
○ ファイル内検索,キーワード抽出
● grep
○ 正規表現と組み合わせて使うと便利
● ctags
○ クラスや関数の定義にジャンプ
○ 同名のヘッダファイル/ソースコードにジャンプ
発表内容
1. JVMコードリーディング入門
1.1. ソースコードの入手からツールの選定まで
1.2. JVMソースコードの読み方
2. JVMのOS抽象化レイヤー
3. まとめ
ソースコードの読み方
1. 全体の階層構造を把握する
2. ファイルの関係を把握する
3. クラスの関係を把握する

何周も
繰り返す
ポイント
● 分からなくても全部をざっくり何周も読む
○ 実装の詳細や構文,テクニックに固執して止まらない

● メモをとったり図解したりする
● 仮説と検証を繰り返す
○ 予想と実際の差分を見る
○ 仮説で理解を橋渡しする
● 粒度を行き来して徐々に焦点を合わせる
ディレクトリ構造を見る(10%程度?)
ディレクトリ構造を読む(50%程度?)
ディレクトリ構造を理解する(100%)
コントラクトを見る(10%程度)
コントラクトを読む(50%程度?)
コントラクトを理解する(100%)
ロジックを見る(10%程度?)
ロジックを読む(50%程度?)
ロジックを理解する(100%)
1. 全体の階層構造を把握する
● ディレクトリ構成を見る
● どんな名前空間があるか見る
● ファイルサイズの大きいもの
を把握する
● 抽象度の高い名前のファイル
を把握する
2. ファイルの関係を把握する
● 中心的なファイルと周縁のファイルを推定する
○ 直接のinclude関係に着目して,図にしてみる
3.1. クラスの関係を把握する
● 他のクラスと関係性をたくさん持つクラスを把握する
● クラスと構造体をすべて抽出し,継承関係を図にする
3.2. C,C++レイヤーの切り分け
● クラスがどのレイヤーに属するかを見る
○ システムコールを行う層と、それを使う層
○ Cの構造体がC++のレイヤーに漏れないように
なっているはずなので、それを確かめる

● OSと接する末端を見つけ,
JVMとOSの境界を把握する

C++
C
OS
「ざっくり読む」とは
● たとえばヘッダファイルだけをまず読む
● 役割と責任範囲に着目する
○ ヘッダコメントを読む
○ シグネチャに着目して読む
○ ファイルにどんなクラスがあるかを見る
○ クラスにどんなフィールドや関数があるかを見る
漆塗りのように理解することを目指します

photo by http://www.ashinari.com
読む部分と読み飛ばしてもよい部分
● assert文 →読む
○ コントラクトなので非常に重要
● non-PRODUCTコード →読み飛ばしてもOK
○ NOT_PRODUCT(code)のようなマクロ部分
ソースコードのコメントをどう読むか
● 実行できないので全幅の信頼は置けないが・・・
● ヘッダファイルのコメントは基本的に読む
○ 設計指針や専門用語の解説

● ソースファイルのコメントは次の場合に読む
○ 署名がついているもの
○ バグトラッカーの番号がついているもの
○ 新しい日付が書いてあるもの(OpenJDK正式リリース以降)

※2011年7月28日
JVMの抽象クラスの特性
● 派生クラスがオーバーライドすべき関数を持つ
○ 純粋仮想関数
○ 直接インスタンス化できないように,new,
deleteの関数にエラー処理が書いてあることも
抽象クラス(余談)
gccなど特定のコンパイラでは,基底クラスを持つクラスは
(仮想関数やフィールドがなくても)バイナリが大きくなる.
そのため,クラス定義に基底クラスを直接書かずマクロにする.
そのようなコンパイラでコンパイルした時は,マクロが空文字列
に変換される.
c.f. hotspot/src/share/vm/memory/allocation.hpp
メモリ周りのコードによく出てくる略語
略語

フルスペル

oop

ordinary object pointer

RO

ResourceObj

TLAB

thread local allocation buffers

BOT

blockOffsetTable
発表内容
1. JVMコードリーディング入門
1.1. ソースコードの入手からツールの選定まで
1.2. JVMのソースコードをどう読むか
2. JVMのOS抽象化レイヤー
3. まとめ
読みたいところ
● OSからJVMがメモリを確保する部分
● OSから取得したメモリを管理する部分
OpenJDK7のディレクトリ構造 (抜粋)
中身

dir名

実装言語

corba

CORBA API, rmic

Java

hotspot

コンパイラ,GC

C++

jaxp

JAXP API

Java

jaxws

JAXB, JAX-WS API

Java

jdk

コアライブラリ

Java, C

langtools

Compiler API

Java
HotSpotのディレクトリ構造 (抜粋)
src/

share/

vm/

memory/

tools/

runtime/
他多数のディレクトリ

os/

linux/

vm/

solaris/

vm/

os_cpu/

windows/

vm/

cpu/

posix/

vm/

←OSごとの実装
今回まず読む部分 OS抽象化層
アプリケーション
JVM
オブジェクト管理
GC
メモリ管理
OS抽象化層
OS

ここ
OS抽象化層
メモリ管理の機能
os.cpp
os_linux
.hpp

os_windows
.hpp

os_solaris
.hpp

Linux

Windows

Solaris
OS別のinclude hotspot/src/share/vm/runtime/os.cpp#L51-62
#ifdef TARGET_OS_FAMILY_linux
# include "os_linux.inline.hpp"
# include "thread_linux.inline.hpp"
#endif
#ifdef TARGET_OS_FAMILY_solaris
# include "os_solaris.inline.hpp"
# include "thread_solaris.inline.hpp"
#endif
#ifdef TARGET_OS_FAMILY_windows
# include "os_windows.inline.hpp"
# include "thread_windows.inline.hpp"
#endif
OS別のinclude hotspot/src/share/vm/runtime/os.hpp#L33-41
hotspot/src/os/{os_name}/vm/jvm_{os_name}.hをincludeする
#ifdef TARGET_OS_FAMILY_linux
# include "jvm_linux.h"
#endif
#ifdef TARGET_OS_FAMILY_solaris
# include "jvm_solaris.h"
#endif
#ifdef TARGET_OS_FAMILY_windows
# include "jvm_windows.h"
#endif
os.hppに定義されたメンバー
● static関数が250個ほどある
○ os_linux.hppは140個ほどオーバーライド
○ os_windows.cppは150個ほどオーバーライド

● メモリ管理に関するもの,別の役割のもの
os::関数を呼び出すクラスの場所
hotspot/src/share/vm/以下のディレクトリ
asm

memory

c1

oops

classfile

opto

code

prims

compiler

runtime

gc_implementation

services

interpreter

shark

libadt

utilities
memory/以下で使われるos::関数
malloc
free
num_mallocs
alloc_bytes
free_bytes
realloc
vm_allocation_granularity
・・・・80箇所くらいで30種類くらい使われている
osクラスの一部

hotspot/src/share/vm/runtime/os.hpp#L98-102

public:
static void init(void);
// Called before command line parsing
static jint init_2(void);
// Called after command line parsing
static void init_3(void);
// Called at the end of vm init
痺れる
次に読む部分 OS抽象化層の利用側
アプリケーション
JVM
オブジェクト管理
GC
メモリ管理
OS抽象化層
OS

ここ
memory/の中身
● 80ファイルくらい(hpp, cpp)
● 抽象度の高いファイル名を持つもの
○ allocation
○ heap
○ space
○ generation
○ universe
・・・
memory/のクラス継承関係

→画像
memory/のクラス継承関係
StackObj
CHeapObj
ValueObj
AllStatic
なんか大事な
クラスっぽい
memory/のファイル
■赤=allocation.hpp
■橙=赤ファイルを直接
    includeするhpp
■黄=橙ファイルを直接
    includeするhpp
→画像
memory/のファイル(抜粋)
genCollected
Heap

compact
PermGen

sharedHeap

tenured
space
heap
Generation
watermark
generation
allocation
memRegion
generation
Spec
permGen

iterator
genOop
Closures

resourceArea

barrierSet

cardTableRS
blockOffset
Table
memory /のクラス継承関係(再)
■赤=allocation.hppに
    定義されたクラス
■橙=前頁の橙ファイルに
    定義されたクラス
■黄=前頁の黄ファイルに
    定義されたクラス
→画像
allocation.hpp|cppの重要なクラス
クラス名

説明

CHeapObj

Cヒープに配置されるオブジェクト用

StackObj

スタックに配置されるオブジェクト用

ValueObj

組み込みオブジェクト用

ResourceObj リソースエリアに配置されるオブジェクト用
AllStatic

名前空間として使われるクラス用
CHeapObjの継承ツリー
resourceArea

generation
space
→画像
StackObjの継承ツリー
genOopClosures
iterator

space

→画像
ValueObjの継承ツリー
ResourceObjの継承ツリー
AllStaticの継承ツリー
以上のように腑分けしながら理解します

photo by http://www.ashinari.com
発表内容
1. JVMコードリーディング入門
1.1. ソースコードの入手からツールの選定まで
1.2. JVMソースコードの読み方
2. JVMのOS抽象化レイヤー
3. まとめ
まとめ
こうやって読んでいけばいずれ分かる!!!
●
●
●
●

分からなくても全部をざっくり何周も読む
メモをとったり図解したりする
仮説と検証を繰り返す
粒度を行き来して焦点を合わせる

ご清聴ありがとうございました.
参考資料
1.
2.
3.
4.
5.
6.

トップスタジオ,まつもとゆきひろ,平林俊一,鵜飼文敏:『Code Reading』,毎
日コミュニケーションズ,2004.6.
佐藤太一:「太一のコードの読み方メモ」,https://gist.github.
com/taichi/2693387,2012.5.
松原克弥,井上誠一郎:「C言語コードリーディング」,p.p.130-139,WEB+DB
PRESS Vol.69,技術評論社,2012.6.
中村成洋,相川光:『ガベージコレクションのアルゴリズムと実装』,秀和システ
ム,2010.3.
中村成洋:『徹底解剖「G1GC」実装編』,http://www.narihiro.info/g1gc-implbook/,2013.5.
Alexey Ragozin:「Understanding GC pauses in JVM, HotSpot's minor
GC.」,Grid Designer's Blog,2011.6.

More Related Content

What's hot

9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)NTT DATA Technology & Innovation
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。Kenjiro Kubota
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかShogo Wakayama
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -onozaty
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化Gosuke Miyashita
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!kwatch
 
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallZabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallAtsushi Tanaka
 
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話Daichi Koike
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugMasatoshi Tada
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方Yoshiyasu SAEKI
 
LINE LIVE のチャットが
30,000+/min のコメント投稿を捌くようになるまで
LINE LIVE のチャットが
30,000+/min のコメント投稿を捌くようになるまでLINE LIVE のチャットが
30,000+/min のコメント投稿を捌くようになるまで
LINE LIVE のチャットが
30,000+/min のコメント投稿を捌くようになるまでLINE Corporation
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティスAmazon Web Services Japan
 

What's hot (20)

9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
SpringBootTest入門
SpringBootTest入門SpringBootTest入門
SpringBootTest入門
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallZabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
 
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
Railsで作るBFFの功罪
Railsで作るBFFの功罪Railsで作るBFFの功罪
Railsで作るBFFの功罪
 
LINE LIVE のチャットが
30,000+/min のコメント投稿を捌くようになるまで
LINE LIVE のチャットが
30,000+/min のコメント投稿を捌くようになるまでLINE LIVE のチャットが
30,000+/min のコメント投稿を捌くようになるまで
LINE LIVE のチャットが
30,000+/min のコメント投稿を捌くようになるまで
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 

Similar to JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」

Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
 
JVM のいろはにほ #javajo
JVM のいろはにほ #javajoJVM のいろはにほ #javajo
JVM のいろはにほ #javajoYuji Kubota
 
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Koichi Sakata
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 
Play frameworkの概要
Play frameworkの概要Play frameworkの概要
Play frameworkの概要Shuhei Kaneko
 
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageKoichi Sakata
 
JavaOne2014参加報告LT
JavaOne2014参加報告LTJavaOne2014参加報告LT
JavaOne2014参加報告LT諭 岡野
 
Amazon RDS (MySQL) 入門
Amazon RDS (MySQL) 入門Amazon RDS (MySQL) 入門
Amazon RDS (MySQL) 入門Manabu Shinsaka
 
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話Masataka Tsukamoto
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワークTakuya Sato
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMyy yank
 
PlayFramework1.x基礎編
PlayFramework1.x基礎編PlayFramework1.x基礎編
PlayFramework1.x基礎編Asami Abe
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOneAdvancedTechNight
 
リーダブルコード 1.0'
リーダブルコード 1.0'リーダブルコード 1.0'
リーダブルコード 1.0'Yamamura Takashi
 
Java one 2013 sf 報告会lt
Java one 2013 sf 報告会ltJava one 2013 sf 報告会lt
Java one 2013 sf 報告会lttorutk
 
Java用O/Rマッピングソフトについて私が知っている二、三の事柄
Java用O/Rマッピングソフトについて私が知っている二、三の事柄Java用O/Rマッピングソフトについて私が知っている二、三の事柄
Java用O/Rマッピングソフトについて私が知っている二、三の事柄Akira Shimosako
 

Similar to JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」 (20)

Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
JVM のいろはにほ #javajo
JVM のいろはにほ #javajoJVM のいろはにほ #javajo
JVM のいろはにほ #javajo
 
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
Java frameworkの昔と今
Java frameworkの昔と今Java frameworkの昔と今
Java frameworkの昔と今
 
Play frameworkの概要
Play frameworkの概要Play frameworkの概要
Play frameworkの概要
 
Osoljp201204
Osoljp201204Osoljp201204
Osoljp201204
 
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
 
JavaOne2014参加報告LT
JavaOne2014参加報告LTJavaOne2014参加報告LT
JavaOne2014参加報告LT
 
Amazon RDS (MySQL) 入門
Amazon RDS (MySQL) 入門Amazon RDS (MySQL) 入門
Amazon RDS (MySQL) 入門
 
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワーク
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
 
PlayFramework1.x基礎編
PlayFramework1.x基礎編PlayFramework1.x基礎編
PlayFramework1.x基礎編
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOne
 
リーダブルコード 1.0'
リーダブルコード 1.0'リーダブルコード 1.0'
リーダブルコード 1.0'
 
Hello Java
Hello JavaHello Java
Hello Java
 
Java one 2013 sf 報告会lt
Java one 2013 sf 報告会ltJava one 2013 sf 報告会lt
Java one 2013 sf 報告会lt
 
Groovyコンファレンス
GroovyコンファレンスGroovyコンファレンス
Groovyコンファレンス
 
Java用O/Rマッピングソフトについて私が知っている二、三の事柄
Java用O/Rマッピングソフトについて私が知っている二、三の事柄Java用O/Rマッピングソフトについて私が知っている二、三の事柄
Java用O/Rマッピングソフトについて私が知っている二、三の事柄
 

More from y torazuka

実践 Amazon KMS #cmdevio2015
実践 Amazon KMS #cmdevio2015実践 Amazon KMS #cmdevio2015
実践 Amazon KMS #cmdevio2015y torazuka
 
Javaクラスファイルの読み方
Javaクラスファイルの読み方Javaクラスファイルの読み方
Javaクラスファイルの読み方y torazuka
 
AWSを利用したメカ管理部長-プロトタイプ
AWSを利用したメカ管理部長-プロトタイプAWSを利用したメカ管理部長-プロトタイプ
AWSを利用したメカ管理部長-プロトタイプy torazuka
 
JavaScript The Good Parts Chapter 7
JavaScript The Good Parts Chapter 7JavaScript The Good Parts Chapter 7
JavaScript The Good Parts Chapter 7y torazuka
 
『入門 ソーシャルデータ』9章
『入門 ソーシャルデータ』9章『入門 ソーシャルデータ』9章
『入門 ソーシャルデータ』9章y torazuka
 

More from y torazuka (6)

実践 Amazon KMS #cmdevio2015
実践 Amazon KMS #cmdevio2015実践 Amazon KMS #cmdevio2015
実践 Amazon KMS #cmdevio2015
 
Javaクラスファイルの読み方
Javaクラスファイルの読み方Javaクラスファイルの読み方
Javaクラスファイルの読み方
 
AWSを利用したメカ管理部長-プロトタイプ
AWSを利用したメカ管理部長-プロトタイプAWSを利用したメカ管理部長-プロトタイプ
AWSを利用したメカ管理部長-プロトタイプ
 
JavaScript The Good Parts Chapter 7
JavaScript The Good Parts Chapter 7JavaScript The Good Parts Chapter 7
JavaScript The Good Parts Chapter 7
 
『入門 ソーシャルデータ』9章
『入門 ソーシャルデータ』9章『入門 ソーシャルデータ』9章
『入門 ソーシャルデータ』9章
 
20110224jggug
20110224jggug20110224jggug
20110224jggug
 

JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」