MenuBar

Java


JMX: モニタリング

wget http://crawler.archive.org/cmdline-jmxclient/cmdline-jmxclient-0.10.3.jar
timeout 5 java -jar cmdline-jmxclient-0.10.3.jar - localhost:8000 | head -n 5

Windows向けバッチファイル


JVMはDNS解決するとIPアドレスをキャッシュする

JVMのデフォルトでは起動時にDNS解決したIPアドレスを無期限(-1)で使う。 これはAWS ELB等動的にIPアドレスが変わるサービスではトラブルの原因となるため、DNSキャッシュしないか、短めの値を使った方が良い

grep networkaddress.cache.ttl /usr/java/jdk1.8.0_20/jre/lib/security/java.security
#networkaddress.cache.ttl=-1

メモリーダンプを取得する


スレッドダンプ/ヒープダンプを取得する

ログにも出ないようなエラーが発生した時に便利。


jps:javaプロセスだけ表示


入門


Apache Maven


複数バージョンをalternativesで切り替えて使う

CentOS5.x, 6.xをインストールする時にjavaパッケージをインストールすると、デフォルトのjavaとして"gcj"がインストールされる。
他のバージョンのjavaを簡単に切り替えて使うための設定をする

# 追加。複数ファイルで構成されている場合は--slaveオプションも付ける
# --install [シンボリックリンク名] [グループ名] [バイナリ本体] [優先度] \
#   --slave [シンボリックリンク名] [グループ名] [バイナリ本体]
# ※優先度は大きいほど高い
alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_31/bin/java 16031 \
  --slave /usr/bin/jar java-jar /usr/java/jdk1.6.0_31/bin/jar \
  --slave /usr/bin/javac java-javac /usr/java/jdk1.6.0_31/bin/javac \
  --slave /usr/bin/javadoc java-javadoc /usr/java/jdk1.6.0_31/bin/javadoc \
  --slave /usr/bin/javaws java-javaws /usr/java/jdk1.6.0_31/bin/javaws \
  --slave /usr/bin/jcontrol java-jcontrol /usr/java/jdk1.6.0_31/bin/jcontrol

# 手動選択
alternatives --config java
# 自動選択
alternatives --set java /usr/java/jdk1.6.0_31/bin/java

# 削除
# --remove [グループ名] [削除したいバイナリ本体]
alternatives --remove java /usr/java/jdk1.6.0_31/bin/java

# 現在の設定
alternatives --display java
java - ステータスは手動です。
リンクは現在 /usr/java/jdk1.6.0_31/bin/java を指しています。
/usr/java/jdk1.6.0_31/bin/java - 優先項目 30
現在の「最適」バージョンは /usr/java/jdk1.6.0_31/bin/java です。

# 設定情報
ls -l /etc/alternatives/

バージョン確認


md5を文字列として取得

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

String md5( String str ) throws NoSuchAlgorithmException
{
	MessageDigest md = MessageDigest.getInstance("MD5");
	byte[] dat = str.getBytes();
	md.update(dat);//dat配列からダイジェストを計算する
	byte[] digest = md.digest();

	StringBuilder sb = new StringBuilder();
	for (int i = 0; i < digest.length; i++) {
		sb.append(String.format("%02x", 0xff & digest[i]));
	}
	return sb.toString();
}

System.out.printf("md5: %s\n", md5("1234567890")); // => md5: e807f1fcf82d132f9bb018ca6738a19f

配列内を検索する

import org.apache.commons.lang3.*;

String[] string = {"A", "B", "C"};

System.out.println(ArrayUtils.indexOf(string, "A")); // => 0
System.out.println(ArrayUtils.indexOf(string, "X")); // => -1

配列のコピー

デフォルトでは参照扱いなので、配列のコピーをしようと思っても参照コピーになる
1次元配列と多次元配列では結果が異なる


変数のダンプ


キュー構造


スタック構造


ソースの文字コード


空きメモリ量を得る

Runtime.getRuntime().freeMemory()
Runtime.getRuntime().totalMemory()

プリプロセッサを使う

デバック時だけ有効にしたいコード等を使用する事ができる。

チェックサム

簡単な暗号化

16進数ダンプ

「sun.misc.HexDumpEncoder」がある。

byte[] bytes = new byte[100];
for ( int i=0; i<bytes.length; i++ ) bytes[i] = (byte)i;

HexDumpEncoder encoder = new HexDumpEncoder();
System.out.println( encoder.encodeBuffer(bytes) );

try {
    encoder.encodeBuffer( bytes, System.out );
} catch ( IOException ioex ) {}

byte型配列への変換サポート

int a = 1000;
byte b[];
ByteArrayOutputStream out = new ByteArrayOutputStream();
DataOutputStream dout = new DataOutputStream(out);
dout.writeInt(a); // 変数aの内容を書き出す
b = out.toByteArray(); // 書き出した結果のbyte配列を取得
dout.close();
out.close();

負荷テストツールJMeter


添付ファイル: fileJavaPP200a_patch.lzh 1993件 [詳細] fileJavaPP2.0a_plus.zip 2821件 [詳細] fileDoJa_build_bat.zip 2775件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:37