Java AppDomain как абстракция?

К сожалению, действительно потрясающий alloca() отсутствует в почти удивительном TCC. Gcc имеет alloca().

  1. Он сеет семя собственного уничтожения. С возвращением в качестве деструктора.

  2. Как и malloc(), он возвращает недопустимый указатель при сбое, который вызовет сбой в современных системах с MMU (и, надеюсь, перезапустит те, у которых нет).

  3. В отличие от автоматических переменных, вы можете указать размер во время выполнения.

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

Если вы нажмете слишком глубоко, вы уверены в сегментации (если у вас MMU).

Обратите внимание, что malloc() не предлагает больше, так как возвращает NULL (что также приведет к segfault, если назначено), когда системе не хватает памяти. То есть все, что вы можете сделать, это внести залог или просто попытаться назначить его любым способом.

Для использования malloc() я использую глобалы и присваиваю им NULL. Если указатель не равен NULL, я освобождаю его перед использованием malloc().

Вы также можете использовать realloc() в качестве общего случая, если хотите скопировать любые существующие данные. Вам нужно проверить указатель, прежде чем выяснить, собираетесь ли вы копировать или объединять после realloc().

3.2.5.2 Преимущества alloca

11
задан Bob Albright 29 June 2009 в 04:34
поделиться

3 ответа

Я думаю, что ответ Янниса здесь немного вводит в заблуждение. Просто сказать «нет, ты не можешь» - это еще не все. Вопрос сосредоточен на выгрузке классов Java в серверный процесс для удаления утечки кода из процесса JVM без перезапуска процесса. OP не запрашивает функцию изоляции памяти, подобную процессу, которую дает AppDomain, а возможность выгружать классы в работающей JVM. Я говорю как процесс, поскольку внутри AppDomain не является процессом, но он обладает некоторыми аспектами изоляции, которые предоставляет операционная система первоклассному процессу. Упомянутый изоляционный JSR относится к этой «процессной» изоляции. Возможна выгрузка загрузчиков java ClassLoaders и, следовательно, классов без зацикливания процесса ОС, на котором размещена JVM. Здесь упоминается пара методов: SO 148681 . Сделать это на Java нетривиально и элегантно, но возможно.

11
ответ дан 3 December 2019 в 06:22
поделиться

Переработка отдельных JVM на основе времени или конкретных критериев, таких как растущее потребление памяти и ограничения использования памяти, - это возможность расширенных версий сервера приложений, с которым я работаю, WebSphere. Если ваш сервер приложений не имеет такой возможности, то создание некоторых сценариев оболочки для предоставления чего-то вроде этой функции должно быть выполнимым.

Это работает довольно хорошо, если:

a). Запросы от пользователей распределяются по большему набору JVM. б). Все запросы не имеют состояния или имеется возможность репликации состояния. Репликация - это возможность WebSphere и WebLogic, я предполагаю, что другие серверы приложений тоже имеют такую ​​возможность.

В таких средах нет необходимости «медленно» перемещать людей на другие серверы. Нам просто нужно знать, что мы можем безопасно остановить любую службу / JVM и что эти сеансы будут выполняться на другом экземпляре.

0
ответ дан 3 December 2019 в 06:22
поделиться

К сожалению, нет.

Аналогичная концепция в мире Java - Isolate, которая впервые появилась в JSR 121. Это был API для будущая функция JVM, которая обеспечит безопасное разделение и обмен данными между различными приложениями, работающими в одной JVM. После публикации JSR (около 2004 г.) одна исследовательская группа в Sun работала над проектом «Барселона». Этот проект попытался реализовать API изоляции в виртуальной машине Sun HotSpot 1.5. Через два года они выпустили прототип для SPARC / Solaris. Версии для Windows / Linux так и не были выпущены из-за проблем со стабильностью.

Недавно SUN представила ограниченную версию Isolation API для J2ME, сосредоточившись на предложении «нескольких процессов» в средах, которые активно их не предлагали. Относительно недавно, мы также спросили Sun об их статусе реализации Isolate API для стандартных JVM, и они ответили, что они планируют выпустить JVM с ограниченной поддержкой. Они планируют предложить возможность загрузки / выгрузки изолятов, но без возможности связи между ними.

Кроме того, было проведено старое исследование по созданию совместимой с изоляторами версии JVM, называемой JanosVM (java 1.1), но я сомневаюсь что сегодня он может быть любым.

Надеюсь, это поможет ...

8
ответ дан 3 December 2019 в 06:22
поделиться
Другие вопросы по тегам:

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