Submit Search
Upload
Java オブジェクトの内部構造
•
1 like
•
2,279 views
T
Taku Miyakawa
Follow
Internal structures of Java objects (oops)
Read less
Read more
Technology
Report
Share
Report
Share
1 of 8
Download now
Download to read offline
Recommended
C# 8
C# 8
m ishizaki
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
.NET Core 3.0 で使える C# 8
.NET Core 3.0 で使える C# 8
m ishizaki
20120422i phonedeveloperworkshoppublished
20120422i phonedeveloperworkshoppublished
Yoichiro Sakurai
大人のお型付け
大人のお型付け
Nobuhisa Koizumi
C++入門?
C++入門?
tsudaa
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
natrium11321
Recommended
C# 8
C# 8
m ishizaki
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
.NET Core 3.0 で使える C# 8
.NET Core 3.0 で使える C# 8
m ishizaki
20120422i phonedeveloperworkshoppublished
20120422i phonedeveloperworkshoppublished
Yoichiro Sakurai
大人のお型付け
大人のお型付け
Nobuhisa Koizumi
C++入門?
C++入門?
tsudaa
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
natrium11321
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体
digitalghost
Processing
Processing
Akifumi Nambu
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
HDCLT
HDCLT
Daigaku Ando
Define and expansion of cpp macro
Define and expansion of cpp macro
digitalghost
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
digitalghost
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Shintarou Okada
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
Kamiya Toshihiro
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
Kamiya Toshihiro
ROS JAPAN Users Group Meetup 01
ROS JAPAN Users Group Meetup 01
Daiki Maekawa
Linq To Fun
Linq To Fun
deflis
templateとautoの型推論
templateとautoの型推論
MITSUNARI Shigeo
JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文
Appresso Engineering Team
TypeScript & 関数型講座 第2回 TypeScript という言語
TypeScript & 関数型講座 第2回 TypeScript という言語
gypsygypsy
Cookpad Summer Intern 2015 - Programming Paradigm
Cookpad Summer Intern 2015 - Programming Paradigm
Minero Aoki
C# 9 のおすすめ新機能
C# 9 のおすすめ新機能
m ishizaki
Lt8 JavaScriptで配列をコピーする
Lt8 JavaScriptで配列をコピーする
Shingo Inoue
Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)
洋史 東平
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
Takashi Hoshino
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
Tomonobu_Hirano
深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開
Seiya Tokui
Quasar: Actor Model and Light Weight Threads on Java
Quasar: Actor Model and Light Weight Threads on Java
Taku Miyakawa
More Related Content
What's hot
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体
digitalghost
Processing
Processing
Akifumi Nambu
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
HDCLT
HDCLT
Daigaku Ando
Define and expansion of cpp macro
Define and expansion of cpp macro
digitalghost
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
digitalghost
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Shintarou Okada
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
Kamiya Toshihiro
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
Kamiya Toshihiro
ROS JAPAN Users Group Meetup 01
ROS JAPAN Users Group Meetup 01
Daiki Maekawa
Linq To Fun
Linq To Fun
deflis
templateとautoの型推論
templateとautoの型推論
MITSUNARI Shigeo
JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文
Appresso Engineering Team
TypeScript & 関数型講座 第2回 TypeScript という言語
TypeScript & 関数型講座 第2回 TypeScript という言語
gypsygypsy
Cookpad Summer Intern 2015 - Programming Paradigm
Cookpad Summer Intern 2015 - Programming Paradigm
Minero Aoki
C# 9 のおすすめ新機能
C# 9 のおすすめ新機能
m ishizaki
Lt8 JavaScriptで配列をコピーする
Lt8 JavaScriptで配列をコピーする
Shingo Inoue
Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)
洋史 東平
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
Takashi Hoshino
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
Tomonobu_Hirano
What's hot
(20)
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体
Processing
Processing
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
HDCLT
HDCLT
Define and expansion of cpp macro
Define and expansion of cpp macro
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
ROS JAPAN Users Group Meetup 01
ROS JAPAN Users Group Meetup 01
Linq To Fun
Linq To Fun
templateとautoの型推論
templateとautoの型推論
JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文
TypeScript & 関数型講座 第2回 TypeScript という言語
TypeScript & 関数型講座 第2回 TypeScript という言語
Cookpad Summer Intern 2015 - Programming Paradigm
Cookpad Summer Intern 2015 - Programming Paradigm
C# 9 のおすすめ新機能
C# 9 のおすすめ新機能
Lt8 JavaScriptで配列をコピーする
Lt8 JavaScriptで配列をコピーする
Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
Viewers also liked
深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開
Seiya Tokui
Quasar: Actor Model and Light Weight Threads on Java
Quasar: Actor Model and Light Weight Threads on Java
Taku Miyakawa
金勘定のためのBigDecimalそしてMoney and Currency API
金勘定のためのBigDecimalそしてMoney and Currency API
Taku Miyakawa
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
Graph Algorithms Part 1
Graph Algorithms Part 1
Taku Miyakawa
Introduction to DEEPstation the GUI Deep learning environment for chainer
Introduction to DEEPstation the GUI Deep learning environment for chainer
Ryo Shimizu
CuPy解説
CuPy解説
Ryosuke Okuta
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
Taku Miyakawa
Viewers also liked
(8)
深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開
Quasar: Actor Model and Light Weight Threads on Java
Quasar: Actor Model and Light Weight Threads on Java
金勘定のためのBigDecimalそしてMoney and Currency API
金勘定のためのBigDecimalそしてMoney and Currency API
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Graph Algorithms Part 1
Graph Algorithms Part 1
Introduction to DEEPstation the GUI Deep learning environment for chainer
Introduction to DEEPstation the GUI Deep learning environment for chainer
CuPy解説
CuPy解説
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
Similar to Java オブジェクトの内部構造
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
伸男 伊藤
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web games
Noritada Shimizu
第1回python勉強会
第1回python勉強会
Yoshio Shimomura
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
Tomoharu ASAMI
JavaScript入門
JavaScript入門
Ryo Maruyama
Kanazawa.js.Next
Kanazawa.js.Next
dynamis
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
第2回勉強会スライド
第2回勉強会スライド
koturn 0;
Objc lambda
Objc lambda
matuura_core
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
とあるFlashの自動生成
とあるFlashの自動生成
Akineko Shimizu
Programming camp code reading
Programming camp code reading
Hiro Yoshioka
Php in ruby
Php in ruby
do_aki
Project lambda
Project lambda
Appresso Engineering Team
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
Atsushi Tadokoro
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
monglee
Introduction of Python
Introduction of Python
Tomoya Nakayama
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較する
kwatch
Similar to Java オブジェクトの内部構造
(20)
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web games
第1回python勉強会
第1回python勉強会
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
JavaScript入門
JavaScript入門
Kanazawa.js.Next
Kanazawa.js.Next
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
第2回勉強会スライド
第2回勉強会スライド
Objc lambda
Objc lambda
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
とあるFlashの自動生成
とあるFlashの自動生成
Programming camp code reading
Programming camp code reading
Php in ruby
Php in ruby
Project lambda
Project lambda
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
Introduction of Python
Introduction of Python
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較する
More from Taku Miyakawa
Matrix Multiplication in Strassen Algorithm
Matrix Multiplication in Strassen Algorithm
Taku Miyakawa
擬似乱数生成器の評価
擬似乱数生成器の評価
Taku Miyakawa
コルーチンの実装について
コルーチンの実装について
Taku Miyakawa
言語設計者が意味論を書くときに考えていたこと
言語設計者が意味論を書くときに考えていたこと
Taku Miyakawa
Kink の宣伝
Kink の宣伝
Taku Miyakawa
ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月
Taku Miyakawa
Java Quine Golf
Java Quine Golf
Taku Miyakawa
Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354
Taku Miyakawa
Processing LTSV by Apache Pig
Processing LTSV by Apache Pig
Taku Miyakawa
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語
Taku Miyakawa
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
Taku Miyakawa
Java 7 invokedynamic の概要
Java 7 invokedynamic の概要
Taku Miyakawa
Hadoop jobbuilder
Hadoop jobbuilder
Taku Miyakawa
Kink: developing a programming language on the JVM
Kink: developing a programming language on the JVM
Taku Miyakawa
More from Taku Miyakawa
(14)
Matrix Multiplication in Strassen Algorithm
Matrix Multiplication in Strassen Algorithm
擬似乱数生成器の評価
擬似乱数生成器の評価
コルーチンの実装について
コルーチンの実装について
言語設計者が意味論を書くときに考えていたこと
言語設計者が意味論を書くときに考えていたこと
Kink の宣伝
Kink の宣伝
ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月
Java Quine Golf
Java Quine Golf
Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354
Processing LTSV by Apache Pig
Processing LTSV by Apache Pig
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
Java 7 invokedynamic の概要
Java 7 invokedynamic の概要
Hadoop jobbuilder
Hadoop jobbuilder
Kink: developing a programming language on the JVM
Kink: developing a programming language on the JVM
Recently uploaded
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
Recently uploaded
(8)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Java オブジェクトの内部構造
1.
Java オブジェクトの内部構造
2011-08-20 宮川 拓 (@miyakawa_taku)
2.
自己紹介
名前 宮川 拓 Twitter @miyakawa_taku 職業 SI屋 仕事 Hadooper Java 歴 4年 JVM 上で動くオレオレ言語を作っています http://code.google.com/p/kink-lang/
3.
問題設定 • Java オブジェクトが
JVM 上でどの様な実体 として表現されているのかが知りたい 1. Java オブジェクトを表現する構造体 2. Java オブジェクトに対する参照の持ち方 (フィー ルド、一時変数、配列の要素) 3. Java オブジェクトの作成・破棄の動作
4.
今日読む主なソースコード • interpreter/bytecodeInterpreter.cpp
– オブジェクトがどのような構造体として扱われてい るかを見る • oop/oop.hpp • oop/instanceOop.hpp – オブジェクトのメモリイメージを見る • oop/oop.inline.hpp – フィールドへのアクセス方法を見る
5.
oop 実装クラスの階層 oop
ヒープ上に確保される構造体の総称 instanceOop ふつうのクラスのインスタンス methodOop メソッド constMethodOop ? methodDataOop メソッドのプロファイリングデータ arrayOop 配列のインスタンス objArrayOop 参照型の配列のインスタンス typeArrayOop プリミティブ型の配列のインスタンス constantPoolOop メソッドのコンスタントプール constantPoolCacheOop メソッド実行時情報 (フィールドオフセット等) symbolOop メソッド名、クラス名等の intern 表現 klassOop クラス markOop 他の oop のメタ情報の一部。GC対象外 compiledICHolderOop ?
6.
oop のメモリイメージ
oopDesc _mark: markOop /* GCのためのメタ情報 */ _klass: klassOop /* oop の型 */ xxxOopDesc oop 実装クラスごとのメンバ変数 後続領域 oop 実装クラスごとの追加情報 /* こんなイメージ */ typedef struct { int x; int y; char buf[0]; } bitmap; bitmap *b = malloc(sizeof(bitmap) + x * y); b->x = x; b->y = y; memcpy(b->buf, buf, x * y);
7.
instanceOop のメモリイメージ
oopDesc _mark: markOop /* GCのためのメタ情報 */ _klass: klassOop /* oop の型 */ instanceOopDesc /* 特有のメンバ変数は無し */ 後続領域 フィールド群 jint num = 42 oop title ⇒ “VOXXX!”: java.lang.String oop info = null フィールドの種類と数は _klass によって決まる
8.
触れなかった || 分からなかった所 •
narrowOop と UseCompressedOops – Compressed oops 機能関連 • constMethodOop って何? – これはあまり深くなさそう • compiledICHolderOop って何? – JIT コンパイルに絡んでいそう • JIT コンパイルによるメソッド実体の差し変え はどのクラスの担当?
Download now