2014-01-06 3 views
2

Я хочу узнать возраст объекта в Java, когда мы используем новое ключевое слово, пользовательский объект создается на Java, но когда он будет уничтожен?Как рассчитать численный возраст объекта в Java

Пришло ли время, чтобы пересечь вещественное пространство JVM? Могу ли я узнать численный возраст объекта с помощью программирования JNI?

Какова связь между пространством выживания, пермским пространством и возрастом объекта?

+0

Вы не можете его вычислить. Вам нужно было бы * записать * его, в объект или на карту, привязанную к объекту. – EJP

ответ

1

Вы можете запустить таймер в конструкторе объекта и остановить его, когда вызывается finalize(). Вы можете переопределить finalize() класса Object. Просто вызовите super.finalize() перед вашей логикой таймера в методе finalize() (поток GC вызовет finalize() на экземпляре Object, чтобы освободить его ресурсы)

Объект создан в молодом гене, который при выживания с половины GC перейдите в область старого поколения. Perm gen используется для хранения информации о классе, а не экземпляров, если он.

+0

спасибо ankit, могу ли я ожидать того же выхода каждый раз. Мы не можем заставить GC работать. Деятельность по очистке GC будет выполняться на связке объектов. и запуск GC зависит от JVM. –

+0

Нет, вы не можете. Вы не можете контролировать, когда происходит GC. –

1

Объект будет уничтожен после того, как он получит право на GC, и JVM решает запустить GC в области кучи (нового/старого поколения), где находится объект. Вы можете узнать момент, когда он уничтожается путем переопределения метода завершения или использования WeakReference и ReferenceQueue.

1

В Java возраст объекта хранится в Object Header.

// The markOop describes the header of an object. 
// 
// Note that the mark is not a real oop but just a word. 
// It is placed in the oop hierarchy for historical reasons. 
// 
// Bit-format of an object header (most significant first, big endian layout below): 
// 
// 32 bits: 
// -------- 
//    hash:25 ------------>| age:4 biased_lock:1 lock:2 (normal object) 
// 
// 64 bits: 
// -------- 
// unused:25 hash:31 -->| unused:1 age:4 biased_lock:1 lock:2 (normal object) 

Возможно, вы можете получить возраст объекта, если знаете адрес объекта.

Какова связь между пространством выживания, пермским пространством и возрастом объекта?

Memory Management in the Java HotSpot Virtual Machine.

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/G1GettingStarted/images/slide1.png

Если возраст объекта превышает порог времени, он будет перемещен из Эдема/survior к старому поколению.

Смежные вопросы