読者です 読者をやめる 読者になる 読者になる

HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

ThreadMXBean.findMonitorDeadlockedThreads() メソッド

前に書いた「java.lang.management パッケージ - ThreadMXBean インタフェース - HHeLiBeXの日記 正道編」の中の findMonitorDeadlockedThreads を、デッドロックを実際に発生させた後で情報出力してみる。 import java.lang.management.ManagementFactory; …

Threadはinterruptすれば停止するというものではないのだよ(2)

以下の続き。 Threadはinterruptすれば停止するというものではないのだよ - HHeLiBeXの日記 正道編 これを書いていたときに、「他に何かあったような‥」と思いながら、なかなか思い出せなかったので放置していたのだが、唐突に思い出したので。 今回示すどち…

java.lang.management パッケージ - ThreadMXBean インタフェース

ManagementFactory クラスを介して取得できるMXBeanの一つが実装するインタフェース。 java.lang.management パッケージ - ManagementFactory クラス - HHeLiBeXの日記 正道編 ThreadMXBean (Java 2 Platform SE 5.0) 文字通りスレッドに関連する情報を取得…

java.lang.management パッケージ - RuntimeMXBean インタフェース

ManagementFactory クラスを介して取得できるMXBeanの一つが実装するインタフェース。 java.lang.management パッケージ - ManagementFactory クラス - HHeLiBeXの日記 正道編 RuntimeMXBean (Java 2 Platform SE 5.0) これは実行環境(runtime)に関する情報…

java.lang.management パッケージ - OperatingSystemMXBean インタフェース

ManagementFactory クラスを介して取得できるMXBeanの一つが実装するインタフェース。 java.lang.management パッケージ - ManagementFactory クラス - HHeLiBeXの日記 正道編 OperatingSystemMXBean (Java 2 Platform SE 5.0) 名前から推測できるとおり、OS…

悩みがちなLOBデータの挿入手順メモ

JDBCで表にデータを格納するとき、INT型とかVARCHAR型とかなら自信を持って「こうやるんだ」と言えるんだけど、LOBデータ(CLOB、BLOB、XML)となると途端に「え、えと‥」となってしまう自分がいる。単なるcharacter stream、byte streamなんだけどね。 そんな…

java.lang.management パッケージ - MemoryPoolMXBean インタフェース

ManagementFactory クラスを介して取得できるMXBeanの一つが実装するインタフェース。 java.lang.management パッケージ - ManagementFactory クラス - HHeLiBeXの日記 正道編 MemoryPoolMXBean (Java 2 Platform SE 5.0) java.lang.managementパッケージに…

java.lang.management パッケージ - MemoryMXBean インタフェース

ManagementFactory クラスを介して取得できるMXBeanの一つが実装するインタフェース。 java.lang.management パッケージ - ManagementFactory クラス - HHeLiBeXの日記 正道編 MemoryMXBean (Java 2 Platform SE 5.0) java.lang.managementパッケージに属す…

File.createTempFile() と File.deleteOnExit() のコンボ罠の続き

昨日書いたエントリの続き。File.createTempFile() と File.deleteOnExit() のコンボ罠 - HHeLiBeXの日記 正道編「再現はできていない」と書いたが、目指していたものがLinux環境でのJava VMのクラッシュ(hs_err_xxxx.log を吐く状態)だったためで、メモリが…

File.createTempFile() と File.deleteOnExit() のコンボ罠

巷ではかなーり昔から認識されている爆弾コードらしい。 String prefix = "testDeleteOnExit_"; String suffix = ".txt"; File in = File.createTempFile(prefix, suffix); in.deleteOnExit(); // 安全のため いや、全然「安全」じゃない、むしろ危険らしい…

JDKのバージョンの違いによる文字列連結のパフォーマンスの差

もともとは、次のようなことを考えていた。 '+'演算子による文字列連結は、コンパイル時にStringBuffer/StringBuilderを使ったコードに置き換えられるんだよな。 だったら、 Java 2 SE 1.4.2 でコンパイルして Java 2 SE 1.4.2 で実行 Java 2 SE 1.4.2 でコ…

java.lang.management パッケージ - GarbageCollectorMXBean インタフェース

ManagementFactory クラスを介して取得できるMXBeanの一つが実装するインタフェース。 java.lang.management パッケージ - ManagementFactory クラス - HHeLiBeXの日記 正道編 GarbageCollectorMXBean (Java 2 Platform SE 5.0) このインタフェースは、Memor…

Javaのスレッドやメモリ関連で最近よく使用しているツールメモ

このところ、Javaのスレッドやヒープメモリ関連の問題に悩まされているので、その手の調査ツールをよく使用する。 そんなわけで(謎)、お気に入りのツールたちのメモ。 侍 侍 - ログ , スレッドダンプ解析ツール 私自身は主にjavacoreの調査に使用しているが…

java.lang.management パッケージ - MemoryManagerMXBean インタフェース

ManagementFactory クラスを介して取得できるMXBeanの一つが実装するインタフェース。 java.lang.management パッケージ - ManagementFactory クラス - HHeLiBeXの日記 正道編 MemoryManagerMXBean (Java 2 Platform SE 5.0) Java VMのメモリマネージャに関…

Threadはinterruptすれば停止するというものではないのだよ

何か処理をしているThreadがあるとき、その処理を停止させるときに一番多いケースはThread#interrupt()メソッドを呼ぶことだろうか。 しかし、interrupt()メソッドを呼べばどんなスレッドでも停止するというわけではない。 そもそも停止できない public clas…

Webアプリケーション開発の際の注意事項

実際に直面しているのはIBM WebSphere Application Server(WAS)で稼動するWebアプリケーションなのだが、Webアプリケーションを停止しても、そのアプリケーションをロードしたクラスローダーが残ってしまうという問題に悩まされている人がいる。‥いや、他人…

例外は例外なく記録せよ

これは大昔から「例外は握りつぶすな」というような感じで言われていることだが、まだまだまだまだ存在する。トラブルの原因調査を妨げるという意味で一種の爆弾コード。Javaの例外は例外なくログに記録しましょう(洒落じゃなくて)。ログレベルに応じて出力…

java.lang.management パッケージ - CompilationMXBean インタフェース

ManagementFactory クラスを介して取得できるMXBeanの一つが実装するインタフェース。 java.lang.management パッケージ - ManagementFactory クラス - HHeLiBeXの日記 正道編 CompilationMXBean (Java 2 Platform SE 5.0) Java VMのコンパイルシステムの情…

サイズ変化に強いList、Map、Set

前にこんなのを書いた。 http://d.hatena.ne.jp/hhelibex/20091027/1256641969 java.util.HashMap のインスタンスを使いまわしてはいけない - HHeLiBeXの日記 正道編 で、ついでなので、仮に使いまわすとして、格納されるデータ数(つまりList、Set、Mapのサ…

java.lang.management パッケージ - ClassLoadingMXBean インタフェース

ManagementFactory クラスを介して取得できるMXBeanの一つが実装するインタフェース。 java.lang.management パッケージ - ManagementFactory クラス - HHeLiBeXの日記 正道編 ClassLoadingMXBean (Java 2 Platform SE 5.0) クラスのロード数を取得するメソ…

java.util.ArrayList のインスタンスを使いまわす時はArrayListとして扱うべし

java.util.ArrayList クラスは、いわゆる「可変長配列」を表現するList実装である。 ArrayList (Java 2 Platform SE 5.0) このクラスも、java.io.ByteArrayOutputStreamやjava.util.HashMapと同様に、内部に配列を持っている。 ByteArrayOutputStreamやHashM…

java.util.HashMap のインスタンスを使いまわしてはいけない

java.util.HashMap クラスは、言わずと知れた、keyとvalueの組を保持するMap実装である。 HashMap (Java 2 Platform SE 5.0) java.io.ByteArrayOutputStream のエントリを書いている最中に言われて(謎)気付いた。 このクラスでも、内部で配列を使用しており…

java.io.ByteArrayOutputStream のインスタンスを使いまわしてはいけない

java.io.ByteArrayOutputStream クラスは、各種データをbyte配列にしたい場合に便利なクラスである。 ByteArrayOutputStream (Java 2 Platform SE 5.0)しかし、このクラスのソースコードを見れば分かるが、このクラスは内部にデータを保持するためのbyte配列…

java.lang.management パッケージ - ManagementFactory クラス

そういえば、ちょっと前に誰かが使っていたなぁ、と唐突に思い出して、一通り試してみようと思った。 java.lang.management (Java 2 Platform SE 5.0) そもそも、MXBeanって何?とかそんなところからスタートしているので、「http://www.itarchitect.jp/tech…

java.util.Scannerクラス

Java 2 SE 5.0で、java.util.Scannerクラスが追加された。 A simple text scanner which can parse primitive types and strings using regular expressions. A Scanner breaks its input into tokens using a delimiter pattern, which by default matches …

java.lang.Boolean クラスの compareTo() メソッド

Java 2 SE 5.0では、BooleanクラスがComparableインタフェースを実装するようになった。 Boolean (Java 2 Platform SE 5.0) それにより、Booleanオブジェクトも自然順序が定義されたオブジェクトとなった。 で、Booleanオブジェクトの自然順序ってなんだろう…

例外クラスのコンストラクタの引数

java.lang.Throwable クラスでは、次の4つのコンストラクタが提供されている(Java 2 SE 1.4 以降) Throwable() Throwable(String message) Throwable(String message, Throwable cause) Throwable(Throwable cause) で、Java 2 SE 1.3 以前では Throwable を…

Thread#getStackTrace() メソッド

次のクラスやメソッド: java.lang.StackTraceElement クラス java.lang.Throwable#getStackTrace() メソッド が Java 2 SE 1.4 で追加されているのでちょっと混乱するのだが。java.lang.Thread クラスには Java 2 SE 5.0 で getStackTrace() メソッドが追加…

String#intern()メソッドのパフォーマンス

過去にStringクラスのintern()メソッドに関することを書いた。 Stringオブジェクトに関する罠 - HHeLiBeXの日記 正道編 Stringオブジェクトに関する罠に対する罠 - HHeLiBeXの日記 正道編 で、計測屋(何)としては実行時間も計らねば(謎)。 まず、計測用のコ…

変数のスコープの局所化

一般的にどうなのだろうか、という話もあると思うが‥ 自分は、括弧やインデントが多少増えても、変数のスコープを局所化することの方が重要だと考えている。 例えば、こんなコード。(たまたまJSPなだけ。) <% String result = ""; String attr1 = (String) s…

ゼロから学ぶ!最新Javaプログラミング

ゼロから学ぶ! 最新Javaプログラミング (日経BPパソコンベストムック)作者: 日経ソフトウエア出版社/メーカー: 日経BP社発売日: 2009/09/10メディア: 雑誌購入: 2人 クリック: 43回この商品を含むブログ (7件) を見るふと見つけて半ば衝動的に。自分が読むと…

java.util.Formatter クラス

なんか、どこかで見たような名前のクラスだが、それはたぶんjava.text.Formatクラス。 このクラスを直接使用することは今のところはあまりない。でもよく使っている。 どこで使っているかというと、例えば次のようなクラスのメソッド。 java.io.PrintStream …

java.lang.Thread.UncaughtExceptionHandler インタフェース

スレッドのエラーハンドリングためのインタフェース。 Interface for handlers invoked when a Thread abruptly terminates due to an uncaught exception.関連するThreadクラスのメソッド。 public static Thread.UncaughtExceptionHandler getDefaultUncau…

カテゴリー「Java 1.4 to 5.0」

Java 2 SE 1.4/Tomcat 4.1.x/WAS 5.1 ベースで開発された製品のサポートとメンテナンスをやっているが、一方で、Java 2 SE 5.0/Tomcat 5.5.x/WAS 6.1 ベースで開発された製品のサポートとメンテナンスもやらないといけなくなった。 (前者ではバリバリの開発…

java.lang.ProcessBuilder クラス

Java 2 SE 5.0のJavaDocを何気なく眺めていてふと気になった。「確かこんなクラスはなかったよなぁ‥」と。確認してみたら、確かに「Since: 1.5」と書いてある。 This class is used to create operating system processes. Each ProcessBuilder instance man…

java.lang.ThreadLocal クラス

Java 2 SE 5.0 から、ThreadLocalクラスにremove()メソッドが追加された。 Removes the value for this ThreadLocal. This may help reduce the storage requirements of ThreadLocals. If this ThreadLocal is accessed again, it will by default have its…

Log4Jの後始末

Log4Jを使ってWebアプリケーションのログをファイルに記録する場合、Webアプリケーションの終了時に後始末をする必要がある。でないと、ログファイルがロックされたままになるので、ログファイルを削除できない。 そんなときは、Servletのdestroy()メソッド…

Map系クラスのメモリ使用量の違い

唐突に、HashMap、LinkedHashMap、TreeMapのメモリ使用量の違いを測ってみようと思った。 ただ、メモリ使用量、というよりは、いくつのkey-valueを保持できるか、というところに力点を置いた結果の示し方をする。 検証用コードはこんな感じ。 import java.te…

Stringオブジェクトに関する罠に対する罠

Stringオブジェクトに関する罠 - HHeLiBeXの日記 正道編 書くのがだいぶ遅くなったけど‥ 同じ文字列を表す異なるStringオブジェクトに対してintern()メソッドを呼び出すと、同じStringオブジェクトが返される。のだが、ここに罠が潜んでいる。まぁ、よっぽど…

OutOfMemoryError発生時のエラーメッセージの変遷

なぜか唐突に(謎)。わざわざ準備するのは面倒なので、手元にあるものだけ確認。 まず、OutOfMemoryErrorを引き起こすためのコード。 import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.LinkedList; import java.util.List; …

無駄むだムダァー

超極小爆弾だけど(メモリに対する)‥ return new String("0"); ‥よっぽど特殊な事情がない限り、"0"っていう文字列を表す別のインスタンスなんて必要ないと思うんだけど。例えば、java.util.IdentityHashMapを使わなければいけないケースとか。 ちなみに、実…

シリアライズの罠 - java.lang.Boolean

つい最近まで、Booleanオブジェクトはデシリアライズされる際に新たなオブジェクトが生成されない(より厳密に言うと、生成された直後にGC可能オブジェクトになる)と思い込んでいた、という罠。 確認のためのコード。 import java.io.IOException; import jav…

Stringオブジェクトに関する罠

Stringオブジェクトに関しても、Booleanオブジェクトと同様に不変オブジェクトであるが、同一の文字列を表現する異なるStringオブジェクトを生成できてしまう。 生成されてもすぐに捨てられるのなら問題はあまりないのだが、セッションデータとして保持し続…

パラメータマーカーに指定する文字列が長すぎるとSQLエラー(続き)

パラメータマーカーに指定する文字列が長すぎるとSQLエラー - HHeLiBeXの日記 正道編 これを受けて、「じゃあどうするべきなのか」という話を書こうとしたんだけど、眠くて力尽きたというか(ごにょごにょ)。 DB2はPREPAREする時点でパラメーターマーカーの型…

パラメータマーカーに指定する文字列が長すぎるとSQLエラー

以下のような表を作成する。 CREATE TABLE HOGE(ID SMALLINT, NAME VARCHAR(10)) ポイントは「VARCHAR(10)」。 で、JDBCを使って以下のようなクエリを発行してみる。 SELECT ID, NAME FROM HOGE WHERE NAME = '0123456789a' INSERT INTO HOGE(ID, NAME) VALU…

詰めが甘いObject#equals()のオーバーライド

「もれなくダブりなく」とは、書籍「プログラマの数学」に書かれていることだが、そんな「条件がもれてしまった」という爆弾コード。 public class Xxx { public boolean equals(Object o) { if (!(o instanceof Xxx)) { return false; } Xxx that = (Xxx) o…

Collection#iterator() vs Collection#contains()

こんなコードを見かけることがある。 private boolean search(List<Xxx> list, Xxx target) { for (Xxx xxx : list) { if (xxx.equals(target)) { return true; } } return false; } こんなことをするなら、Object#equals()やObject#hashCode()を適切に実装して、</xxx>…

StringBuilder#appendとStringの連結(+演算子)の続き

前に書いたStringBuilder#appendとStringの連結(+演算子) - HHeLiBeXの日記 正道編の「test1()とtest2()の処理速度が約3倍」という記述に違和感を覚えた。test1()とtest2()の差は、一時的なStringBuilderが生成されるかされないかだけであるはずだから、appe…

Integer#decodeメソッド

整数値を表すラッパークラス(Byte、Short、Integer、Long)には、decode(String)なるメソッドがあることをいまさら知った。 JavaDocを見ると、JDK 1.2から存在している。こういう基本的なクラスって、コード補完に頼ったりJavaDocを見たりしないので、逆に気…

org.w3c.util.UUIDとjava.util.UUID

ユニークなIDを生成するための手段として、org.w3c.util.UUID、またJava 5からはjava.util.UUIDがある、というのはいまさらな話。 org.w3c.util.UUIDでは、以下のような文字列が生成される。 <(1)とあるObjectのhashCode(16進)>-<(2)現在時刻(ミリ秒)(16進)>-…