Я хотел бы иметь возможность получить тот же идентификатор, который используется в дампах кучи Java (созданных с помощью jmap или JMX и т. Д.). Это позволяет идентифицировать живой объект в неподвижном приложении по сравнению с более старым снимком памяти (дампом кучи) того же приложения.Как получить идентификатор объекта, используемый в куче кучи
Я уже проверил немного, и это obvioulsy не hashCode, ни уникальный идентификатор JDI (который вы можете видеть в своих отладчиках).
От проверки кода в sun.jvm.hotspot.utilities Я предполагаю, что это адрес объектов в памяти. Но также мои тесты с sun.misc.Unsafe не привели к тому же значению id, что и в кучих кучи. (см. здесь для некоторых Небезопасное объяснение: http://zeroturnaround.com/rebellabs/dangerous-code-how-to-be-unsafe-with-java-classes-objects-in-memory/)
Любые идеи? Благодаря :) !
Означает ли объект (или любой из его супер-объектов) hashCode? Если это так, вам может повезти с ['System.identityHashCode()'] (http://docs.oracle.com/javase/6/docs/api/java/lang/System.html#identityHashCode%28java.lang. Object% 29) – blazetopher
Или это может быть так же просто, как нужно шестнадцатеричное значение hashCode? 'Integer.toHexString (obj.hashCode())' ... – blazetopher
Спасибо за ваш комментарий, но нет, поскольку я сказал, что это, к сожалению, не hashCode. Также не System.identiyHashCode (это то же самое, что и обычный хэш-код объекта, если он не переопределяется). И нет, шестнадцатеричный или десятичный не имеет значения. В конце концов, это одно и то же значение, не так ли? Большинство анализаторов дампов кучи имеют тенденцию отображать значение как шестнадцатеричное. Это простое длинное значение в моем случае (вероятно, из-за 64-битного jvm). –