Category Archives: Java

NoClassDefFoundErrorの原因と対応(2) | Java | プログラミング

前回はTomcatにおけるクラスローダの全体像を書いた。今回はクラスの参照可否性について説明したい。クラスの参照可否性とはクラスローダがクラスを読み込むことができるかどうかの条件で、少々複雑な内容になる。

前回説明したクラスローダの階層と今回説明する参照可否条件まで知っておけば、クラスローダに起因する問題には大部分対応できるハズだ。今回はサンプルコードを元に説明したい。

関連記事 Javaクラスローダの恐怖!影響範囲は一体どこまで!?

続きを読む

NoClassDefFoundErrorの原因と対応(1) | Java | プログラミング

前回の記事ではJavaクラスローダに関する現象を書いた。普段はあまり意識することの少ないクラスローダだけど、前回のような現象が現実に起きていることを考えると、クラスローダに対する多少の知識はあったほうが絶対に役立つ。

今回はクラスローダの様々な機能・特徴のうち、Webアプリケーションプログラマでも是非知っておきたい情報を2回に分けてまとめてみた。キチンと理解できればTomcatでNoClassDefFoundErrorが起きてもすぐに解決できるようになるはずだ。

Javaの関連記事:

続きを読む

MissingResourceExceptionの解決法 | Java | プログラミング

JavaベースのWebアプリケーション実行環境Tomcatをターゲットとしたアプリケーションを開発していたときのこと。一部のロジックをmainメソッドから実行できるように変更した。そして、いざ実行してみるとこれまで読み込めていたプロパティファイルが読めなくなってしまった!

なぜこんなことになってしまったのか?原因はよくある単純ミスだったけど、よくよく調べてみると衝撃的な事実を知ることに・・・。

続きを読む

RhinoでJavaScriptを動かす | Java | プログラミング

Javaで記述されたJavaScriptの実装「Rhino」。シンメトリック社内の勉強会(檜山研)の1つ「JavaScript」チームでは、JavaScriptの学習にRhino(GUIで操作できるRhino JavaScript Debugger)を使っています。

講師の檜山さんが、Rhinoについての解説のなかで「RhinoはJavaScriptの処理系だけども、全てJavaで記述されているからJavaのクラスを使うこともできる」とコメントしていました。 RhinoでJavaのクラスを使った短いコードを試してみたりもし、そのときは正直「へ~」と感心する程度の認識だったのですが・・・。その後、しばらくしてRhinoでJavaクラスを使うことが実に手軽で便利と思うことがありました。今回はその使い方について説明します。

続きを読む

OutOfMemoryErrorの原因と対応(3) | Java | プログラミング

OutOfMemoryError回避のためのJavaコーディング – 前編後編でOutOfMemoryErrorの典型的な発生パターンを3つ紹介した。

(A)サイズオーバー型
巨大な領域確保によって一気にヒープの最大サイズをオーバー
(B)メモリリーク型
開放されないオブジェクトが溜まり続けることで使用中メモリが徐々に増加し、メモリが枯渇
(C)マルチスレッド型
長時間処理により”死んだ”スレッドがメモリを食い尽くす

じゃあOutOfMemoryErrorが発生したときに、どのパターンのエラーに該当するのか?これを見抜くための手がかりを最後の話題にしたい。

続きを読む

OutOfMemoryErrorの原因と対応(2) | Java | プログラミング

前回(OutOfMemoryError回避のためのJavaコーディング – 前編)に引き続き、OutOfMemoryErrorの話題。前回は、OutOfMemoryErrorを3パターンに分けた。

(A)サイズオーバー型
巨大な領域確保によって一気にヒープの最大サイズをオーバー
(B)メモリリーク型
開放されないオブジェクトが溜まり続けることで使用中メモリが徐々に増加し、メモリが枯渇
(C)マルチスレッド型
長時間処理により”死んだ”スレッドがメモリを食い尽くす

今回は(C)マルチスレッド型に関連するOutOfMemoryErrorを紹介する。

続きを読む

OutOfMemoryErrorの原因と対応(1) | Java | プログラミング

Javaアプリケーションサーバーを使っていると、OutOfMemoryErrorに遭遇することが時々ある。最近はサーバーの物理メモリサイズが2GBを超えることもあるのに、やっぱりこのエラーは発生する。

OutOfMemoryErrorは文字通り、メモリが足りないという意味だ。だけど、当然ながら物理メモリを増設する必要があるというわけではない(本当にそうするしかない場合もあるけど・・・)。通常はサーバーチューニングやアプリケーションロジックの見直しでこのエラーに対処する。

今回はそのうち、アプリケーション側の原因によって発生したOutOfMemoryErrorをターゲットとし、アプリケーションの見直しにより対処する方法について話したいと思う。

Javaの関連記事:

続きを読む

スレッドの注意点まとめ | Java | プログラミング

どんなプログラム言語でもそうなのですが、マルチスレッド下でプログラムを組むときは、シングルスレッドとは違うところに色々気を使わないといけません。
今回は、Javaマルチスレッドプログラムでは基本的なことですが(自分だけかもしれませんが)よく忘れて、不可解な動作に首を傾げてしまうポイントについて説明していきます。

続きを読む

ArrayListをスレッドセーフ化するには? | Java | プログラミング

前回は、DateFormatクラスがマルチスレッド問題によってバグを引き起こす例を紹介した。マルチスレッドによる問題に対処するには、スレッドごとにインスタンスを作成するか、synchronizedブロックによる同期化を行う。でも「正しい同期化」を行うには十分な知識とコードの把握が不可欠・・・。

そんな時に重宝するのが、Java標準で用意されている同期化オブジェクト。どんなケースにも対応できるわけではないけど、お手軽かつ必要十分な機能を備えている。これを使わない手はない。

関連記事 Javaでスレッドを使う際の注意点

続きを読む