В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Ваш лучший выбор состоит в том, чтобы, вероятно, выполнить интерпретатор Java в цикле и просто выйти. Например:
#!/bin/sh
while true
do
java MainClass
done
, Если Вы хотите способность перезагрузить или завершить работу полностью, Вы могли бы протестировать статус выхода:
#!/bin/sh
STATUS=0
while [ $STATUS -eq 0 ]
do
java MainClass
STATUS=$?
done
В рамках программы Java, можно использовать System.exit (0), чтобы указать, что Вы хотите "перезагрузить", и System.exit (1), чтобы указать, что Вы хотите остановиться и остаться остановленными.
JVM IBM имеет функцию, названную "восстановленной", который позволяет Вам эффективно делать то, что Вы спрашиваете.
Кроме JVM IBM, я не думаю, что это возможно.
Не реальная "перезагрузка", но:
можно создать собственный загрузчик класса и загрузить все классы (кроме начальной загрузки) с ним. Затем когда Вы хотите "перезагрузить", удостоверьтесь, что Вы делаете следующее:
Эта процедура используется (в некоторой степени) при "замене в горячем режиме" веб-приложений в веб-серверах.
Примечание, хотя, статические участники класса и JVM "глобальные" объекты (к которым получает доступ корень GC, который не находится под Вашим контролем) останутся. Например, Locale.setLocale () производит статического участника на Локали. Так как класс Локали загружается системным загрузчиком класса, он не будет "перезапущен". Это означает, что старый Объект языкового стандарта, который использовался в Locale.setLocale () будет доступен позже если не явно убранный.
еще один маршрут для взятия является инструментарием классов. Однако, так как я знаю мало его, я не решаюсь давать совет.
Если Вы работаете в сервере приложений, они обычно идут со встроенными горячими механизмами развертывания, это перезагрузит все классы в Вашем приложении (веб-приложение, корпоративное приложение), когда Вы повторно развернете его.
Иначе, необходимо будет изучить коммерческие решения. Мятежник Java ( http://www.zeroturnaround.com/javarebel/ ) является одной такой опцией.
AFAIK там не является таким путем.
Уведомление, что, если бы был способ сделать это, оно высоко зависело бы от текущего загруженного кода для надлежащего высвобождения всех сохраненных средств для обеспечения корректного перезапуска (думают о файлах, socket/tcp/http/database соединения, потоки, и т.д.).
Некоторые приложения, как AS Jboss, получают Ctrl+C на консоли и обеспечивают корректное завершение работы, закрывая все ресурсы, но это - специализированный код и не функция JVM.
Я делаю что-то подобное использование JMX, я 'разгружу' модуль с помощью JMX и затем 'перезагружу' его. Негласно я уверен, что они используют другой загрузчик класса.