Ich führe eine andere JVM (java.exe) aus der Hauptanwendung aus. Gibt es eine Möglichkeit, ein Objekt (ziemlich großes Objekt) mit dem neu erstellten Prozess (zum Zeitpunkt der Erstellung oder nach der Erstellung) zu teilen.
%Vor%Nun möchte ich, dass das SO-Objekt für den Prozess verfügbar ist, der durch das proc-Objekt
bezeichnet wirdStellt ProcessBuilder zu diesem Zweck irgendwelche Dienstprogramme zur Verfügung?
Wenn Sie Objekte gemeinsam nutzen möchten, verwenden Sie am besten Threads anstelle eines separaten Prozesses. Prozesse können Speicher nicht gemeinsam nutzen (außer über JNI), so dass Sie das große Objekt in serialisierter Form entweder über Dateien oder über eine RMI-Socket-Verbindung hin und her kopieren müssen (wobei letzteres die bessere Option ist, da es zu einer inhärenten Synchronisation führt). .
Sie können einen Service verfügbar machen, um den Zugriff auf die Daten des Objekts zu ermöglichen. Es ist vergleichsweise einfach, die Kommunikation zwischen Prozessen mithilfe von RMI einzurichten. Es wird einen IPC-Overhead geben, so dass dies nicht so performant wie lokaler Zugriff ist, feinkörniger Zugriff wird teuer, aber wenn Sie eine Zusammenfassung oder andere aggregierte Daten erhalten, dann könnte dies ein anständiges Modell sein.
Sie sagen nicht, warum dies getrennte Prozesse sind. Haben Sie die Möglichkeit, den Code Ihres Kindprozesses direkt in den übergeordneten Prozess zu laden? Dynamisches Be- und Entladen ist möglich.
Nein, es gibt keine gemeinsame Speicherunterstützung in Java.
Am einfachsten wäre es, das Objekt in eine temporäre Datei zu serialisieren und dann in der neuen JVM wieder zu deserialisieren.
Ich denke, dass Sie zu diesem Zweck verteilte Caches verwenden können (EHCache, memcached usw.)
Tags und Links java ipc process processbuilder