wykonanie nowego kodu Javy w istniejącym procesie jvm

Mam obecnie uruchomiony proces java pod powłoką windows.

Jeden z wątków odpowiedzialnych za serializację jest blokowany na czas nieokreślony, w wyniku czego ważne informacje przechowywane w pamięci nie są już zapisywane na dysk.

Jeśli zamknę proces, informacja zostanie utracona.

Byłoby wygodne, gdybym mógł napisać i skompilować jakiś nowy kod i wykonać go w tej samej przestrzeni pamięci, aby wspomniane informacje mogły być serializowane jeszcze raz, zanim zamknę ten proces.

Proces został uruchomiony przy użyciu polecenia java -jar.

Czy dzięki funkcjom hotspot VM można to jakoś osiągnąć?

Author: pstanton, 2010-01-25

2 answers

Możesz użyć Dołącz API aby dołączyć do maszyny wirtualnej. oto artykuł, który wyjaśnia, jak z niego korzystać

Oto przykład kodu:

String agentJAR = "myAgent.jar";
VirtualMachine vm = VirtualMachine.attach (processid);
vm.loadAgent(agentJAR);
Gdzie agent to nazwa Twojego słoika.

Agent jar zawiera agenta , który może łączyć się z JVM za pomocą interfejsu API oprzyrządowania.

Aby utworzyć agenta, który zostanie załadowany w czasie wykonywania, zaimplementujesz agentmain funkcję taką jak:

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

Lub

public static void agentmain(String agentArgs); 

The Instrumentation obiekt służy do modyfikowania klas w czasie wykonywania, czego prawdopodobnie nie potrzebujesz. Ale mam nadzieję, że możesz po prostu umieścić kod potrzebny do uruchomienia w agentmain, a następnie użyć dołączonego API, aby uruchomić go w docelowym JVM.

Powodzenia!!
 12
Author: Chad Okere,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-25 07:49:15

Możesz spróbować zarejestrować obsługę sygnału, jest to bardziej ograniczone w systemie Windows niż na innych platformach.

Przykłady i opis http://www.ibm.com/developerworks/java/library/i-signalhandling/

Ale pytanie, dlaczego wątek jest zablokowany?

 0
Author: VHF,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-25 06:17:04