Technical Knowledge
目次
Java
[言語]
java コマンド起動オプション。
GC
フル GC 実行時間等を取得。
-verbose:gc -Xloggc:D:\home\tmp\logs\tomcatgc.txt -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -XX:+TraceGen0Time -XX:+TraceGen1Time -XX:+PrintHeapAtGC
Profile
メソッド実行時間等を取得。
-Xrunhprof:cpu=samples,thread=y,file=D:\home\tmp\logs\prof.txt
jhat
メモリ使用状況を取得。
-agentlib:hprof=format=b,file=D:\home\tmp\logs\hat.txt jhat hat.txt
で Web サーバを起動後、http://localhost:7000/ にアクセスする。
OutOfMemory 時に hat 用のファイルを出力するには
-XX:+HeapDumpOnOutOfMemoryError
実行・コンパイルの種類。
インタプリタ
コードを逐次実行する。 -Xint オプションで起動。
旧 JIT
クラスロード時等に実行される全てのコードをコンパイルする。 Java 1.3 以前までは -classic オプションで起動。
HotSpot
実行頻度の高いもののみコンパイルする。実行頻度の低いものはインタプリタ。 -XX:+UseCompilerSafepoints -XX:+UseOnStackReplacement オプションでメソッド呼出しの途中でもコンパイルを行う。
実行中のオブジェクトサイズを取得。
PID 取得後 jmap で一覧表示。
# jps # jmap -histo <PID>
実行中の VM のメモリ領域や GC 回数等の統計を取得。
jstat を使用
class | クラスローダの動作に関する統計データ |
compiler | HotSpot Just-in-Time コンパイラの動作に関する統計データ |
gc | ガベージコレクトされたヒープの動作に関する統計データ |
gccapacity | 世代ごとの容量と対応する領域に関する統計データ |
gccause | ガベージコレクション統計データの概要 (-gcutil と同じ) と、直前および現在 (適用可能な場合) のガベージコレクションイベントの原因 |
gcnew | New 世代の動作に関する統計データ |
gcnewcapacity | New 世代のサイズと対応する領域に関する統計データ |
gcold | Old 世代および Permanent 世代の動作に関する統計データ |
gcoldcapacity | Old 世代のサイズに関する統計データ |
gcpermcapacity | Permanent 世代のサイズに関する統計データ |
gcutil | ガベージコレクション統計データの概要 |
printcompilation | HotSpot コンパイル方法の統計データ |
GC とヒープの統計データ
- 10 行毎にヘッダー出力。
3 秒毎に表示
# jstat -gc -h 10 PID 3
環境変数でスペースを含む Jar ファイルのクラスパスが通らない。 Windows
ダブルクウォートで囲んでいるため。ダブルクウォートで囲まないようにする。
set CLASSPATH=C:\Space Folder\aaa.jar;.
コメント中の Unicode エスケープの制御文字は評価される。
1: int n = 0; 2: // \u000a n = 2; 3: System.out.println(n); // 2
\u00a が改行に置き換わり、n = 2 が有効となって 2 が出力される。
ImageIo で透過 png を読み込んで jpeg で保存すると赤っぽくなる。
jpeg 保存時は、ソース画像が TYPE_INT_ARGB や TYPE_4BYTE_ABGR のタイプの場合、TYPE_4BYTE_RGB に変更する。
1: InputStream in = new FileInputStream("sample.png"); 2: BufferedImage src = ImageIo.read(); 3: in.close(); 4: BufferedImage dest = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_INT_RGB); 5: ColorConvertOp conv = new ColorConvertOp(img.getColorModel().getColorSpace(), 6: dest.getColorModel().getColorSpace(), null); 7: conv.filter(img, dest);