web-dev-qa-db-ja.com

Javaヒープダンプ内のこれらの奇妙なクラス名はどういう意味ですか?

Javaプロセスで、 jmap および jhat を使用して、メモリリークを追跡しようとしています。これを行うたびに表示されます文字列配列の[Sや文字配列の[Cなど、特定のオブジェクトタイプの奇妙な表記法。何を意味するのか覚えていないので、このようなものをグーグルで検索するのは非常に困難です。

[〜#〜] edit [〜#〜]:私の主張を証明するために、[Sは短い配列であることがわかりました。 [Cはcharの配列です。)

誰もがすべての異なるクラス名とそれらの意味をリストした表を作成したいと思っていますか?またはそのようなテーブルを私に向けますか?

具体的には、[Ljava.lang.Object;の意味を知りたいのですが。

37
itsadok

Class.getName() :に記載されている完全なリストを見つけることができます。

このクラスオブジェクトが配列型ではない参照型を表す場合、Java™言語仕様、第2版で指定されているように、クラスのバイナリ名が返されます。

このクラスオブジェクトがプリミティブ型またはvoidを表す場合、返される名前は、プリミティブ型またはvoidに対応するJava言語キーワードに等しいStringです。

このクラスオブジェクトが配列のクラスを表す場合、名前の内部形式は、配列のネストの深さを表す1つ以上の「[」文字が前に付いた要素タイプの名前で構成されます。要素タイプ名のエンコードは次のとおりです。

要素タイプエンコーディング
ブールZ 
バイトB 
 char C 
クラスまたはインターフェイスLクラス名; 
 double D 
 float F 
 int I 
 long J 
 short S 
65
kdgregory

これは、クラス名の内部表現用に JVM仕様 で指定されたオブジェクトの配列です。

  • 単一の[はの配列を意味します
  • Lの後に完全修飾クラス名(Java/lang/Objectなど)が続くのは、セミコロンで終わるクラス名です。

したがって、[Ljava.lang.object;Object []を意味します

14
dfa

ルールは Class.getName() のAPIドキュメントにリストされています。

[Ljava.lang.Object;Object[]のインスタンスになります。多次元配列は、複数の中括弧で表示されることに注意してください。

5