タグ

javaとtipsに関するnamutakaのブックマーク (5)

  • Javaトラブルに応じた初動対応のまとめ - n-agetsumaの日記

    Javaトラブルでは『情報がなくて、再現もなかなかしません』といった状況に陥ることがある。このような状況を回避するために、以下の3つの代表的なトラブルを例に、アプリケーションサーバを再起動する前に何を取得すれば良いのかをまとめてみる。 アプリケーションから応答がない アプリケーションが遅い ヒープメモリが足りない(OutOfMemoryErrorの発生) アプリケーションから応答がない 取得する情報 スレッドダンプ データ取得方法 スレッドダンプとは、コマンド実行時点でのJavaスレッド実行状態を出力したものである。応答がない場合、何らかの要因によりどこかで処理が止まっていることが想定される。スレッドダンプは『どこで止まっているのか?』を切り分けるのに大切な情報である。 取得方法はJDKのバージョンによって色々ある。 kill -3 <pid> (少なくとも1.4.2にはある〜JDK7でも

    Javaトラブルに応じた初動対応のまとめ - n-agetsumaの日記
  • Javaのジェネリクスで,T.class や new T() ができず悩んだ話 (型パラメータのインスタンス化に関し、フレームワーク設計からケーススタディ) - 主に言語とシステム開発に関して

    Javaのジェネリクスで,型パラメータ T のインスタンスが欲しくなったことはあるだろうか? 昨今のオブジェクト指向プログラミングにおいて,ジェネリクスは必須の基文法だ。 扱う対象のクラスが抽象化されて汎用的になりつつ,なおかつ型安全性が確保される。 そのおかげで,処理の重複や分岐をコーディングする必要が無くなり,コード量が驚異的に削減される。 そういう基的な原則を踏まえると, 「型パラメータのインスタンスが欲しい」 というシチュエーションは,Javaのジェネリクスの来の導入目的に真っ向から逆らう。 なぜなら,ジェネリクスは型を抽象化して透過的に扱えるようにするための機構なのだから, せっかく抽象化した物をわざわざ具体化してどうするというお怒りを生む事になるのだ。 頑張って詳細なクラス情報を「T」でパラメータ化して具体性を隠ぺいしたにも関らず, その T に対して .class で具

    Javaのジェネリクスで,T.class や new T() ができず悩んだ話 (型パラメータのインスタンス化に関し、フレームワーク設計からケーススタディ) - 主に言語とシステム開発に関して
  • Java で、ランダムな文字列を生成する方法 - 自分の仕事を憎むには人生は余りにも短い

    ちょっと学んだので整理。 まずJavaにはランダムを提供するクラスとして java.util.Random java.security.SecureRandom の2つがあってRandomクラスは以下のような強度しか持っていない。 Random クラスのインスタンスは、一連の擬似乱数を生成します。クラスでは 48 ビットのシードを使い、このシードは線形合同法で変更されます。 http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/util/Random.html しかも初期化があまりよくなくて初回の乱数がとても偏る。 Random r = new java.util.Random(); double x, min = 1, max = 0; for (int i = 0; i < 1024; i++) { r.setSeed(

    Java で、ランダムな文字列を生成する方法 - 自分の仕事を憎むには人生は余りにも短い
  • 同期&待機 - Kazzz's diary

    先日書いたエントリで、Androidのユーザインタフェースはシングルスレッドモデルを使用しており、UIスレッド以外のスレッドでウイジェット(GUI)を操作することは禁止されていることと、その回避策を書いた。 Instrumentationによるユニットテストでは直接ビューを触ってはいけない この例では単にUIスレッドと同期させておしまいにしたのだが、更に困ったことが発生する。 マルチスレッドで処理を書いたことのあるプログラマであれば、既に気がついていると思うのだが、この場合、 UIスレッド上での処理はHandler、ひいてはLooper上でディスパッチされてから処理されるため、処理を依頼した側(この例ではInstrumentationスレッド)からは終了を知ることができない。 つまりユニットテスト中で activity.runOnUiThread(new Runnable(){ @Over

    同期&待機 - Kazzz's diary
  • list.toArray(new String[list.size()])なの?list.toArray(new String[0)])なの? - 悪あがきプログラマー

    list.toArray(new String[list.size()]) って、実はこうやってもかけるんだよね。 list.toArray(new String[0]) だけど、なぜかがわからない。 ちなみに、eclipseをtoarrayで補完すると、(String[]) list.toArray(new String[list.size()]) と、出てくる。 ちょっと調べてみた。 まさに!な記事があった。 @ITJava TIPS -- 配列とコレクション間の相互変換を行う 引数として与えられた配列に全要素が収まる場合は、引数として与えられた配列に全要素を収め、その配列を戻り値として返す 引数として与えられた配列に全要素が収まらない場合は、引数として与えられた配列と同じ型の配列を新規に生成し、新規に生成された配列に全要素をセットして戻り値として返す コレクションの要素の型が、引数

    list.toArray(new String[list.size()])なの?list.toArray(new String[0)])なの? - 悪あがきプログラマー
  • 1