Submit Search
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
Jun 21, 2022
3 likes
1,620 views
N
NTT DATA Technology & Innovation
バイトコードって言葉をよく目にするけど一体何なんだろう? (JJUG CCC 2022 Spring 発表資料) 2022年6月19日(日) NTTデータ 技術開発本部 阪田 浩一
Read more
1 of 79
Ad
Recommended
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
JJUG-CCC 日本Javaユーザーズグループクロスコミュニティカンファレンス 2018/12 登壇資料です。
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
DBマイグレーションツールのFlywayとER図生成ツールのSchemaSpyの紹介です。
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨ (2020年11⽉7⽇ JJUG CCC 2020 Fall 講演資料) NTTデータ 技術開発本部 先進コンピューティング技術センタ 阪⽥ 浩⼀
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
devfest tokyo 2017
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
Motonori Shindo
Docker / Kubernetesのネットワークアーキテクチャの解説と、代表的なCNIプラグインとしてFlannel、Calico、Canal、NSX-T Container Plugin (NCP) を取り上げ、それぞれの実装の比較しています。Japan Container Days v18.12 での講演資料です。
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
Teppei Sato
2021/02/25(木) Node学園 35時限目の発表資料 https://nodejs.connpass.com/event/203464/ Node.js の ES Modules 対応について
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
2021/11/24 「イミュータブルでゆこう」イベントの資料です。 データをリソースとイベントに場合分けして考えようという至極単純な話を1時間ほどしました。
Vacuum徹底解説
Vacuum徹底解説
Masahiko Sawada
PostgreSQL Conference Japan 2021の講演資料です。 https://www.postgresql.jp/jpug-pgcon2021#T3
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
NTT DATA Technology & Innovation
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~ (第34回PostgreSQLアンカンファレンス@オンライン 発表資料) 2022年7月29日 NTTデータ 技術開発本部 先進コンピューティング技術センタ 加藤 健
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
NTT DATA Technology & Innovation
YugabyteDBを使ってみよう (NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料) 2022年11月22日(火) NTTデータ 技術開発本部 先進コンピューティング技術センタ 笠原 辰仁
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
Concepts and tools of logging in Java. Javaにおけるログ出力の考え方と道具について説明. CC Attribution Licenseの元に公開します.
DockerとPodmanの比較
DockerとPodmanの比較
Akihiro Suda
Container Runtime Meetup #3 発表資料 (2021/1/28) https://runtime.connpass.com/event/198071/
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
OSSコンソーシアム DB比較セミナー(2018/1/26)での講演資料です。
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
NTT Tech Conference 2022 での「Dockerからcontainerdへの移行」の発表資料です https://ntt-techconf.connpass.com/event/241061/ 訂正: P2. . 誤: ``` Ship docker run -it --rm alpine Run docker push ghcr.io/ktock/myalpine:latest ``` 正: ``` Ship docker push ghcr.io/ktock/myalpine:latest Run docker run -it --rm alpine ```
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
- phpcon2022 の発表 - https://fortee.jp/phpcon-2022/proposal/b85ca73f-6383-4485-b2ae-4ec3e0913e72
実践イカパケット解析
実践イカパケット解析
Yuki Mizuno
実践イカパケット解析!!! 巷で話題のあのイカパケットを解析してみた話 a.k.a. Packetoon
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
Preferred Networks
2018年12月4日 Japan Container Days 講演資料 谷脇大輔 Preferred Networksでは1000個以上のGPUとInfiniBandからなるオンプレミスのクラスターを自社で構築しており、研究者が様々な目的、リソース量、実行時間の機械学習ジョブをKubernetes上で実行して研究成果を出しています。 KubernetesはKubeflowの登場など、機械学習基盤としても非常に注目されている一方で、現実的には未だ発展途上です。 講演では機械学習基盤としてのKubernetesの導入理由、その実用性と将来性、Preferred Networksの挑戦についてお話ししました。
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
関西DDD.java 勉強会 2016-3-5 (DDD Alliance 勉強会 2016-1-21 @東京の京都再演版)
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
Rakuten Tech Conference 2018 at 札幌
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
更新日時を排除していくことでそこそこのモデルを書けるようになる手法です。
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
NTT DATA Technology & Innovation
オススメのJavaログ管理手法 ~コンテナ編~ (Open Source Conference 2022 Online/Spring 発表資料) 2022年3月11日(金) NTTデータ 技術開発本部 佐藤 雄太
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
PostgreSQLをKubernetes上で活用するためのOperator紹介! (Cloud Native Database Meetup #3 発表資料) 2022年1月14日 NTTデータ 技術開発本部 先進コンピューティング技術センタ 藤井 雅雄
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
NTT DATA Technology & Innovation
より速く より運用しやすく 進化し続けるJVM (Java Developers Summit Online 2023 発表資料) 2023年2月28日(火) NTTデータ 技術開発本部 阪田 浩一
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
NTT DATA Technology & Innovation
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能 (Open Source Conference 2021 Online Fall 発表資料) 2021年10月22日(金) NTTデータ 鳥越 淳
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
Explaining “Best practices for writing Dockerfiles” Dockerfileを書くためのベストプラクティス【参考訳】v18.09 - Qiita https://qiita.com/zembutsu/items/a96b68277d699f79418d こちらをベースにした解説スライドです。
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
PostgreSQLのgitレポジトリから見える2022年の開発状況 (第38回PostgreSQLアンカンファレンス@オンライン 発表資料) 2023年1月27日(金) NTTデータ 技術開発本部 先進コンピューティング技術センタ 藤井 雅雄
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
2014/08/29 YAPC::Asia 2014
Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説
貴仁 大和屋
Tech Festa 2017で登壇した「Prometheus入門から運用まで徹底解説」のスライドです
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
OpenJDKのコミッタってどんなことしたらなったの? 解決してきた技術課題の事例から見えてくる必要な知識と技術 (JJUG CCC 2023 Spring) 2023年6月4日(日) NTT データ 技術開発本部 阪田 浩一
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
Atsushi Nakamura
本項はC# Tokyo オンライン LT 大会 2021/01にて発表した「C#メタプログラミング概略 in 2021」の発表資料です。
Ad
More Related Content
What's hot
(20)
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
NTT DATA Technology & Innovation
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~ (第34回PostgreSQLアンカンファレンス@オンライン 発表資料) 2022年7月29日 NTTデータ 技術開発本部 先進コンピューティング技術センタ 加藤 健
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
NTT DATA Technology & Innovation
YugabyteDBを使ってみよう (NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料) 2022年11月22日(火) NTTデータ 技術開発本部 先進コンピューティング技術センタ 笠原 辰仁
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
Concepts and tools of logging in Java. Javaにおけるログ出力の考え方と道具について説明. CC Attribution Licenseの元に公開します.
DockerとPodmanの比較
DockerとPodmanの比較
Akihiro Suda
Container Runtime Meetup #3 発表資料 (2021/1/28) https://runtime.connpass.com/event/198071/
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
OSSコンソーシアム DB比較セミナー(2018/1/26)での講演資料です。
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
NTT Tech Conference 2022 での「Dockerからcontainerdへの移行」の発表資料です https://ntt-techconf.connpass.com/event/241061/ 訂正: P2. . 誤: ``` Ship docker run -it --rm alpine Run docker push ghcr.io/ktock/myalpine:latest ``` 正: ``` Ship docker push ghcr.io/ktock/myalpine:latest Run docker run -it --rm alpine ```
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
- phpcon2022 の発表 - https://fortee.jp/phpcon-2022/proposal/b85ca73f-6383-4485-b2ae-4ec3e0913e72
実践イカパケット解析
実践イカパケット解析
Yuki Mizuno
実践イカパケット解析!!! 巷で話題のあのイカパケットを解析してみた話 a.k.a. Packetoon
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
Preferred Networks
2018年12月4日 Japan Container Days 講演資料 谷脇大輔 Preferred Networksでは1000個以上のGPUとInfiniBandからなるオンプレミスのクラスターを自社で構築しており、研究者が様々な目的、リソース量、実行時間の機械学習ジョブをKubernetes上で実行して研究成果を出しています。 KubernetesはKubeflowの登場など、機械学習基盤としても非常に注目されている一方で、現実的には未だ発展途上です。 講演では機械学習基盤としてのKubernetesの導入理由、その実用性と将来性、Preferred Networksの挑戦についてお話ししました。
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
関西DDD.java 勉強会 2016-3-5 (DDD Alliance 勉強会 2016-1-21 @東京の京都再演版)
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
Rakuten Tech Conference 2018 at 札幌
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
更新日時を排除していくことでそこそこのモデルを書けるようになる手法です。
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
NTT DATA Technology & Innovation
オススメのJavaログ管理手法 ~コンテナ編~ (Open Source Conference 2022 Online/Spring 発表資料) 2022年3月11日(金) NTTデータ 技術開発本部 佐藤 雄太
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
PostgreSQLをKubernetes上で活用するためのOperator紹介! (Cloud Native Database Meetup #3 発表資料) 2022年1月14日 NTTデータ 技術開発本部 先進コンピューティング技術センタ 藤井 雅雄
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
NTT DATA Technology & Innovation
より速く より運用しやすく 進化し続けるJVM (Java Developers Summit Online 2023 発表資料) 2023年2月28日(火) NTTデータ 技術開発本部 阪田 浩一
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
NTT DATA Technology & Innovation
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能 (Open Source Conference 2021 Online Fall 発表資料) 2021年10月22日(金) NTTデータ 鳥越 淳
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
Explaining “Best practices for writing Dockerfiles” Dockerfileを書くためのベストプラクティス【参考訳】v18.09 - Qiita https://qiita.com/zembutsu/items/a96b68277d699f79418d こちらをベースにした解説スライドです。
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
PostgreSQLのgitレポジトリから見える2022年の開発状況 (第38回PostgreSQLアンカンファレンス@オンライン 発表資料) 2023年1月27日(金) NTTデータ 技術開発本部 先進コンピューティング技術センタ 藤井 雅雄
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
2014/08/29 YAPC::Asia 2014
Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説
貴仁 大和屋
Tech Festa 2017で登壇した「Prometheus入門から運用まで徹底解説」のスライドです
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
NTT DATA Technology & Innovation
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
NTT DATA Technology & Innovation
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
DockerとPodmanの比較
DockerとPodmanの比較
Akihiro Suda
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
実践イカパケット解析
実践イカパケット解析
Yuki Mizuno
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
Preferred Networks
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
NTT DATA Technology & Innovation
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
NTT DATA Technology & Innovation
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
NTT DATA Technology & Innovation
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説
貴仁 大和屋
Similar to バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
(20)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
OpenJDKのコミッタってどんなことしたらなったの? 解決してきた技術課題の事例から見えてくる必要な知識と技術 (JJUG CCC 2023 Spring) 2023年6月4日(日) NTT データ 技術開発本部 阪田 浩一
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
Atsushi Nakamura
本項はC# Tokyo オンライン LT 大会 2021/01にて発表した「C#メタプログラミング概略 in 2021」の発表資料です。
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
NTT DATA Technology & Innovation
Java 18で入ったJVM関連の(やや細かめな)改善 (JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料) 2022年3月29日(火) NTTデータ 技術開発本部 阪田 浩一
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
Kouji Matsui
セッションビデオ: https://www.youtube.com/watch?v=YF7n8YqEfCg ブログ: https://www.kekyo.net/2019/10/07/6995 2019.10.5 .NET Conf 2019 meetup in AICHI https://centerclr.connpass.com/event/143949/
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Developers Summit
Rubyエンジニアのみなさんは、日々楽しくRubyプログラムの開発をされているこ とと思います。しかしながら、組み込み機器開発の世界では今でもC言語やアセ ンブラ言語などを用いた昔ながらの開発が主流であり、Rubyエンジニアで広く使 われているテスト駆動開発など最新の開発手法が普及しているとは言いにくい状 況です。このような中、2012年4月に軽量Ruby(mruby)がgithub上で公開されまし た。IIJでは、Rubyユーザでも楽しく快適に組み込みアプリを開発できる環境を 提供するために、独自開発のルータ「SEIL」上で動作するmrubyの実行環境を作 りました。本セッションでは、日々のちょっとした不便を改善するためにmruby を活用する方法についてご紹介します。また、mrubyはアプリに組み込むことで も便利に使うことができます。 Ruby好きのエンジニアのみなさん、是非ご参加く ださい。
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
Yukihiko SAWANOBORI
普通のRailsデプロイ事例として読んでもらっても大丈夫だと思います。 Z Cloudのコンパネをデプロイする様子をそのままスライドにしました、一部で普段の作業内容をシェアして欲しいという要望があったので。
StackStorm Workflowの設計
StackStorm Workflowの設計
Shu Sugimoto
StackStorm Workflowの設計
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
NTT DATA Technology & Innovation
オレ流のOpenJDKの開発環境 (JJUG CCC 2019 Fall講演資料、2019年11月23日) NTTデータ 技術開発本部 先進基盤技術グループ 末永 恭正 / Yasumasa Suenaga
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Takashi Sogabe
Devsumi2013 2月15日 15-E-2 講演資料をアップロードしました。
【GridDB入門】 IoT、そしてサイバー・フィジカル・システムを支える オープンソースデータベース GridDB ~ こだわりの理由と実現方法のポイント
【GridDB入門】 IoT、そしてサイバー・フィジカル・システムを支える オープンソースデータベース GridDB ~ こだわりの理由と実現方法のポイント
griddb
新型コロナウイルス影響が拡大している状況を受け、参加者および関係者の健康・安全面を第一に考慮した結果、開催の中止となった「オープンソースカンファレンス 2020 Tokyo/Spring」で2020年2月21日講演予定だった資料 サイバー・フィジカル・システム・・・自動運転、スマートグリッド、スマート工場、スマートビルディング・・・ サイバー・フィジカル・システムは、フィジカル空間(実世界)にある多様なデータを収集し、サイバー空間で、大規模データ処理技術を駆使し、分析・知識化を行い、そこで創出した情報・価値によって、これまで「経験と勘」に頼っていた事象を効率化し、産業の活性化や社会問題の解決を図っていきます。サイバー・フィジカル・システムには、センサーネットワークが生みだす膨大な時系列データをリアルタイムに処理が可能なデータ基盤が必要です。 YouTubeで公開しているショートビデオ「サイバー・フィジカル・システムを支えるスケールアウト型分散データベース GridDB」https://youtu.be/ALK9RReUSpI で述べている通り、GridDBはサイバー・フィジカル・システムの実現に必要な要件を満たしたオープンなデータベースです。 今回、なぜGridDBは、サイバー・フィジカル・システムの実現に必要な要件を満たしているのか? GridDBの概要と特長、特に、「データモデル」、「高速性」、「拡張性」、そして「可用性」にこだわる理由とその実現方法のポイントついて解説します。また、活用事例やオープンイノベーション活動などについても紹介します。 https://event.ospn.jp/osc2020-spring/session/22110 https://www.ospn.jp/osc2020-spring/modules/eguide/event.php?eid=15
Mbed祭り 2017@春の新横浜 20170225 竹之下
Mbed祭り 2017@春の新横浜 20170225 竹之下
Koyo Takenoshita
Introduction of javascript for mbed.
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料) 2024年4月24日(水) 株式会社NTTデータグループ 技術開発本部 笠原 辰仁
自然言語処理に適した ニューラルネットのフレームワーク - - - DyNet - - -
自然言語処理に適した ニューラルネットのフレームワーク - - - DyNet - - -
Ogushi Masaya
自然言語処理に適したニューラルネットワークのフレームワークの一つでDyNetの紹介
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
susumu tanaka
MANABIYA DAY1 ランチセッション 発表資料
20160115nodered design patterns
20160115nodered design patterns
BMXUG
Node-REDのデザインパターン
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
智啓 出川
長岡技術科学大学 2015年度GPGPU実践プログラミング(全15回,学部4年対象講義) 第4回GPUでの並列プログラミング(ベクトル和,移動平均,差分法) 2015年度GPGPU実践プログラミング ・第1回 GPGPUの歴史と応用例 http://www.slideshare.net/ssuserf87701/2015gpgpu1-59179080 ・第2回 GPUのアーキテクチャとプログラム構造 http://www.slideshare.net/ssuserf87701/2015gpgpu2-59179215 ・第3回 GPGPUプログラミング環境 http://www.slideshare.net/ssuserf87701/2015gpgpu3-59179255 ・第3回補足 GROUSEの利用方法 http://www.slideshare.net/ssuserf87701/2015gpgpu3-59183677 ・第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法) http://www.slideshare.net/ssuserf87701/2015gpgpu4-59179449 ・第5回 GPUのメモリ階層 http://www.slideshare.net/ssuserf87701/2015gpgpu5-59179536 ・第6回 パフォーマンス解析ツール http://www.slideshare.net/ssuserf87701/2015gpgpu6-59179577 ・第7回 総和計算 http://www.slideshare.net/ssuserf87701/2015gpgpu7-59179639 ・第8回 総和計算(高度な最適化) http://www.slideshare.net/ssuserf87701/2015gpgpu8-59179686 ・第9回 行列計算(行列-行列積) http://www.slideshare.net/ssuserf87701/2015gpgpu9-59179722 ・第10回 行列計算(行列-行列積の高度な最適化) http://www.slideshare.net/ssuserf87701/2015gpgpu10-59179759 ・第11回 画像処理 http://www.slideshare.net/ssuserf87701/2015gpgpu11-59179789 ・第12回 偏微分方程式の差分計算 http://www.slideshare.net/ssuserf87701/2015gpgpu12-59179972 ・第13回 多粒子の運動 http://www.slideshare.net/ssuserf87701/2015gpgpu13-59180018 ・第14回 N体問題 http://www.slideshare.net/ssuserf87701/2015gpgpu14-59180054 ・第15回 GPU最適化ライブラリ http://www.slideshare.net/ssuserf87701/2015gpgpu15-59180086 2015年度先端GPGPUシミュレーション工学特論 ・第1回 先端シミュレーションおよび産業界におけるGPUの役割 http://www.slideshare.net/ssuserf87701/2015gpgpu1-59180313 2015年度GPGPU実践基礎工学 ・第1回 学際的分野における先端シミュレーション技術の歴史 http://www.slideshare.net/ssuserf87701/2015gpgpu1 講義には長岡技術科学大学のGPGPUシステム(GROUSE)を利用しています。 開発環境 CPU Intel Xeon X5670 × 32 GPU NVIDIA Tesla M2050(Fermi世代) × 64 CUDA 4.0(諸般の事情によりバージョンアップされていません) PGI Fortran 11.3
業務で ISUCON することになった話.pdf
業務で ISUCON することになった話.pdf
TakuyaFukuoka2
NTT Communications / Tech Night 2022-08-26
RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2
Kuniaki Igarashi
Ruby会議2009 Lightning Talks 前説 IRC メッセージ表示機能付きタイマー "TwYM" ( 日本語 + English )
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
Yuta Matsumura
https://alterbooth.connpass.com/event/164976/
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
Atsushi Nakamura
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
NTT DATA Technology & Innovation
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
Kouji Matsui
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Developers Summit
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
Yukihiko SAWANOBORI
StackStorm Workflowの設計
StackStorm Workflowの設計
Shu Sugimoto
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
NTT DATA Technology & Innovation
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Takashi Sogabe
【GridDB入門】 IoT、そしてサイバー・フィジカル・システムを支える オープンソースデータベース GridDB ~ こだわりの理由と実現方法のポイント
【GridDB入門】 IoT、そしてサイバー・フィジカル・システムを支える オープンソースデータベース GridDB ~ こだわりの理由と実現方法のポイント
griddb
Mbed祭り 2017@春の新横浜 20170225 竹之下
Mbed祭り 2017@春の新横浜 20170225 竹之下
Koyo Takenoshita
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
自然言語処理に適した ニューラルネットのフレームワーク - - - DyNet - - -
自然言語処理に適した ニューラルネットのフレームワーク - - - DyNet - - -
Ogushi Masaya
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
susumu tanaka
20160115nodered design patterns
20160115nodered design patterns
BMXUG
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
智啓 出川
業務で ISUCON することになった話.pdf
業務で ISUCON することになった話.pdf
TakuyaFukuoka2
RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2
Kuniaki Igarashi
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
Yuta Matsumura
Ad
More from NTT DATA Technology & Innovation
(20)
2025年現在のNewSQL (最強DB講義 #36 発表資料)
2025年現在のNewSQL (最強DB講義 #36 発表資料)
NTT DATA Technology & Innovation
2025年現在のNewSQL (最強DB講義 #36 発表資料) 2025年4月23日(水) NTTデータ OSSビジネス推進室 小林 隆浩
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
NTT DATA Technology & Innovation
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaOne 2025) 19 March 2025 (Wed) Koichi Sakata NTT DATA Group Corporation
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
NTT DATA Technology & Innovation
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025) 6 March 2025 (Thu) Koichi Sakata NTT DATA Group Corporation
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料) 2025年3月27日(木) NTTデータグループ Innovation技術部 松永 創
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料) 2025年3月5日(水) NTTデータグループ Innovation技術部 末永 恭正
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
NTT DATA Technology & Innovation
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference 2025 Tokyo/Spring 発表資料) 2025年2月21日(金) NTTデータグループ Innovation技術部 小茶 健一
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
NTT DATA Technology & Innovation
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring 発表資料) 2025年2月21日(金) NTTデータグループ Innovation技術部 小林 隆浩、石井 愛弓
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料) 2025年1月31日(金) NTTデータグループ Innovation技術部 笠原 辰仁
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料) 2025年1月31日(金) NTTデータグループ Innovation技術部 藤井 雅雄
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
NTT DATA Technology & Innovation
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source Conference 2025 Osaka 講演資料) 2025年1月25日(土) NTTデータグループ Innovation技術部 佐々⽊ 徹、倉本 健
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料) 2024年12月20日(金) NTTデータグループ Innovation技術部 石井 愛弓
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
NTT DATA Technology & Innovation
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI (Japan Enduser Group | Databricks Innovation) DAIS Recap 講演資料) 2024年10月1日(火) NTTデータグループ Innovation技術部 内藤佑太、北波紘子
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
NTT DATA Technology & Innovation
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料) 2024年12月6日(金) NTTデータグループ Innovation技術部 小林 隆浩
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
NTT DATA Technology & Innovation
静かに変わってきたクラスファイルを詳細に調べて楽しむ (JJUG CCC 2024 Fall講演資料) 2024年10月27日(日) NTTデータグループ Innovation技術部 阪田 浩一
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
NTT DATA Technology & Innovation
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 Tokyo 講演資料) 2024年10月9日(水) 株式会社NTTデータMSE 次世代ビジネス推進室 今村 浩人
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料)
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料) 2024年10月12日(土) NTTデータグループ Innovation技術部 笠原 辰仁
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料) 2024年10月12日(土) NTTデータグループ Innovation技術部 池田 真洋
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料) 2024年10月12日(土) NTTデータグループ Innovation技術部 藤井 雅雄
アウトプット100回!YOWフレームワークで実践するふりかえりとその効果 (XP祭り2024 登壇資料)
アウトプット100回!YOWフレームワークで実践するふりかえりとその効果 (XP祭り2024 登壇資料)
NTT DATA Technology & Innovation
アウトプット100回!YOWフレームワークで実践するふりかえりとその効果 (XP祭り2024 登壇資料) 2024年9月28日(土) NTTデータグループ Apps & Data技術部 小柴 秀人
GSF Global Summit 2024 (Green Software Foundation Global Summit 2024 Tokyo 講演資料)
GSF Global Summit 2024 (Green Software Foundation Global Summit 2024 Tokyo 講演資料)
NTT DATA Technology & Innovation
GSF Global Summit 2024 (Green Software Foundation Global Summit 2024 Tokyo 講演資料) 2024年10月9日(水) NTTデータグループ Innovation技術部
2025年現在のNewSQL (最強DB講義 #36 発表資料)
2025年現在のNewSQL (最強DB講義 #36 発表資料)
NTT DATA Technology & Innovation
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
NTT DATA Technology & Innovation
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
NTT DATA Technology & Innovation
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
NTT DATA Technology & Innovation
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
NTT DATA Technology & Innovation
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
NTT DATA Technology & Innovation
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
NTT DATA Technology & Innovation
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
NTT DATA Technology & Innovation
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
NTT DATA Technology & Innovation
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
NTT DATA Technology & Innovation
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料)
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
アウトプット100回!YOWフレームワークで実践するふりかえりとその効果 (XP祭り2024 登壇資料)
アウトプット100回!YOWフレームワークで実践するふりかえりとその効果 (XP祭り2024 登壇資料)
NTT DATA Technology & Innovation
GSF Global Summit 2024 (Green Software Foundation Global Summit 2024 Tokyo 講演資料)
GSF Global Summit 2024 (Green Software Foundation Global Summit 2024 Tokyo 講演資料)
NTT DATA Technology & Innovation
Ad
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
1.
© 2022 NTT
DATA Corporation バイトコードって言葉をよく目にするけど一体何なんだろう? JJUG CCC 2022 Spring NTTデータ 阪田 浩一 2022年6月19日 • 想定視聴者: Javaプログラムを書いて実行したことがあればどなたもOK! • セッション録画公開: 有 • スライド公開: 有 - SlideShare(https://www.slideshare.net/nttdata-tech)を予定
2.
© 2022 NTT
DATA Corporation 2 自己紹介 • Javaチャンピオン • OpenJDK Author • 通算パッチ 10数個 • 株式会社NTTデータ 所属 • JVMがとにかく好き Koichi Sakata 阪田 浩一 jyukutyo
3.
© 2022 NTT
DATA Corporation 3 このセッションで話すこと 話すこと • プログラムを実行するまでの過程 • Javaバイトコードの概要 • Javaバイトコードを確認する方法 • 実は身近なバイトコード操作
4.
© 2022 NTT
DATA Corporation 4 このセッションで話すこと 話さないこと 話すこと • プログラムを実行するまでの過程 • Javaバイトコードの概要 • Javaバイトコードを確認する方法 • 実は身近なバイトコード操作 話さないこと • バイトコード操作の具体的なコードおよび詳細 • クラスファイル自体の内容 • その他上級者が求める範囲の内容
5.
© 2022 NTT
DATA Corporation 5 このセッションのゴール 参加された方が Javaプログラムを実行する仕組みの一部として バイトコードの役割や意味を他者に説明できるようになること 注意事項 • Javaコードはほぼ登場しません • 説明のため厳密には正確でない表現をすることがあります
6.
© 2022 NTT
DATA Corporation 6 プログラムを書いてから 実行するまで
7.
© 2022 NTT
DATA Corporation 7 Javaプログラムを書いてから実行するまで Javaプログラムを書き ファイルに保存する
8.
© 2022 NTT
DATA Corporation 8 Javaプログラムを書いてから実行するまで Javaプログラムを書き ファイルに保存する コンパイルし クラスファイルを生成する クラスを指定して実行する 注: Java 11から単一ファイルのとき`java HelloWorld.java`で実行できますが 内部的な処理は上と同一です プログラムを実行するまでに Javaではなぜこの手順が必要なの?
9.
© 2022 NTT
DATA Corporation 9 ハードウェアでの命令実行 • 機械語(マシン語)しか理解しない もうJavaじゃなくて機械語でプログラムを書けば いいんじゃないの?
10.
© 2022 NTT
DATA Corporation 10 ハードウェアでの命令実行 • 機械語(マシン語)しか理解しない • 機械語は0と1からなり 読み書きが困難である • 機 械 語 は CPU ア ー キ テ ク チ ャ や 使 用 す る OS に よって異なる それは辛い… じゃあJavaはコンパイルすると 機械語を生成するの?
11.
© 2022 NTT
DATA Corporation 11 それはC言語 どうしてJavaはこのやり方にしなかったの? Cプログラムを書き ファイルに保存する コンパイルし[1] 機械語を含んだ実行可能ファイルを生成する ファイルを指定して実行する [1]: プリプロセッサやリンカもコンパイラと一緒に動作しています
12.
© 2022 NTT
DATA Corporation 12 コンパイルで機械語を生成することの短所 コンパイルをした環境(OS CPU)でのみ動作する[1] • 実行可能ファイルを他の環境に配置しても実行できないということ - 再コンパイルを必要とする [1]: 正確には指定することで異なる環境向けにコンパイルできますが、今度はその環境でしか動作しません
13.
© 2022 NTT
DATA Corporation 13 コンパイルで機械語を生成することの短所 コンパイルをした環境(OS CPU)でのみ動作する[1] • 実行可能ファイルを他の環境に配置しても実行できないということ - 再コンパイルを必要とする [1]: 正確には指定することで異なる環境向けにコンパイルできますが、今度はその環境でしか動作しません 開発はmacOS 本番環境はLinux みたいなことがやりづらそう… そもそもコンパイルなんてなしにして プログラム実行時にソースコードから機械語に変えて 実行しちゃえばいいんじゃない?
14.
© 2022 NTT
DATA Corporation 14 インタープリタでの実行 def hello(name = "World") message = "Hello, " + name + ".¥n" puts message end hello() 1 2 3
15.
© 2022 NTT
DATA Corporation 15 インタープリタでの実行 def hello(name = "World") message = "Hello, " + name + ".¥n" puts message end hello() 1 2 3 • プ ロ グ ラ ム 実 行 時 に ソ ー ス コ ー ド [1] を 1 文 ず つ 機械語に変換し実行する(逐次解釈) • そのためこの手法を取るとコンパイルが不要となる • 実行時に解釈する処理は重く 動作が遅くなる インタ プリタ 実行 [1]: 厳密にはインタプリタの解釈の対象はソースコードに限定されるものではありません(後述) 注: RubyにはJITコンパイルでの実行もあります
16.
© 2022 NTT
DATA Corporation 16 2つのやり方とJava コンパイルして機械語を生成するやり方は 異なる環境で実行できない短所… インタープリタで逐次解釈するやり方は 動作が遅くなる短所…
17.
© 2022 NTT
DATA Corporation 17 2つのやり方とJava コンパイルして機械語を生成するやり方は 異なる環境で実行できない短所… インタープリタで逐次解釈するやり方は 動作が遅くなる短所… それにJavaのこと何も話していないよ! Javaは2つの方式を合わせ持っている バイトコードは2つを合わせる手段である
18.
© 2022 NTT
DATA Corporation 18 Javaコードと機械語 Javaコード • 機 械 語 に 変 え る の は 時間がかかる • テ キ ス ト フ ァ イ ル な の で どんなOSでも扱える
19.
© 2022 NTT
DATA Corporation 19 Javaコードと機械語 Javaコード • 機 械 語 に 変 え る の は 時間がかかる • テ キ ス ト フ ァ イ ル な の で どんなOSでも扱える 機械語 • そ の ま ま ハ ー ド ウ ェ ア で 実行できるため 速い • 特 定 の 環 境 で の み 動作する
20.
© 2022 NTT
DATA Corporation 20 Javaコードと機械語 Javaコード • 機 械 語 に 変 え る の は 時間がかかる • テ キ ス ト フ ァ イ ル な の で どんなOSでも扱える 機械語 • そ の ま ま ハ ー ド ウ ェ ア で 実行できるため 速い • 特 定 の 環 境 で の み 動作する ソースコードに比べて 機械語に変換しやすい ものにすれば 動作もある程度速く どんな環境でも利用できる 2つの中間に位置する そんなコードを作ろう!
21.
© 2022 NTT
DATA Corporation 21 Javaバイトコード コンパイル時に生成する • javacなどでのコンパイルのこと
22.
© 2022 NTT
DATA Corporation 22 Javaバイトコード コンパイル時に生成する • javacなどでのコンパイルのこと JVM独自の表現なのでどんな環境でも利用できる • その代わりバイトコードの実行にはJVMが必要となる - JVMが多数のプラットフォームをサポートするため大きな問題ではない
23.
© 2022 NTT
DATA Corporation 23 Javaプログラムを実行するということ Javaコード Javaバイトコード CAFE BABE 0000 javacなどでの コンパイル
24.
© 2022 NTT
DATA Corporation 24 Javaプログラムを実行するということ Javaコード 機械語 Javaバイトコード CAFE BABE 0000 javacなどでの コンパイル JVMの インタプリタ 注: JVMにはJITコンパイルでの実行もあります
25.
© 2022 NTT
DATA Corporation 25 Javaプログラムを実行するということ Javaコード 機械語 Javaバイトコード CAFE BABE 0000 javacなどでの コンパイル JVMの インタプリタ バイトコードはJavaコードよりは機械語に変換しやすいから インタプリタでの実行も向上する! バイトコードは環境に依存しなから JVMがあればどこでも動く! 注: JVMにはJITコンパイルでの実行もあります
26.
© 2022 NTT
DATA Corporation 26 JVMとJavaバイトコード
27.
© 2022 NTT
DATA Corporation 27 JVMでの演算 JVMは「スタック」上で演算をする • ハードウェア上ではCPUとメモリを使って処理をしているが 計算モデルとしてそう設計されている - スタックマシン
28.
© 2022 NTT
DATA Corporation 28 JVMでの演算 JVMは「スタック」上で演算をする • ハードウェア上ではCPUとメモリを使って処理をしているが 計算モデルとしてそう設計されている - スタックマシン • 例: 1 + 2の演算イメージ - 1、2という数値を 順にスタックに置き +という演算を スタックから2個の数値を取って 計算し結果をスタックに置く
29.
© 2022 NTT
DATA Corporation 29 JVMでの演算 JVMは「スタック」上で演算をする • もちろんハードウェア上ではCPUとメモリを使って処理をしているが 計算モデルとしてそう設計されている(スタックマシン) • 例: 1 + 2の演算イメージ - 最初スタックは空である - 1という数値を スタックに置く 1
30.
© 2022 NTT
DATA Corporation 30 JVMでの演算 JVMは「スタック」上で演算をする • もちろんハードウェア上ではCPUとメモリを使って処理をしているが 計算モデルとしてそう設計されている(スタックマシン) • 例: 1 + 2の演算イメージ - 1、2という数値を 順にスタックに置く +という演算は スタックから2個の数値を取り 結果をまたスタックに置く 1 1 2 3 2 1 + - int add(int a, int b)を使う呼び出し側も同じイメージでよい * 呼び出されたaddメソッド内の処理は別途あるけれども(詳細は後述)
31.
© 2022 NTT
DATA Corporation 31 JVMとJavaバイトコード 単純に言えばJavaバイトコードはJavaプログラムの内容を スタックでの処理として表現する
32.
© 2022 NTT
DATA Corporation 32 JVMとJavaバイトコード 単純に言えばJavaバイトコードはJavaプログラムの内容を スタックでの処理として表現する • スタックに何かを置いたり(プッシュ) 一番上から取ったり(ポップ) インスタンスを生成したり メソッドを呼び出したり など その表現のために使用するのがバイトコードの命令セット
33.
© 2022 NTT
DATA Corporation 33 Javaバイトコードの命令セット 200種類以上ある • Java仮想マシン(JVM)仕様に定義されている - https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5
34.
© 2022 NTT
DATA Corporation 34 Javaバイトコードの命令セット 200種類以上ある • Java仮想マシン(JVM)仕様に定義されている - https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5 • 命令コード(オペコード)が1バイト長 - 1バイト = 28 = 256種類までしか定義できないことになる - Javaのリリース以来 追加した命令コードは1つだけ * Project Valhallaで2つ追加する見込み
35.
© 2022 NTT
DATA Corporation 35 Javaバイトコードの命令セット 200種類以上ある • Java仮想マシン(JVM)仕様に定義されている - https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5 • 命令コード(オペコード)が1バイト長 - 1バイト = 28 = 256種類までしか定義できないことになる - Javaのリリース以来 追加した命令コードは1つだけ * Project Valhallaで2つ追加する見込み • 暗記する必要はとくにない - 型違い(プリミティブ型各種類と参照型で同じ内容)の命令コードも多い - スタックでの利用をイメージすると理解しやすい
36.
© 2022 NTT
DATA Corporation 36 Javaバイトコードの命令コードの読み方 接頭辞の例 i... int[1] l... long f... float d... double [1]: intの他byte、short、char、booleanなどもJVMではintで扱います(例外有)
37.
© 2022 NTT
DATA Corporation 37 Javaバイトコードの命令セットの読み方 接頭辞の例 i... int[1] l... long f... float d... double 命令内容の例 const 定数をプッシュ add,sub,mul,div 2つポップしてそれらで 四則演算し結果をプッシュ [1]: intの他byte、short、char、booleanなどもJVMではintで扱います(例外有) 接頭辞にある型と命令を組み合わせで 数が多くなっているのか 命令の例: iconst_1: スタックに定数1をプッシュ idiv:スタックにあるint値を2つポップして除算 結果をスタックにプッシュ fmul: スタックにあるfloat値を2つポップして乗算 結果をスタックにプッシュ
38.
© 2022 NTT
DATA Corporation 38 Javaバイトコードの命令セットの読み方 接頭辞の例 i... int[1] l... long f... float d... double 命令内容の例 const 定数をプッシュ add,sub,mul,div 2つポップしてそれらで 四則演算し結果をプッシュ [1]: intの他byte、short、char、booleanなどもJVMではintで扱います(例外有) 1 + 2は 1. iconst_1 2. iconst_2 3. iadd となる 3 2 1 + 1 2 命令コードからスタックを操作する絵を描いてみると わかりやすいなあ
39.
© 2022 NTT
DATA Corporation 39 Javaバイトコードの命令セットの読み方 接頭辞の例 i... int[1] l... long f... float d... double a... 参照型 *a... 1文字目の型の配列 ia...だとint配列 命令内容の例 const 定数をプッシュ load ローカル変数をプッシュ store ローカル変数に保存 return 戻り値として返す 2 プリミティブ型変換 (例: i2d) add,sub,mul,div 四則演算 neg 符号反転 [1]: intの他byte、short、char、booleanなどもJVMではintで扱います(例外有) 注: 各命令でスタックからのポップやスタックへのプッシュがあります 注: 接頭辞と命令内容のすべての組み合わせが 命令に存在するわけではありません
40.
© 2022 NTT
DATA Corporation 40 メソッド処理のバイトコード表現を考えてみよう int add(int a, int b) { return a + b; } 引数aとbはどうなるの? スタックにプッシュしたい 録画再生の方は停止して30秒間考えてみましょう
41.
© 2022 NTT
DATA Corporation 41 メソッド処理のバイトコード表現を考えてみよう int add(int a, int b) { return a + b; } a b iload_1はローカル変数の1番目を スタックにプッシュするのか iconst_1の_1とは違うんだ 1. メソッド開始時スタックは空 2. iload_1 • 引数はローカル変数に保存されている - インスタンスメソッドではローカル変数の 0番にthis 1番目以降に引数の値が入っている 3. iload_2 - 引数の2つ目である2番目をプッシュ a
42.
© 2022 NTT
DATA Corporation 42 メソッド処理のバイトコード表現を考えてみよう int add(int a, int b) { return a + b; } a+b b a + a b 1. メソッド開始時スタックは空 2. iload_1 • 引数はローカル変数に保存されている - インスタンスメソッドではローカル変数の 0番にthis 1番目以降に引数の値 3. iload_2 4. iadd 5. ireturn a メソッドの 呼び出し元へ
43.
© 2022 NTT
DATA Corporation 43 組み合わせでない命令の例 メソッド呼び出し invokestatic staticメソッド呼出 invokevirtual インスタンスメソッド invokespecial コンストラクタ、private、 スーパークラスメソッド invokeinterface インタフェースメソッド invokedynamic 動的に算出した コールサイトの呼出[1] [1]: 複雑な仕組みのためこのセッション内に理解する必要はありません invoke...はメソッド呼び出しと 捉えておけばいいか このinvokedynamicこそが 後から追加された唯一のバイトコード
44.
© 2022 NTT
DATA Corporation 44 組み合わせでない命令の例 メソッド呼び出し invokestatic staticメソッド呼出 invokevirtual インスタンスメソッド 他 new,newarray インスタンス生成 pop,pop2 スタックからポップ dup... 複製をプッシュ putfield,putstatic フィールドに値をセット ldc... Constant Poolの値をプッシュ monitorenter,monitorexit ロックの確保、解放 注:すべての命令は 記載していません invokespecial コンストラクタ、private、 スーパークラスメソッド invokeinterface インタフェースメソッド invokedynamic 動的に算出した コールサイトの呼出[1] [1]: 複雑な仕組みのためこのセッション内に理解する必要はありません
45.
© 2022 NTT
DATA Corporation 45 メソッド呼び出しのバイトコード表現を考えてみよう 録画再生の方は停止して30秒間考えてみましょう class Sample { int add(int a, int b) { return a + b; } } // 以下はメインメソッドの中とする Sample s = new Sample(); s.add(1, 2); 引数aとbはどうなるの? スタックにプッシュしたい
46.
© 2022 NTT
DATA Corporation 46 メソッド呼び出しのバイトコード表現を考えてみよう class Sample { int add(int a, int b) { return a + b; } } // 以下はメインメソッドの中とする Sample s = new Sample(); int a = s.add(1, 2); #数字 はConstant Pool(定数プール) を番号で参照している クラス名 メソッド名なども CPに保持している 1. new #7 2. dup 3. invokespecial #9 4. astore_1 5. aload_1 6. iconst_1 7. iconst_2 8. invokevirtual #10 9. istore_2 10. return なぜdupして 複製するの?
47.
© 2022 NTT
DATA Corporation 47 インスタンス生成とコンストラクタ呼び出し JVMではこの2つは別の処理 Sample s = new Sample(); 1. new #7 2. dup 3. invokespecial #9 4. astore_1 Sam Sam Sam newでSampleインスタンスへの 参照を積む
48.
© 2022 NTT
DATA Corporation 48 インスタンス生成とコンストラクタ呼び出し JVMではこの2つは別の処理 Sample s = new Sample(); 1. new #7 2. dup 3. invokespecial #9 4. astore_1 Sam Sam Sam Sam Sam invokespecialで コンストラクタ 呼び出し Sam ローカル変数1に 保存 コンストラクタ実行 ローカル変数への保存 それぞれで参照を使用するため 複製して2つ用意した • 何かをするためにはスタックから取り出さなければならない newでSampleインスタンスへの 参照を積む
49.
© 2022 NTT
DATA Corporation 49 Javaバイトコードを 実際に見てみよう
50.
© 2022 NTT
DATA Corporation 50 Javaバイトコードとクラスファイル バイトコードはクラスファイルに含まれる • クラスファイルの中を見てみよう!
51.
© 2022 NTT
DATA Corporation 51 クラスファイルの中 - add()を呼び出すクラス げ、げぇー iconstとかiaddとかない どういうこと??
52.
© 2022 NTT
DATA Corporation 52 Javaバイトコードとクラスファイル バイトコードはクラスファイルに含まれる クラスファイルはバイナリファイル • テキストファイルではない
53.
© 2022 NTT
DATA Corporation 53 Javaバイトコードとクラスファイル バイトコードはクラスファイルに含まれる クラスファイルはバイナリファイル • テキストファイルではない • 各バイトコード命令に対応する数字がファイルに含まれる iconst_1 4 (0x4) iconst_2 5 (0x5) iadd 96 (0x60) 今まで出てきたのは バイトコードのニーモニックということか… じゃあクラスファイルを逆アセンブルすればいい?
54.
© 2022 NTT
DATA Corporation 54 javapコマンド クラスファイルを逆アセンブルするツール • https://docs.oracle.com/en/java/javase/17/docs/specs/man/javap.html • JDKに含まれる - JAVA_HOMEにパスを通していればすぐに使える
55.
© 2022 NTT
DATA Corporation 55 javapコマンド クラスファイルを逆アセンブルするツール • https://docs.oracle.com/en/java/javase/17/docs/specs/man/javap.html • JDKに含まれる - JAVA_HOMEにパスを通していればすぐに使える • -c: コードを逆アセンブル または -v: 詳細に出力 を使う • 詳細は--helpで確認できる
56.
© 2022 NTT
DATA Corporation 56 javapコマンドでの逆アセンブル
57.
© 2022 NTT
DATA Corporation 57 Constant Poolも見れる javap -v の出力に含まれる
58.
© 2022 NTT
DATA Corporation 58 <init>は コンストラクタのことを 指しているんだ
59.
© 2022 NTT
DATA Corporation 59 バイトコードの楽しみ方
60.
© 2022 NTT
DATA Corporation 60 バイトコードの楽しみ方 1. 読む! 2. 書き換える!
61.
© 2022 NTT
DATA Corporation 61 バイトコードの楽しみ方 1. 読む! 2. 書き換える!
62.
© 2022 NTT
DATA Corporation 62 バイトコードを読む Javaの新バージョンリリースで新機能が出た • 新機能を使うコードを書いてバイトコードを見る
63.
© 2022 NTT
DATA Corporation 63 バイトコードを読む Javaの新バージョンリリースで新機能が出た • 新機能を使うコードを書いてバイトコードを見る 新バージョンで同じ処理でも バイトコード表現に変更があることも
64.
© 2022 NTT
DATA Corporation 64 バイトコードを読む Javaの新バージョンリリースで新機能が出た • 新機能を使うコードを書いてバイトコードを見る 新バージョンで同じ処理でも バイトコード表現に変更があることも - 例: ネストしたクラスを作り インナークラスから アウタークラスのprivateメソッドを呼び出すコード * Java 11で変わった(Nestmates/ネストメイト)
65.
© 2022 NTT
DATA Corporation 65 Nestmates public class Outer { private void m_outerpriv() { System.out.println("called m_outerpriv"); } class Inner { public void test() { new Outer().m_outerpriv(); } } public static void main(String[] args) { new Outer().new Inner().test(); } }
66.
© 2022 NTT
DATA Corporation 66 Java 8でコンパイルした結果をjavapで見る public class Outer { private void m_outerpriv() { System.out.println("called m_outerpriv"); } class Inner { public void test() { new Outer().m_outerpriv(); } } public static void main(String[] args) { new Outer().new Inner().test(); } }
67.
© 2022 NTT
DATA Corporation 67
68.
© 2022 NTT
DATA Corporation 68 Java 8でコンパイルした結果をjavapで見る Outerにaccess$000(Outer) というstaticメソッドが!? InnerはOuterインスタンスを生成し access$000を呼び出している public class Outer { private void m_outerpriv() { System.out.println("called m_outerpriv"); } class Inner { public void test() { new Outer().m_outerpriv(); } } public static void main(String[] args) { new Outer().new Inner().test(); } }
69.
© 2022 NTT
DATA Corporation 69 Java 8でコンパイルした結果をjavapで見る Outerにaccess$000(Outer) というstaticメソッドが!? InnerはOuterインスタンスを 生成し access$000を 呼び出している なぜこんなことを? • フィールドまたはメソッドRにアクセス可能 なクラスまたはインタフェースDとは、以下 のことが真となる場合のみに限る。 • Rがprivateでその宣言がDにある。 - インナークラスにこのprivateメソッドは 宣言されていないため直接呼び出せない - JVM仕様 5.5.4 https://docs.oracle.com/javase/specs/jvms/se8/html/jvms- 5.html#jvms-5.4.4 コンパイラが勝手に生成する メソッドを合成メソッドという public class Outer { private void m_outerpriv() { System.out.println("called m_outerpriv"); } class Inner { public void test() { new Outer().m_outerpriv(); } } public static void main(String[] args) { new Outer().new Inner().test(); } }
70.
© 2022 NTT
DATA Corporation 70 Java 11以降でコンパイルした結果をjavapで見る public class Outer { private void m_outerpriv() { System.out.println("called m_outerpriv"); } class Inner { public void test() { new Outer().m_outerpriv(); } } public static void main(String[] args) { new Outer().new Inner().test(); } }
71.
© 2022 NTT
DATA Corporation 71 Java 11以降でコンパイルした結果をjavapで見る 何が変わった? • Java 11でクラスファイルに新しい属性が追加された - ネスト関係をこの属性で把握できる $ javap -v Outer ... NestMembers: Outer$Inner $ javap -v Outer¥$Inner ... NestHost: class Outer
72.
© 2022 NTT
DATA Corporation 72 Java 11以降でコンパイルした結果をjavapで見る 何が変わった? • Java 11でクラスファイルに新しい属性が追加された - ネスト関係をこの属性で把握できる $ javap -v Outer ... NestMembers: Outer$Inner $ javap -v Outer¥$Inner ... NestHost: class Outer • JVM仕様5.4.4も変更されている - R is private and is declared by a class or interface C that belongs to the same nest as D, according to the nestmate test below. * https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-5.html#jvms- 5.4.4 • この変更によりprivateメソッドが 直接呼び出せるようになった 私のブログにも書いています https://www.sakatakoichi.com/entry/java11nestmates
73.
© 2022 NTT
DATA Corporation 73 バイトコードの楽しみ方 1. 読む! 2. 書き換える! ぎょ、ぎょえー これを手で書き換えるの?
74.
© 2022 NTT
DATA Corporation 74 バイトコード操作ライブラリ ライブラリを使いJavaコードでバイトコード命令を書き換える • ASM https://asm.ow2.io/ • CGLIB https://github.com/cglib/cglib • Javassist https://www.javassist.org/ • Byte Buddy https://bytebuddy.net/#/ ASMはAPIの抽象度が低い Byte Buddyは抽象度が 高い
75.
© 2022 NTT
DATA Corporation 75 バイトコード操作ライブラリ ライブラリを使いJavaコードでバイトコード命令を書き換える • ASM https://asm.ow2.io/ • CGLIB https://github.com/cglib/cglib • Javassist https://www.javassist.org/ • Byte Buddy https://bytebuddy.net/#/ 操作手順イメージ 1. クラスファイルを読み込む 2. Javaコードでバイトコードを書き換える(処理の追加 変更 削除) 3. 書き換えた内容を適用する - コンパイル時やビルド時はクラスファイル出力 実行時はクラスロード ASMはAPIの抽象度が低い Byte Buddyは抽象度が 高いイメージ
76.
© 2022 NTT
DATA Corporation 76 ByteBuddyでの操作サンプルコード ByteBuddy byteBuddy = new ByteBuddy(); byteBuddy .redefine(TypePool.Default.of(classLoader).describe("a.b.Hello").resolve(), ClassFileLocator.ForClassLoader.of(classLoader)) .method(ElementMatchers.named("toString")) .intercept(FixedValue.value("transformed")) .make() .load(classLoader, ClassReloadingStrategy.of(inst)); // inst = java.lang.instrument.Instrumentationオブジェクト a.b.HelloクラスのtoString()メソッドを "transformed"と返すように書き換えたって感じに読める 最後はJDKのInstrument APIを使って 書き換えたクラスをロードさせて使われるようにした
77.
© 2022 NTT
DATA Corporation 77 ソースコードを直接変更すればいいのでは…? そう! でも変更したくない/できないケースもある • フレームワークやライブラリが アプリケーションで作成したクラスに 対して拡張を施したいとき - 例: Spring Hibernate • モックオブジェクトを作るとき - 例: jMockit Mockito * テストコード実行時にメソッドの内容をモック用に書き換えてしまうイメージ[1] 普段使っているフレームワークやライブラリでも バイトコードを操作しているんだ Bytecode Enhancement とも言う [1]: 新たにサブクラスを作るなどいろいろなやり方があります
78.
© 2022 NTT
DATA Corporation 78 バイトコードを知って何の意味があるの? フレームワークが使うだけなら 私たちがバイトコードを知る必要はとくにないのでは… • 明日からすぐ業務に役立つ内容ではありません • ただし技術の習得には2つの側面があります - 車輪の両輪であり 2つをバランス良く習得することが大切です 使 い 方 を 学 ぶ 仕 組 み を 学 ぶ • 使用する技術がどのように実現 されているのかを学ぶこと • 実行の仕組み 設計概念 内部的表現 • 目 的 と す る ア プ リ ケ ー シ ョ ン を 作成するためにそれをどのように 使えばよいかを学ぶこと • 言 語 構 文 FW の 設 定 ライブラリの使い方
79.
© 2022 NTT
DATA Corporation 本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。