Nano Hash - криптовалюты, майнинг, программирование

Как заменить текущий процесс Java в Windows с помощью JNA/JNI?

Я хочу заменить текущий процесс Java новым, как это делает Unix exec . Уже был аналогичный вопрос здесь, но я бы предпочел, чтобы решение потребляло как можно меньше памяти (принятый ответ предлагает использовать ClassLoaders, что может привести к утечке памяти; аналогичным простым решением будет использование другого процесса только для начните с правильного). Конечно, это можно сделать в зависимости от платформы с помощью JNI, и я думаю, что могу сделать это для Unix (и решение для Unix уже существует), но я почти ничего не знаю о соответствующем Windows API. Какую функцию Windows следует вызвать? Кто-нибудь уже сделал это?


  • Вы запускаете другой процесс JVM? Если да, то какая неэффективность памяти вас беспокоит? 27.03.2011
  • Использование Unix exec решает все проблемы; замечание о потреблении памяти касается чисто Java-решений. 27.03.2011

Ответы:


1

В Windows есть много подсистем на выбор, которые работают в базовой ОС, поэтому полезно иметь некоторое представление о том, к чему вы стремитесь. Например, если вы можете использовать библиотеку времени выполнения C, вы можете просто использовать _exec(), которые очень похожи на своих собратьев из Unix. Возможно, вы можете изменить jniexec для работы с окнами, используя их.

27.03.2011
  • Вы написали, можете ли вы использовать библиотеку времени выполнения C - откуда мне знать? Что, если я захочу сделать это в своем приложении на вашем компьютере (под управлением Windows XP, Vista или 7; меня не волнуют более старые или экзотические версии)? Насколько я знаю, с JNI мне нужно упаковать небольшую DLL, содержащую вызов _exec, и что еще? 27.03.2011
  • Я не эксперт по всем способам получения библиотеки времени выполнения C. Конечно, один из способов — использовать Visual Studio для создания библиотеки. В В Википедии есть несколько слов на эту тему. 27.03.2011
  • Поведение _exec() в Windows несколько отличается от поведения POSIX API. В частности, он не будет повторно использовать один и тот же PID, поэтому родительский процесс будет думать, что дочерний процесс завершился. 23.05.2011

  • 2

    API Win32 не включает понятие «exec». POSIX API делает это. Низкоуровневый WinNT API имеет строительные блоки, но использовать их довольно сложно, и, по крайней мере в прошлом, требовалось прибегать к недокументированной функциональности.

    27.03.2011
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..