Есть ли простой способ получить все экземпляры объектов определенного класса в Java

Попробуйте это

function hello(f,d)
{
    alert(f,d);
}

var Images = document.querySelectorAll('.block-image_carousel-single > figcaption');

for (var i = 0; i < Images.length; i++) {

    var Image = Images[i];

    Image.addEventListener('click', function (event) {  

        event.preventDefault();

        hello(this, Image.textContent);
    }, false);
}
17
задан NickL 14 May 2017 в 09:24
поделиться

5 ответов

Отладчик в Eclipse может показать вам все экземпляры класса , поэтому я просмотрел исходники Eclipse. Eclipse использует Java Debug Wire Protocol, что позволяет вам (начиная с Java 6) просмотреть все экземпляры запрашиваемого класса. Если вы хотите пойти по этому пути, возьмите копию исходников Eclipse и посмотрите на метод instances org.eclipse.jdi.internal.ReferenceTypeImpl.

Проще использовать Java Debug Interface. Обратите внимание на метод ReferenceType.instances .

Я до сих пор не разобрался, как использовать JDI для подключения к запущенному процессу и как получить экземпляр ReferenceType. JDK содержит несколько примеров, так что я уверен, что это выполнимо.

.
21
ответ дан 30 November 2019 в 12:58
поделиться

Из того, что мне было сказано в предыдущих постах, нет способа получить список всех экземпляров класса в Java. Reflection API делает некоторые полезные вещи, но не эту конкретную вещь.

Лучшее, что вы можете сделать, - это указатели на все объекты, но это кажется непристойным и не работает в программах других людей. Не идеально, а?

0
ответ дан 30 November 2019 в 12:58
поделиться

Интересно, можно ли сделать то, что вы пытаетесь сделать, можно с помощью BTrace ?

1
ответ дан 30 November 2019 в 12:58
поделиться

http://java.sun.com/j2se/1.5.0/docs/guide/jvmti/jvmti.html#IterateOverInstancesOfClass

Можно написать какой-нибудь нативный код, который получит указатель JVMTI и затем использует его, чтобы итерация по всем экземплярам данного класса, как показано в ссылке выше. Вы можете вызвать этот нативный код из вашей Java-программы. Однако, как указывает Илай, для этого называемого Java Debug Interface имеется высокоуровневая обёртка, доступная начиная с Java 6, которая позволяет совершать такие вызовы из самой Java без необходимости ворчать с нативным кодом.

надеемся, что это поможет

Ram

.
1
ответ дан 30 November 2019 в 12:58
поделиться

Когда я прочитал это, я подумал, что должен быть SOME способ получить такую информацию, так как ява-профилировщики существуют. Может быть, это поможет: http://java.sun.com/j2se/1.4.2/docs/guide/jvmpi/jvmpi.html . Он описывает интерфейс между JVM и агентом профайлера. Но если вы действительно хотите написать это на Java, то вам может не повезти.

В частности, обратите внимание на эту функцию:

jint (*EnableEvent)(jint event_type, void *arg);

    Called by the profiler agent to enable notification of a particular type of event. Apart from event_type, the profiler may also pass an argument that provides additional information specific to the given event type.

    All events are disabled when the VM starts up. Once enabled, an event stays enabled until it is explicitly disabled.

    This function returns JVMPI_NOT_AVAILABLE if event_type is JVMPI_EVENT_HEAP_DUMP, JVMPI_EVENT_MONITOR_DUMP or JVMPI_EVENT_OBJECT_DUMP. The profiler agent must use the RequestEvent function to request these events.

    Arguments:

        event_type  - type of event, JVMPI_EVENT_CLASS_LOAD etc.
        arg     - event specific argument.

    Returns:

        JVMPI_SUCCESS   enable succeeded.
        JVMPI_FAIL  enable failed.
        JVMPI_NOT_AVAILABLE     support for enabling the given event_type is not available. 
4
ответ дан 30 November 2019 в 12:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: