2009-07-06 11 views
31

Próbuję wyśledzić wyciek pamięci w procesie Java, używając jmap i jhat. Za każdym razem, gdy to robię, widzę tę dziwną notację dla określonych typów obiektów, takich jak [S dla tablic ciągów i [C dla tablic znaków. Nigdy nie pamiętam, co znaczy co, i bardzo ciężko jest googlować.Co oznaczają te dziwne nazwy klas w zrzutach sterty java?

(EDIT: udowodnić mój punkt widzenia, okazuje się, że [S jest szereg krótko- i [C jest tablica char.)

Każdy dba, aby tabela wymieniając wszystkie różne nazwy klas i co oni oznaczać? Lub wskazać mi taki stół?

W szczególności chciałbym wiedzieć, co oznacza [Ljava.lang.Object;.

+0

Tablica łańcucha powinien być _ [Ljava/język/ciągu; _. –

+0

W mojej obronie, googling poprowadził mnie do artykułu na java.sun.com, który zawiera następujący wiersz: "Obiekty sznurka i tablicy znaków, [S i [C, zawsze będą wysoko na tej liście". Nieco mylące. – itsadok

+0

Ta strona zawiera również dobre informacje: https://communities.ca.com/web/ca-wily-global-user-community/wiki/-/wiki/Main/JNI+Signatures/contactLink – masterxilo

Odpowiedz

55

Znajdziesz pełną listę udokumentowany pod Class.getName():

Jeśli ten obiekt klasy reprezentuje typ odniesienia, który nie jest tablicą typ następnie binarny nazwa klasy jest zwracane, jak określono przez specyfikację języka Java ™ , Druga Wydanie .

Jeśli ten obiekt klasy reprezentuje prymitywny typ lub unieważnione, a następnie nazwę zwrócony jest String równa słów kluczowych języka Java odpowiadającej prymitywnego rodzaju lub nieważne.

Jeśli klasa obiektu reprezentuje klasę macierzy, wówczas wewnętrzna forma nazwy składa się z nazwy typu elementu poprzedzonych bardziej „[” znaki reprezentujące głębokość z zagnieżdżenia tablicy .Kodowanie nazwy typ elementu jest następująco:

 
Element Type  Encoding 
boolean    Z 
byte    B 
char    C 
class or interface Lclassname; 
double    D 
float    F 
int     I 
long    J 
short    S 
14

jest szereg obiektów, jak określono przez JVM Specifications wewnętrzne oznaczenie nazwy klas:

  • jednym [pomocą tablicą
  • L następnie pełnej nazwy klasy (np Java/lang/Object) to nazwa klasy o nazwie zakończona średnikiem;

tak [Ljava.lang.object; oznacza obiektu []

+0

Sekcja 4.3.2 to prawdopodobnie lepsze odniesienie. –

+0

ten link w rzeczywistości nie opisuje konwencji używanych przez Class.getName() - w rzeczywistości wewnętrzna reprezentacja nazw jest zupełnie inna – kdgregory

+0

Class.getName() nigdy nie jest cytowana przez itsadok ... – dfa

5

Reguły te są wymienione w dokumencie API Class.getName().

[Ljava.lang.Object; będzie instancją Object[]. Zwróć uwagę, że wielowymiarowe tablice są wyświetlane z wieloma nawiasami otwierającymi.

Powiązane problemy