SlideShare una empresa de Scribd logo
1 de 48
Descargar para leer sin conexión
困らない程度のJDK入門
Yohei Oda @ Bizreach
1
はじめに
2
今日話す人
小田洋平
Scalaエンジニア
前職はJava系いろいろ
JJUGでGCの話したり…
https://www.slideshare.net/yodajp/shenandoahgc-
69803455
3
だいたいこんな感じですよね?
JVM あんま興味ないっす
→ そんなに知るメリットがない
→ 他にもっと役に立ちそうな知識がある
→ 隠蔽される(実装知らなくても使える)のはよいこと
4
とはいえ
たまーに困るときがある。
必要に応じて調べればよいが、何も知らないと調べるのがつ
らい
インターネットや周りの人→ 玉石混淆
5
今日の勉強会(と資料)の方針
普通に使いそうな話をする
あまり使いそうにないことは飛ばす
知識習得のコスパ重視
割合的に少ない事項についてはあまり触れない
あまりつっこみすぎない
方向性がわかれば細かいことは調べられる
玄人なら手を出していいという類の話はしない
玄人はそもそもこの資料を読まない
6
コンパイラの話
7
コンパイラで知っておかないと困ること
8
コンパイラで知っておかないと困ること
→ たぶんそんなにない
9
15年前のドキュメントを読んでみる
最適化の決定を行うためのfinal の使用は、使用すべきでないとされるCの
register キーワードに非常によく似ています。register キーワードは、
オプティマイザーを助けたいというプログラマーの願望が動機となっていま
すが、現実にはあまり助けにならないことがわかりました。そうでないこと
を信じたいものですが、コンパイラーは通常、特に現代のRISCプロセッサー
では、コードの最適化の決定において人間より優れています。事実、ほとん
どのCコンパイラーは、register キーワードを完全に無視します。初期の
Cコンパイラーは最適化をまったく行わなかったのでそれを無視しました。
また、現代のCコンパイラーは、それがなくてもより優れた最適化の決定を
行えるので無視します。どちらの場合も、register キーワードは、Java
クラスやメソッドに適用されるfinal キーワードとよく似て、パフォーマ
ンスを向上させることはほとんどありません。コードを最適化するには、
効果的なアルゴリズムを使用したり冗長な計算を行わないなどの大きな利
点をもたらす最適化のみ行い、実行サイクル数レベルの最適化はコンパイラ
ーとJVMに任せましょう。
https://www.ibm.com/developerworks/jp/java/library/j-jtp1029/
より引用
10
トーシロが手ぇ出すな臭すごい
Brian先生に従っておこう!
権威には逆らわない
これで終わると怒られそうなのでちょっとだけ話を続けます
11
ちょっと前まで人類に残されていた仕事
JITコンパイラの選択
クライアントコンパイラ(C1)
サーバコンパイラ(C2)
12
バイトコードからマシンコードにする方法は3つある
インタプリタ
C1 (-client)
C2 (-server)
コード生成のコスト <‐> 生成したコードのパフォーマンス
13
TieredCompilation
JDK6 まで
インタプリタ実行時にプロファイリングをして、選択したコ
ンパイラで最適化する
どっちのコンパイラが良いか考える余地がある
JDK7 から
インタプリタ、C1、C2 を動的に使い分けられるようになった
C1でもプロファイリングできるようになった
4階層の最適化レベルをいったりきたりする
→更に考えることが減った
コンパイルのしきい値とかもうかつにいじらないほうが良か
ったり…
14
JDKのオプションに関する余談
ON/OFF にするような設定の場合、以下のような書式になってい
ます。
有効にするとき ‐XX:+<フラグ名> 
無効にするとき ‐XX:‐<フラグ名> 
また、バージョンや環境によってオプションのデフォルト設定が
変わることがあるので、その環境で何が設定されているかを確認
したい時があります。
 ‐XX:+PrintFlagsFinal をつけるとフラグの状態を見ることができ
ます。
(例) TieredCompilation のデフォルトを見たいとき
> java ‐XX:+PrintFlagsFinal| grep TieredCompilation
     bool TieredCompilation                         = true           
15
人類がちゃんとやらないといけないこと
ロジックに適したアルゴリズムを使う
人類に優しい設計
パフォーマンス測定
最適化の影響を考慮する
コードキャッシュ(JITコンパイラのコード置き場)が枯渇し
ないようサイジングする
 ‐XX:ReservedCodeCacheSize オプション
今は枯渇したら古いのを捨ててるので気づきづらい(だ
からOKというわけでもない)
 jconsole とかで見られる
 ‐XX:+PrintCodeCacheOnCompilation というのもある
(が出力量多い)
16
最適化の動作をいじるとき
調査目的で最適化を無効にしたい場合
 ‐Djava.compiler=none 
JITコンパイラのバグを踏んでクラッシュしているのでは?と
疑わしいときの切り分け
あやしいマルチスレッドアプリケーションのデバッグ
メモリモデルを理解せずにマルチスレッド処理を書くと
最適化された瞬間に破綻するコードが爆誕することがあ
る
JIT有効化したら起きたからってすぐコンパイラのせいに
するのはやめよう
特定のメソッドだけ切り替えることもできる
17
ガベージコレクタ
18
ガベージコレクタ
基本になるガベージコレクタのアルゴリズムは限られている
マークスイープ
マークコンパクト
コピー
アルゴリズムによって、長所/短所がある
スループット
停止時間
並行性
オーバーヘッド
19
各GCの動きの違い
別の資料で説明します…
20
まとめると
無駄に生存しているオブジェクトが増えるとヤングGCは遅く
なる
パラレルGCは停止時間が長くなるが効率は良い
CMSは並行性が高いが断片化するしチューニングが難しい
G1は並行性ではなくソフトリアルタイム性を重視する
G1はオーバーヘッドはあるがスケーラビリティが高い
21
いざというときの話
22
いざというときの話
解析ツール
23
とりあえずjcmd をおぼえときましょう
昔は jstat とか jmap とか jhat とか色々使い分けていた
最近のJDKであればかなりのことが jcmd でカバーできる
昔のツール類は順次廃止になりそう
24
jcmd で1つだけ覚えて帰るなら…
jcmd プロセスID help
> jcmd 12345 help
12345:
The following commands are available:
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
VM.flags
VM.system_properties
help
For more information about a specific command use 
'help <command>'.
そのプロセスに実行できるコマンドを教えてくれる
25
help で出てきたコマンドを打つ
> jcmd 12345 Thread.print
12345:
Full thread dump Java HotSpot(TM) 64‐Bit Server VM (25.112‐b16 mixed 
"main" #1 prio=5 os_prio=31 tid=0x00007fa3bd000800 nid=0x1303 in
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        ‐ waiting on <0x000000076e9672b0> (a java.lang.UNIXProcess
        at java.lang.Object.wait(Object.java:502)
        at java.lang.UNIXProcess.waitFor(UNIXProcess.java:395)
        ‐ locked <0x000000076e9672b0> (a java.lang.UNIXProcess)
        at 
フラグ設定が必要なコマンドの場合は教えてくれます
26
コマンドに対してもヘルプを打つことができます
> jcmd 12345 help Thread.print
12345:
Thread.print
Print all threads with stacktraces.
Impact: Medium: Depends on the number of threads.
Permission: java.lang.management.ManagementPermission(monitor)
Syntax : Thread.print [options]
Options: (options must be specified using the <key> or <key>=<value>
        ‐l : [optional] print java.util.concurrent locks (BOOLEAN, fa
 ‐l というオプションがあるので、↓が実行できることがわかります
> jcmd 12345 Thread.print ‐l
27
ちなみによく使うのは↓の3つです
Thread.print
GC.class_histogram
GC.heap_dump
28
Thread.print
JVM のその時点のスレッドの状態を出力する
ハングのときにとる
数秒おきに複数回実行し状態遷移の有無を確認するのが定石
一回だとたまたまその処理をしているのかずっとその処
理をしているのかよくわからない
複数のスレッドダンプを読み込んでグラフィカルに差分を出して
くれるツールもあります
29
GC.class_histogram
ヒープ内にどんなオブジェクトが多いかを見られる
ある特定のオブジェクトが増えている疑惑があるときに定期
的に取得して比較するのにも便利
30
 GC.class_histogram の補足
実行すると [C というクラスがよく上の方に出てくると思うので
すが、たまにこれを見て「Cヒープが増えてます!」と言う人がい
ます…。
頭の [ は配列の意味で、アルファベット一文字はプリミティブ型
の略称なので、  [C は char の配列です。
ちなみにちょっとわかりづらいやつとしては、 Z が boolean で,
 J は long です。
※  B は byte で、  [L... はオブジェクトの配列
( [Ljava.lang.Object; など)の表記で使われています。
31
GC.heap_dump
Javaヒープのダンプ
バイナリファイルなので、ツールを使って開きます
 Eclipse Memory Analyzer が有名
巨大なメモリを使うインスタンスだと巨大なファイルが出ま
す
あるオブジェクトが何から参照されているかを調べるのに便
利
ちなみにヒープダンプは  OutOfMemoryError が起きたときに自動的
に出力するよう設定できます
‐XX:+HeapDumpOnOutOfMemoryError
‐XX:HeapDumpPath=ファイルパス
32
OutOfMemoryError が出ました!
まずどうしますか?
33
OutOfMemoryError が出ました!
まずどうしますか?
→再起動っす…
34
 OutOfMemoryError は VirtualMachineError なので、動いていても
ちゃんと動いていることは保証されません。さっさと再起動しま
しょう。
JDK8u92 からOutOfMemoryError 発生時にJVM を停止させ
るオプションがついた(  ‐XX:+ExitOnOutOfMemoryError )
※  StackOverFlowError も同じ仲間
35
メモリリーク?
あんますぐメモリリークとか言わない
36
OutOfMemory の起きる2つの原因
1. 同時に使うメモリが多すぎる
サイジングのミス
過負荷
アプリケーションが大量のメモリを使う処理をしている
2. 使ったメモリ(の一部)を回収できず、実質的に使えるメモリ
の量自体が減っている
いわゆるメモリリーク
回収できないオブジェクトへの参照をヒープダンプで確
認し、コードを修正する
37
2つの原因の区別
使用量をグラフにするとわかりやすい
長期的な傾向を見る
過負荷の場合
短い時間で急激に上昇する
負荷の少ない時間帯はメモリの空き領域が多い
メモリリークの場合
長期間で徐々に上昇する
負荷の少ない時間帯の空き容量がだんだん回復しなくな
る
38
メモリリークの調べ方の例
1. 定期的に(毎日決まった時間に1度、など)
 GC.class_histogram を実行する
2. 1で取得したデータを比較して、継続的に増加しているオブジ
ェクト(のクラス)を確認する
3.  GC.heap_dump を取得して2で確認したオブジェクトの参照状
況を確認する
4. コードを修正して、参照が残らないようにする。
※ コマンドの実行時間は負荷の低い時間帯がおすすめです
ノイズが少ないので調べやすい
コマンドの処理コストがタダではない
39
 OutOfMemoryError に関する補足
今日は代表的なJavaヒープのOutOfMemoryErrorについて話しまし
たが、Javaヒープ以外のメモリ領域が枯渇しても
OutOfMemoryErrorが発生します。
ネイティブメモリ(JVM自身やネイティブライブラリで使われ
る)
Metaspace(JDK7以前ならPermanent領域)
ログに OutOfMemoryError: <メッセージ> とメッセージが出るの
で、あんまり見たことのないメッセージが出たらググったり本で
調べたりしましょう。
枯渇している領域が違えば当然調べ方も対策も変わってきます。
40
 OutOfMemoryError に関する補足その2
 OutOfMemoryError がスローされたときにログに出るコールス
タックは信用できる?
1つの処理が急激にメモリを使うようなケースでは、コー
ルスタックがその処理であることが多い
リークの場合はそうでもないことも多い
41
クラッシュの起きる(だいたい)3つの原因
1. JDK(JVM)にバグがある
2. リソースの枯渇(OutOfMemory, StackOverFlow)
3. アプリが呼び出したサードパーティー製ライブラリの問題
→ 1はしんどいので、2と3を確認する
42
 3. アプリが呼び出したサードパーティー製ライブラリの問
題 の簡単なチェック
 hs_err_pid<プロセスID>.log の最初の方を見る
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x000000010d38011f, pid=27873, tid=0x000000000
#
# JRE version: Java(TM) SE Runtime Environment (8.0_112‐b16) (build 1
# Java VM: Java HotSpot(TM) 64‐Bit Server VM (25.112‐b16 mixed mode b
# Problematic frame:
# V  [libjvm.dylib+0x58011f]  Unsafe_GetNativeByte+0x47 //★
★のところにJVM(またはOS)以外のライブラリが表示され
ていないかをチェックする
コールスタックも見るとなお良い
43
 1. JDK(JVM)にバグがある 
→ 自分でまともに調べるのはかなり大変
JDK Bug System で調べるくらい
→ そもそもバグに当たらないことが最大の対策
ちゃんとアップデートする
三ヶ月に一回新しいのが出ます(1,4,7,10月)
44
その他解析ツール
障害解析を便利に行えたり、通常のコマンドではとりづらいデー
タを取得できたりするツールもあるので、ケースによっては利用
を検討してみるのも良いかもしれません
 Java Flight Recorder 、  HeapStats など…
45
HotSpot 以外のJVM
ここまで話したのはHotSpot の話
HotSpot はJVM の代表的な実装(Oracle JDK, openjdk)
それ以外のものもある
用途(強み)がはっきりしたものが多い傾向
同じ機能でも用語が違うことがある
一般にJVMに関する情報はHotSpotより少ない
最近では J9 や Zing の注目度が高い(気がする)
46
もうちょっと頑張りたい人に
チューニング
Javaパフォーマンス(オライリー)
トラブルシュート
Java Platform, Standard Editionトラブルシューティング・ガ
イド
読み物
Java Magazine
IBM developerworks
オプションやコマンドを試してみたいとき
easybuggy
47
48

Más contenido relacionado

La actualidad más candente

PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)NTT DATA Technology & Innovation
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門Tadahiro Ishisaka
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化Kumazaki Hiroki
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)Hironobu Suzuki
 
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要Google Cloud Platform - Japan
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢apkiban
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)NTT DATA Technology & Innovation
 
Java によるクラウドネイティブ の実現に向けて
Java によるクラウドネイティブ の実現に向けてJava によるクラウドネイティブ の実現に向けて
Java によるクラウドネイティブ の実現に向けてShigeru Tatsuta
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsYoshiyasu SAEKI
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)mosa siru
 
The only one big thing every programmer should know
The only one big thing every programmer should knowThe only one big thing every programmer should know
The only one big thing every programmer should knowTakuto Wada
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -onozaty
 
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~Shinji Takao
 
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理NTT DATA Technology & Innovation
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションMasahiko Sawada
 
java.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javajava.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javaYuji Kubota
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みChihiro Ito
 

La actualidad más candente (20)

PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
Java によるクラウドネイティブ の実現に向けて
Java によるクラウドネイティブ の実現に向けてJava によるクラウドネイティブ の実現に向けて
Java によるクラウドネイティブ の実現に向けて
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
The only one big thing every programmer should know
The only one big thing every programmer should knowThe only one big thing every programmer should know
The only one big thing every programmer should know
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
 
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
java.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javajava.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷java
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 

Destacado

20140301ハッカーズチャンプルー告知lt
20140301ハッカーズチャンプルー告知lt20140301ハッカーズチャンプルー告知lt
20140301ハッカーズチャンプルー告知ltKoichiro Nishijima
 
20141108 俺のエンジニアリング #devlove
20141108 俺のエンジニアリング #devlove20141108 俺のエンジニアリング #devlove
20141108 俺のエンジニアリング #devloveTakao Oyobe
 
BtoCでバインド変数
BtoCでバインド変数BtoCでバインド変数
BtoCでバインド変数Yoshito Ueki
 
How to customize redmine public
How to customize redmine publicHow to customize redmine public
How to customize redmine publicHirotaka Nishimiya
 
超先取りShenandoahGC
超先取りShenandoahGC超先取りShenandoahGC
超先取りShenandoahGCYohei Oda
 
私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由増田 亨
 

Destacado (6)

20140301ハッカーズチャンプルー告知lt
20140301ハッカーズチャンプルー告知lt20140301ハッカーズチャンプルー告知lt
20140301ハッカーズチャンプルー告知lt
 
20141108 俺のエンジニアリング #devlove
20141108 俺のエンジニアリング #devlove20141108 俺のエンジニアリング #devlove
20141108 俺のエンジニアリング #devlove
 
BtoCでバインド変数
BtoCでバインド変数BtoCでバインド変数
BtoCでバインド変数
 
How to customize redmine public
How to customize redmine publicHow to customize redmine public
How to customize redmine public
 
超先取りShenandoahGC
超先取りShenandoahGC超先取りShenandoahGC
超先取りShenandoahGC
 
私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由
 

Similar a 困らない程度のJDK入門

あなたはなぜ問題が解決できないのか?
あなたはなぜ問題が解決できないのか?あなたはなぜ問題が解決できないのか?
あなたはなぜ問題が解決できないのか?mystelynx
 
メモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なことメモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なことMasaya TARUI
 
IoTとDeep Learningで自宅警備員を育ててみる
IoTとDeep Learningで自宅警備員を育ててみるIoTとDeep Learningで自宅警備員を育ててみる
IoTとDeep Learningで自宅警備員を育ててみるYasuyuki Sugai
 
楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjugYuji Kubota
 
サービス開発者の読書会 #1「アジャイルサムライ」2012.4
サービス開発者の読書会 #1「アジャイルサムライ」2012.4サービス開発者の読書会 #1「アジャイルサムライ」2012.4
サービス開発者の読書会 #1「アジャイルサムライ」2012.4Hiroshi Tsukamoto
 
opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2Takuya Nishimoto
 
10+1 Things you should know about JavaScript testing
10+1 Things you should know about JavaScript testing10+1 Things you should know about JavaScript testing
10+1 Things you should know about JavaScript testingTakuto Wada
 
集合知プログラミング勉強会キックオフMTG LT用資料
集合知プログラミング勉強会キックオフMTG LT用資料集合知プログラミング勉強会キックオフMTG LT用資料
集合知プログラミング勉強会キックオフMTG LT用資料tetsuro ito
 
20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回都元ダイスケ Miyamoto
 
IT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipmIT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipm鉄次 尾形
 
学習パターンを使ってみよう
学習パターンを使ってみよう学習パターンを使ってみよう
学習パターンを使ってみようPANTO MAIMU
 
アジャイルとは?
アジャイルとは?アジャイルとは?
アジャイルとは?bj yan
 
そうだ!勉強会に参加しよう!
そうだ!勉強会に参加しよう!そうだ!勉強会に参加しよう!
そうだ!勉強会に参加しよう!Akira Kaneda
 
脱「情弱向け」プレセンテーション at ギー沖LT 2012/3/11
脱「情弱向け」プレセンテーション at ギー沖LT 2012/3/11脱「情弱向け」プレセンテーション at ギー沖LT 2012/3/11
脱「情弱向け」プレセンテーション at ギー沖LT 2012/3/11Yuu Yonashiro
 
みんなが調べないJS調べてみた JSオジサン#2
みんなが調べないJS調べてみた JSオジサン#2みんなが調べないJS調べてみた JSオジサン#2
みんなが調べないJS調べてみた JSオジサン#2Kenichi Kanai
 
エンジニアがとるべき8つの行動
エンジニアがとるべき8つの行動エンジニアがとるべき8つの行動
エンジニアがとるべき8つの行動Hiroshi Ogino
 
(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと
(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと
(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたことKohki Nakashima
 
とある Perl Monger の働き方
とある Perl Monger の働き方とある Perl Monger の働き方
とある Perl Monger の働き方Yusuke Wada
 

Similar a 困らない程度のJDK入門 (20)

あなたはなぜ問題が解決できないのか?
あなたはなぜ問題が解決できないのか?あなたはなぜ問題が解決できないのか?
あなたはなぜ問題が解決できないのか?
 
メモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なことメモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なこと
 
IoTとDeep Learningで自宅警備員を育ててみる
IoTとDeep Learningで自宅警備員を育ててみるIoTとDeep Learningで自宅警備員を育ててみる
IoTとDeep Learningで自宅警備員を育ててみる
 
楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug
 
20120418 アジャイルサムライ読書会 第1回
20120418 アジャイルサムライ読書会 第1回20120418 アジャイルサムライ読書会 第1回
20120418 アジャイルサムライ読書会 第1回
 
サービス開発者の読書会 #1「アジャイルサムライ」2012.4
サービス開発者の読書会 #1「アジャイルサムライ」2012.4サービス開発者の読書会 #1「アジャイルサムライ」2012.4
サービス開発者の読書会 #1「アジャイルサムライ」2012.4
 
opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2
 
10+1 Things you should know about JavaScript testing
10+1 Things you should know about JavaScript testing10+1 Things you should know about JavaScript testing
10+1 Things you should know about JavaScript testing
 
集合知プログラミング勉強会キックオフMTG LT用資料
集合知プログラミング勉強会キックオフMTG LT用資料集合知プログラミング勉強会キックオフMTG LT用資料
集合知プログラミング勉強会キックオフMTG LT用資料
 
20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回
 
IT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipmIT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipm
 
学習パターンを使ってみよう
学習パターンを使ってみよう学習パターンを使ってみよう
学習パターンを使ってみよう
 
アジャイルとは?
アジャイルとは?アジャイルとは?
アジャイルとは?
 
Database smells
Database smellsDatabase smells
Database smells
 
そうだ!勉強会に参加しよう!
そうだ!勉強会に参加しよう!そうだ!勉強会に参加しよう!
そうだ!勉強会に参加しよう!
 
脱「情弱向け」プレセンテーション at ギー沖LT 2012/3/11
脱「情弱向け」プレセンテーション at ギー沖LT 2012/3/11脱「情弱向け」プレセンテーション at ギー沖LT 2012/3/11
脱「情弱向け」プレセンテーション at ギー沖LT 2012/3/11
 
みんなが調べないJS調べてみた JSオジサン#2
みんなが調べないJS調べてみた JSオジサン#2みんなが調べないJS調べてみた JSオジサン#2
みんなが調べないJS調べてみた JSオジサン#2
 
エンジニアがとるべき8つの行動
エンジニアがとるべき8つの行動エンジニアがとるべき8つの行動
エンジニアがとるべき8つの行動
 
(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと
(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと
(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと
 
とある Perl Monger の働き方
とある Perl Monger の働き方とある Perl Monger の働き方
とある Perl Monger の働き方
 

Último

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 

Último (9)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 

困らない程度のJDK入門