выполните новый код Java в существующем процессе jvm

У меня есть процесс Java, в настоящее время работающий под оболочкой окон.

Один из потоков, ответственных за сериализацию, заблокирован неограниченно долго и в результате важная информация, которая хранится в памяти, больше не пишется в диск.

Если я завершу работу процесса, то информация будет потеряна.

Было бы удобно, если я мог бы записать и скомпилировать некоторый новый код и иметь его, выполняются в том же пространстве памяти так, чтобы упомянутая информация могла быть сериализирована еще раз, прежде чем я завершу работу процесса.

Процесс был запущен с помощью a java -jar команда.

С функциями VM горячей точки, там какой-либо способ достигнуть этого?

12
задан pstanton 25 January 2010 в 05:18
поделиться

2 ответа

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

, вот пример кода:

String agentJAR = "myAgent.jar";
VirtualMachine vm = VirtualMachine.attach (processid);
vm.loadAgent(agentJAR);

, где агент - это имя вашей банки.

Банка агента содержит агент , который может взаимодействовать с JVM с использованием API приборов.

Чтобы создать агента, который загружается во время выполнения, вы реализуете функцию Agentmain , такие как это:

public static void agentmain(String agentArgs, Instrumentation inst); 

или

public static void agentmain(String agentArgs); 

. Приборы используются для изменения классов во время выполнения , что вам, вероятно, не нужно. Но, надеюсь, вы просто можете поставить любой код, который вам нужен в AgentMain, а затем используйте ATCOR API для запуска его в целевой JVM.

Удачи !!

12
ответ дан 2 December 2019 в 21:43
поделиться

Вы можете попробовать регистрацию обработчика сигнала, это более ограничено Окна, чем на других платформах.

Примеры и описание http://www.ibm.com/developerworks/java/library/i-signalhandling/

Но вопрос, который нужно задать, почему поток заблокирован?

0
ответ дан 2 December 2019 в 21:43
поделиться
Другие вопросы по тегам:

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