5

配列の構築時に実行が停止するように、Eclipseまたは別のデバッガーにブレークポイントを設定する方法はありますか?私は特にプリミティブ配列(int [])の構築に興味がありますが、この質問はどの配列にも等しく当てはまるはずです。

int []、char []、byte []などで大量のガベージを作成している原因を見つける必要があるため、条件付きでブレークポイントを設定できれば、コードを絞り込むことができます。 。

yourkitのメモリプロファイリングを使用してみましたが、これらのオブジェクトのごく一部の割り当てのみが表示され<objects without allocation information>、残りはとして表示されます。理由はわかりません。Objects unreachable from GC rootsビューに入ると、ごみの約7%の割り当て情報しか表示されません。このように少数のオブジェクトに割り当てられているため、いくつかの場所が欠落しているかどうかさえわかりません。YKにすべての割り当てを保持させる方法はありますか?

4

3 に答える 3

3

配列を作成する場合、VMは、参照で埋めるためその量のメモリスペースを予約するだけです。これはシングルステップのネイティブ操作であり、メモリ割り当てプロセスのブレークポイントは不可能です。たとえば、次のコードを取ります

public class Test{

 public void createArray(){

        int[] iarray = new int[10];

    }

}

これを分解すると、次の一連の手順が表示されます

Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public void createArray();
  Code:
   0:   bipush  10
   2:   newarray int
   4:   astore_1
   5:   return

}

メソッドの定義は、指定された数の要素にメモリを割り当てる単一の命令であることに注意してcreateArray()くださいnewarray int

于 2012-09-14T10:43:47.697 に答える
2

私はYourKitで働いているので、「割り当て情報のないオブジェクト」メッセージを明確にするようにします。

デフォルトでは、YourKitプロファイラーは各10番目のオブジェクトの割り当てを記録します。これは構成可能なオプションであるため、「各記録」の値を1に変更すると役立つはずです。プロファイラーのドキュメントhttp://www.yourkit.com/docs/11/help/allocations.jspの詳細は次のとおりです。

于 2012-09-26T11:31:44.670 に答える
0

World of Primitive arrays is really mysterious and I don't think anyone is allowed in there ;). デバッグでJavaコードを参照する唯一の方法は、宣言ではF5なくF5 i.e.Step in関数に対してのみ機能するため、不可能だと思います。

Arrays.toString()配列内のすべての要素を印刷するを使用してこれらの配列を印刷できることを確認するには

于 2012-09-14T10:34:03.867 に答える