問題タブ [ibm-jvm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - SSLを使用したWebサービスへのアクセス中にエラーが発生しました
SSL接続を必要とするWebサービスにファイルを送信することになっているプログラムがあります。私は次のようにプログラムを実行します:
これは問題なく動作しましたが、最初の行をに変更すると
次のエラーが発生します。
したがって、この問題は私が使用しているJREに関連しているように見えますが、IBM以外のJREは正常に機能しますが、IBMJREは機能しないというのは意味がないようです。何かアイデアや提案はありますか?
java - なぜこのコードはコンパイルされますが、ランタイムClassNotFoundExceptionがありますか?
プロプライエタリのsun。*。OperatingSystemMXBeanを使用するコードがあるので、注意していました。
ただし、このコードをIBM JVMで実行すると、ではなくClassCastException
、ランタイムが取得されますClassNotFoundException
。そのクラスが利用できない場合、なぜこのコードはうまくコンパイルできるのですか?また、JVMはこのようなものにどのように影響しますか?
java - IBM J9 仕様では、ブートストラップされていないクラスからのファイル作成アクセスは許可されません
Windows Mobile で実行される Java アプリケーションに J9 仕様 (wm50-arm-midp20_6.1.2.2) を使用していますが、ファイルを作成する必要があるため問題が発生しました。
com.ibm.oti.connection.file.FileOutputStream の J9 コンストラクターのこの行からセキュリティー例外が発生します。
現在、他のほとんどの出力ストリーム タイプには、呼び出しが送信されるサポート用の connection.java クラスがありますが、ファイル ストリームの実装をサポートするものはありません。
これを回避するには、独自の DLL ファイルを作成して Java コードから呼び出す必要があると予想していますが、ネイティブ dll を呼び出すことなくこの問題を回避できた人がいるかどうか疑問に思っています。
前もって感謝します!JR
java - マップからカウンターをインクリメントし、それを読み取っている間にフリー ソリューションをロックする
クライアント側コードのパフォーマンスを測定しようとしています。つまり、クライアントコード内の他のクラスはほとんどなく、時間end to end client side code
がかかります。だから私はそれを中心にベンチマークを行いました。
以下は、私が現在使用している簡単なプログラムです。しかし、それには問題があります。
以下は、実装するクラスですRunnable interface
問題文:-
私はIBM JVM
自分のマシンで実行しています。IBM JVM
私は代わりに使用している会社で働いているSUN JVM
ので、JVM部分を変更することはできません。
IBM JVMincrementAndGet()
メソッドでは、まず第一に、私にとって非常に奇妙でした
つまりsynchronized
、各スレッドが互いに待機することを意味します。Lock free solution
そして今、各メソッドのパフォーマンスを測定するためにこれを探しています。
私は知っています、ここには小さな待ち時間があります。しかし、クライアント側のコード内で測定したいメソッドのパフォーマンスが何であれ、通常はそのメソッドのすぐ上に以下の行を置きます
long start = System.nanoTime();
そして、これらの2行は同じ方法の後にありますが、ConcurrentHashMap
したがって5-8 different methods
、クライアント側のコードの異なるクラスに上記の同じコードがある場合。次に、各スレッドが値をインクリメントするためにそこで待機するため、エンドツーエンドのパフォーマンス測定は正しくありません。それが、このためのロックフリーのソリューションを探している理由です。
これを行う簡単な方法はありますか?誰でもこれの例を提供できますか?
前もって感謝します。
更新されたコード:-
このコードもスレッドセーフコードですか? 複数のスレッドからもアクセスされるためです。
java - TrustManagerFactory IBM Java 1.7
私の Java アプリケーションでは、クライアント側で Java のキーストア機能を使用しました。Oracle と IBM Java 環境の両方をサポートしています。基本的に、コードは次のようになります。
試す {
このプログラムは、IBM JRE 1.6 以前のバージョンで正常に動作します。バージョン 1.7 では、サーバーへの接続試行の場合、次の例外が受信され、最後に失敗します。
スレッド「myThread」での例外 java.lang.NoClassDefFoundError: sun/security/validator/KeyStores 09:06:46>> at sun.security.ssl.X509TrustManagerImpl.(X509TrustManagerImpl.java:80) 09:06:46>> at sun.security.ssl.TrustManagerFactoryImpl$SimpleFactory.getInstance(TrustManagerFactoryImpl.java:240) 09:06:46>> で sun.security.ssl.TrustManagerFactoryImpl.engineInit(TrustManagerFactoryImpl.java:79) 09:06:46>> でjavax.net.ssl.TrustManagerFactory.init(TrustManagerFactory.java:19) 09:06:46>> MyTrustMgr.getTrustManager(MyTrustMgr.java:34)で
この問題の原因は何か分かりますか?
java - String.substring が文字データをコピーしているかどうかを検出する方法
Oracle Java 1.7 update 6 以降では、 を使用するString.substring
と文字列の内部文字配列がコピーされ、古いバージョンでは共有されることがわかっています。しかし、現在の動作を教えてくれる公式の API は見つかりませんでした。
使用事例
String.substring
私のユースケースは次のとおりです。パーサーでは、基になる文字配列がコピーまたは共有されているかどうかを検出するのが好きです。問題は、文字配列が共有されている場合、new String(s)
メモリの問題を回避するためにパーサーが明示的に「共有解除」する必要があることです。ただし、String.substring
とにかくデータをコピーする場合、これは必要なく、パーサーでデータを明示的にコピーすることは回避できます。使用事例:
私が必要なもの
基本的に、必要がないboolean isSubstringCopyingForSure()
かどうかを検出する静的メソッドがnew String(..)
必要です。があれば検知しなくてもOKですSecurityManager
。基本的に、検出は控えめに行う必要があります (メモリの問題を回避するために、必要でなくても使用したいと思いますnew String(..)
)。
オプション
いくつかのオプションがありますが、特にOracle以外のJVMの場合、それらが信頼できるかどうかはわかりません:
String.offset フィールドの確認
JVM バージョンの確認
動作の確認 2 つのオプションがあり、どちらもかなり複雑です。1 つは、カスタム文字セットを使用して文字列を作成し、部分文字列を使用して新しい文字列 b を作成し、元の文字列を変更して b も変更されているかどうかを確認することです。2 番目のオプションは、巨大な文字列を作成してから、いくつかの部分文字列を作成し、メモリ使用量を確認することです。
java - StringBuffer char[] が heapdump の範囲外のようです
OutOfMemoryError に続いて、結果のヒープダンプを IBM Support Assistant の 64 ビット メモリ アナライザー (Websphere 7.0.23 で実行されている J9 VM) で処理しました。
いくつかのリーク候補がリストされました (すべてシステム クラスローダー関連) が、そのうちの 1 つは、StringBuffer で 256 の値で初期化された char[] に実際には 7700 万の null 文字が含まれていることを示しているようです。
Support Assistant からの結果の heapdump 分析は、char[77418987] @ 0xc32* * * \u0000\u0000\u0000を示しています.....
これは StringBuffer -> PatternLayout -> TimeAndSizeRollingAppender によって参照されます
保持されたヒープは、各文字に 2 バイト、配列自体に 18 バイト、合計で 150 MB 以上をチェックアウトします。
Log4j のバージョンは 1.2.16 で、simonsite の TimeAndSizeRollingAppender を使用しています (この依存関係を削除したいのですが)。
これは Support Assistant からの誤検知でしょうか、それともヒープ上で char[256] が char[77000000+] になる方法はありますか?
java - Java JVM -xdump 引数を使用して http ワイヤ データを出力する
私は を使用しておりIBM JRE
、Java SDK
Java クライアントと .NET クライアントの 2 つのクライアントで使用される があります。
Java クライアントでは、次の設定を使用して http データをキャプチャします。
.NET クライアントでは、パラメーターを JVM に渡すことができます。System.setProperty
Java クライアントの設定と同じ動作を実現するために使用できるパラメーターはありますか?
ダンプエージェントなどについて少し調べてみましたが、適切なものが見つからなかったようです。 http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/index.jsp?topic=%2Fcom.ibm.java.doc.diagnostics.60%2Fdiag%2Ftools%2Fdump_agents.html