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

<2007-10-18 木>
<2009-06-09 火>

実行・コンパイルの種類。

インタプリタ

コードを逐次実行する。 -Xint オプションで起動。

旧 JIT

クラスロード時等に実行される全てのコードをコンパイルする。 Java 1.3 以前までは -classic オプションで起動。

HotSpot

実行頻度の高いもののみコンパイルする。実行頻度の低いものはインタプリタ。 -XX:+UseCompilerSafepoints -XX:+UseOnStackReplacement オプションでメソッド呼出しの途中でもコンパイルを行う。


<2009-06-05 金>

実行中のオブジェクトサイズを取得。

PID 取得後 jmap で一覧表示。

# jps
# jmap -histo <PID>

<2009-06-09 火>

実行中の 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
    

<2012-07-26 木>

環境変数でスペースを含む Jar ファイルのクラスパスが通らない。   Windows

ダブルクウォートで囲んでいるため。ダブルクウォートで囲まないようにする。

set CLASSPATH=C:\Space Folder\aaa.jar;.

<2010-05-20 木>

コメント中の Unicode エスケープの制御文字は評価される。

1: int n = 0;
2: // \u000a n = 2;
3: System.out.println(n);    // 2

\u00a が改行に置き換わり、n = 2 が有効となって 2 が出力される。


<2011-09-21 水>

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);

<2011-10-31 月>

Date: 2021-10-03