Сохранить память процесса для более позднего использования?

Используйте setLocationRelativeTo(null)

Этот метод имеет особый эффект, когда вы передаете ему null. Согласно Javadoc:

Если компонент является нулевым, или GraphicsConfiguration, связанный с этим компонентом, является нулевым, окно помещается в центр экрана.

blockquote>

Это должно быть сделано после установки размера или вызова pack(), но прежде чем устанавливать его видимым, например:

frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);

26
задан Unknown 4 April 2009 в 08:03
поделиться

7 ответов

Технически это возможно, но для этого потребуется также сохранить все выделенные системой ресурсы состояния - например, дескрипторы файлов, а затем восстановить их. Так что это сложная задача.

Самый простой способ добиться того, чего вы хотите - это использовать виртуальную машину, такую ​​как VMWare. Когда вы приостанавливаете его, вы фактически сохраняете все состояние машины вместе со всеми запущенными программами.

21
ответ дан sharptooth 25 September 2019 в 07:44
поделиться

Это грязно до такой степени, что невозможно иметь дело с нативным кодом, как резкое упоминание.

Однако некоторые программы (например, iirc emacs) использовали трюки «сбросить собственную память» для сохранения конфигурации, вместо того, чтобы работать с файлами конфигурации. Это не работает в Windows, так как исполняемые файлы запускаются в режиме общего доступа запрета записи. Но это милый (хотя и опасный) трюк с Linux или DOS:)

1
ответ дан snemarch 25 September 2019 в 07:44
поделиться

Раймонд Чен объясняет , почему это невозможно. Очевидно, что не все инженеры Microsoft читают это, потому что компилятор Visual Studio делает это при предварительной компиляции заголовков. После первой компиляции заголовков она создает свое собственное состояние и восстанавливает себя, чтобы продолжить.

0
ответ дан MSalters 25 September 2019 в 07:44
поделиться

Это обычно называют персистентным продолжением. Некоторые языки как SmallTalk и SBCL имеют поддержку первого класса персистентных продолжений. Большинство языков не делает.

7
ответ дан Rakete1111 28 November 2019 в 07:35
поделиться

В зависимости от Ваших требований и ОС Вы могли попытаться вызвать дамп ядра

Я никогда не пытался на самом деле загрузиться, выведенная программа ядра создают резервную копию кроме в gdb. На любые файлы кажется, что Вы имеете открытый или любое другое состояние, которое не находится в Вашей памяти программ, был бы потерян как sharptooth указанный.

Другой подход просто сериализировал бы состояние, в котором Вы нуждаетесь к диску в Вашей программе. Это сосет, но это - вероятно, самый надежный путь, если Вы не довольны приостановкой осуществления программы. Это могло быть сделано с библиотекой потока Вашей операционной системы. Или как один плакат, на который указывают с Вашей оболочкой.

4
ответ дан fuzzy-waffle 28 November 2019 в 07:35
поделиться

Хорошо Java имеет сериализацию, и это прибывает куда-нибудь близко к нему. Хотя Вы не можете сделать этого к самому низкому уровню как адрес памяти регистров ЦП и т.д., так как это потребует, чтобы OS была в том же состоянии, которое было, когда Вы 'приостановили' процесс.

Это может быть хорошим проектом как модулем ядра Linux :-)

2
ответ дан Xolve 28 November 2019 в 07:35
поделиться

Основа рабочего процесса в.NET 3.0 и выше позволяет, чтобы рабочие процессы были остановлены и перезапущены.

0
ответ дан Jonathan Parker 28 November 2019 в 07:35
поделиться
Другие вопросы по тегам:

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