| <発生環境> | |
|---|---|
| OS | any |
| JDK | any |
| Vender | any |
- <A14-1>
- 以下の方法を用いれば、標準jarファイルに手を加えることなく、パッチ適用を実現することができます。
set customClass=(修正したクラスへのパス) java -Xbootclasspath/p:%customClass%
| <発生環境> | |
|---|---|
| OS | any |
| JDK | any |
| Vender | any |
set customClass=(修正したクラスへのパス)
java -Xbootclasspath/p:%customClass%
| <発生環境> | |
|---|---|
| OS | Solaris |
| JDK | ALL |
| Vender | Sun |
| <発生環境> | |
|---|---|
| OS | Solaris |
| JDK | ALL |
| Vender | Sun |
| <発生環境> | |
|---|---|
| OS | Windows2000/NT |
| JDK | JDK1.3 |
| Vender | Sun |
しかも、オブジェクトリファレンスは引き続き参照可能で、リクエストも受け付けるが、返り値オブジェクトが正常に返ってきません。
| <発生環境> | |
|---|---|
| OS | Solaris2.6 |
| JDK | JRE1.3 |
| Vender | Sun |
| <発生環境> | |
|---|---|
| OS | Windows2000 |
| JDK | JDK1.3.1 |
| Vender | Sun |
| <発生環境> | |
|---|---|
| OS | Solaris2.5.1 |
| JDK | Solaris_JDK_1.2.1_04 |
| Vender | Sun |
| <発生環境> | |
|---|---|
| OS | Solaris2.5.1 |
| JDK | Solaris_JDK_1.2.1_04 |
| Vender | Sun |
| <発生環境> | |
|---|---|
| OS | Solaris2.5.1 |
| JDK | JDK1.2.1 |
| Vender | Sun |
バッチファイルの内容
start java myclass1
start java myclass2
| <発生環境> | |
|---|---|
| OS | Windows2000/XP |
| JDK | JDK1.4.1 |
| Vender | Sun |
| <発生環境> | |
|---|---|
| OS | Windows2000 |
| JDK | JDK1.3 |
| Vender | Sun |
XMLファイルから日本語を消去すると問題なく動作しました。
発生した際のエラーメッセージは以下の通りです。
文字変換エラー: "Unconvertible UTF-8 character beginning with 0x95" (行番号が小さすぎる可能性があります)
| <発生環境> | |
|---|---|
| OS | WindowsXP |
| JDK | JDK1.4 |
| Vender | Sun |
生成されたコードの中で、日本語が不明な文字コードに置き換わっています。IDLをUTF-8,SJIS,EUCなどのコードで保存しても読めないコードに変換されてしまいます。
| <発生環境> | |
|---|---|
| OS | Windows2000 |
| JDK | JDK1.3.0_01/JDK1.4 |
| Vender | Sun |
VMが以下のHotSpotエラーを出しました。
# HotSpot Virtual Machine Error : 11
# Error ID : 4F530E43505002E6
# Please report this error at
# http://java.sun.com/cgi-bin/bugreport.cgi
このError IDってどういう意味なのでしょうか?| <発生環境> | |
|---|---|
| OS | Any |
| JDK | JDK1.4 |
| Vender | Sun |
Error ID = 4F530E43505002E6
↓
ファイル名部分=4F530E435050 + 行番号部分=02E6
a) ファイル名部分の各値(2桁)に、0x20を加算する。
4F 53 0E 43 50 50
→6F 73 2E 63 70 70
b) アスキーキャラクタ変換する。
6F 73 2E 63 70 70
→ o s . c p p
c) 末尾4桁を 10進変換する。
02E6
→742
というわけで、os.cppの 742行目でエラーが発生したことがわかります。Strutsを利用しています。
validation.xmlのmask設定を使用して正規表現による入力チェックを行なおうとしていますが、この定義において&記号を使う事ができません。
例えば「半角英数と四則演算の記号のみ許す」という表現は
^[a-zA-Z0-9\+\-\*\/]$
で表されますが、
^[a-zA-Z0-9\+\-\*\/\&]$
などとすると、validationそのものが全く効かなくなってしまいます。
そのとき、エラーも表示されません。
| <発生環境> | |
|---|---|
| OS | Windows XP SP1 |
| JDK | 1.4.2_05 |
| Vender | Sun |
Tomcatを使用しています。
JSPを表示させると、ブラウザに全てのコンテンツが表示されないまま、途中で表示が停止してしまうことがあります。
どのような原因が考えられますか?
| <発生環境> | |
|---|---|
| OS | Windows XP SP1 |
| JDK | 1.4.2_05 |
| Vender | Sun、Tomcat4.1.x |
稼働中のJavaのプロセス情報を確認するため定期的にjstatを実行しています。
長期間稼動中にjstatが"(pid) not found"と表示し、実行に失敗するようになりました。
jpsも該当のPIDを一覧化してくれません。
| <発生環境> | |
|---|---|
| OS | Linux, (Solaris) |
| JDK | Java SE 5.0以降 |
アプリケーションの起動時に以下のパラメータを指定し、
クラスヒストグラムを出力しようとしましたが、
クラスヒストグラムが表示されません。
-XX:+PrintClassHistogram -XX:+UseParallelOldGC
| <発生環境> | |
|---|---|
| OS | Any |
| JDK | JDK5.0 update 6 |
| Vender | Sun |
java -XX:+PrintClassHistogram -XX:+UseParallelOldGC Hello
Full thread dump Java HotSpot(TM) Client VM (1.5.0_06-b05 mixed mode):
"Low Memory Detector" daemon prio=1 tid=0x08336730 nid=0x3c8a runnable [0x00000000..0x00000000]
"CompilerThread0" daemon prio=1 tid=0x08335188 nid=0x3c89 waiting on condition [0x00000000..0x00000000]
"Signal Dispatcher" daemon prio=1 tid=0x08334260 nid=0x3c88 runnable [0x00000000..0x00000000]
(中略)
"VM Thread" prio=1 tid=0x08325fa8 nid=0x3c85 runnable
"GC task thread#0 (ParallelGC)" prio=1 tid=0x082b45c0 nid=0x3c84 runnable
"VM Periodic Task Thread" prio=1 tid=0x08337c18 nid=0x3c8b waiting on condition
この問題を解決するためには、
パラメータで指定するGCアルゴリズムをjava -XX:+PrintClassHistogram -XX:+UseConcMarkSweepGC Hello
Full thread dump Java HotSpot(TM) Client VM (1.5.0_06-b05 mixed mode, sharing):
"Low Memory Detector" daemon prio=1 tid=0x090010a8 nid=0x3dea runnable [0x00000000..0x00000000]
"CompilerThread0" daemon prio=1 tid=0x08fffb00 nid=0x3de9 waiting on condition [0x00000000..0xb227e9c8]
"Signal Dispatcher" daemon prio=1 tid=0x08ffeba0 nid=0x3de8 runnable [0x00000000..0x00000000]
(中略)
"VM Thread" prio=1 tid=0x08ff48e8 nid=0x3de5 runnable
"VM Periodic Task Thread" prio=1 tid=0x0901be80 nid=0x3deb waiting on condition
num #instances #bytes class name
--------------------------------------
1: 163 42752 [C
2: 13 33992 [B
3: 29 8816 <objArrayKlassKlass>
4: 203 7600 [Ljava.lang.Object;
5: 156 3744 java.lang.String
6: 41 3608 java.lang.Class
(中略)
149: 1 8 sun.net.www.protocol.file.Handler
150: 1 8 sun.reflect.ReflectionFactory
151: 1 8 java.lang.ref.Reference$Lock
152: 1 8 java.lang.Terminator$1
153: 1 8 java.util.Hashtable$EmptyEnumerator
Total 19223 1534624
なお、Java5.0以降ではJavaVMの実行環境がサーバークラスマシンとして検出されると、今まで稼働していたJavaプロセスが、突然操作を受け付けなくなりました。
そこで、反応しなくなったJavaプロセスの情報を取得しようとしています。
スタックトレースを表示するjstackコマンドや
ヒープ情報を表示するjmapコマンドを利用しようとしましたが
以下のように、コマンドが異常終了してしまいます。
% jstack 5535
5535: well-known file is not secure
% jstack 5535
5535: Unable to open socket file: target process not responding or
HotSpot VM not loaded
The -F option can be used when the target process is not responding
※jmapコマンドについては、メールマガジン第4号
を参考にしてください。| <発生環境> | |
|---|---|
| OS | Solaris, Linux |
| JDK | JDK6.0以降 |
% jstack -F 9813
Attaching to process ID 9813, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 11.2-b01
Deadlock Detection:
No deadlocks found.
Thread 8739: (state = BLOCKED)
Thread 8549: (state = BLOCKED)
(後略)
処理が非常に遅くなるときがあります。
原因を調査してみたところ、containsメソッドを利用したオブジェクトの重複チェックに
時間がかかっているようです。
| <発生環境> | |
|---|---|
| OS | Any |
| JDK | JDK5.0以降 |
| Vender | Sun |
Listlist = search.createListData(); Set set = search.createSetData(); long start = System.currentTimeMillis(); search(list); long end = System.currentTimeMillis(); System.out.println("List Search:"+ (end-start) + "(ミリ秒)"); start = System.currentTimeMillis(); search(set); end = System.currentTimeMillis(); System.out.println("Set Search :"+ (end-start) + "(ミリ秒)"); /** Listデータの作成 */ public List createListData(){ List list = new ArrayList (); for (int num = 0; num < DATA_MAX; num++){ list.add(String.valueOf(num)); } return list; } /** Setデータの作成 */ public Set createSetData(){ Set set = new HashSet (); for (int num = 0; num < DATA_MAX; num++){ set.add(String.valueOf(num)); } return set; } /** containsによる重複チェック */ public void search(Collection col){ Random random = new Random(); for (int num = 0; num < REPEAT_TIME; num++){ int searchData = random.nextInt(DATA_MAX); col.contains(String.valueOf(searchData)); } }
注意:本文書の内容に誤りがあり、またこの文書によって不利益を被っても、
エスエムジー株式会社は一切関知いたしません。