Любое понятие общей памяти в Java

Нет никакого пути, который будет уведомлен относительно неперехваченных исключений в Flex 3. Adobe знает о проблеме, но я не знаю, планируют ли они создание обходного решения.

единственное решение как есть должен поместить попытку/выгоду в логические места и удостовериться, что Вы слушаете ОШИБКУ (или ОТКАЗ для веб-сервисов) событие для чего-либо, что диспетчеризирует их.

Редактирование: , Кроме того, на самом деле невозможно зафиксировать ошибку, брошенную от обработчика событий. Я зарегистрировался ошибка на Adobe Bug System.

Обновление 12.01.2010: Глобальная обработка ошибок теперь поддерживается в Flash 10.1 и AIR 2.0 (оба в бета-версии) и достигается путем подписки событие UNCAUGHT_ERROR LoaderInfo.uncaughtErrorEvents. Следующий код взят от пример кода на livedocs:

public class UncaughtErrorEventExample extends Sprite
{
    public function UncaughtErrorEventExample()
    {
        loaderInfo.uncaughtErrorEvents.addEventListener(
            UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);
    }

    private function uncaughtErrorHandler(event:UncaughtErrorEvent):void
    {
        if (event.error is Error)
        {
            var error:Error = event.error as Error;
            // do something with the error
        }
        else if (event.error is ErrorEvent)
        {
            var errorEvent:ErrorEvent = event.error as ErrorEvent;
            // do something with the error
        }
        else
        {
            // a non-Error, non-ErrorEvent type was thrown and uncaught
        }
    }

22
задан 29 September 2009 в 09:34
поделиться

4 ответа

Поскольку не существует официального API для создания сегмента разделяемой памяти, вам нужно прибегнуть к вспомогательной библиотеке / DDL и JNI, чтобы использовать разделяемую память, чтобы два процесса Java взаимодействовали друг с другом.

На практике это редко является проблемой, поскольку Java поддерживает потоки, поэтому вы можете запустить две «программы» в одной виртуальной машине Java. Они будут использовать одну и ту же кучу, поэтому связь будет мгновенной. Кроме того, вы не можете получать ошибки из-за проблем с сегментом общей памяти.

14
ответ дан 29 November 2019 в 03:37
поделиться

Стоит обратить внимание на использование отображаемых в память файлов , с использованием класса Java NIO FileChannel или аналогичного (см. Метод map ()). Мы очень успешно использовали это для связи (в нашем случае одностороннего) между процессом Java и собственным процессом C на одной машине.

Признаюсь, я не эксперт по файловым системам (к счастью, у нас есть такой в штате!), но производительность для нас невероятно высокая - по сути, вы обрабатываете раздел кеша страницы как файл и читаете + записываете в него напрямую, без накладных расходов на системные вызовы. Я не уверен в гарантиях и согласованности - в Java есть методы для принудительной записи изменений в файл, что подразумевает, что они (иногда? обычно? обычно? обычно? не уверены) записываются в фактический базовый файл (несколько? очень? чрезвычайно?) лениво, что означает, что некоторая часть времени это в основном просто сегмент разделяемой памяти.

Теоретически, насколько я понимаю, файлы с отображением в память МОГУТ фактически поддерживаться сегментом разделяемой памяти (я думаю, это всего лишь дескрипторы файлов), но я не знаю, как сделать это в Java без JNI.

8
ответ дан 29 November 2019 в 03:37
поделиться

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

Barrelfish - операционная система, которая демонстрирует, что IPC использует передачу сообщений на самом деле быстрее, чем разделяемая память, поскольку количество ядер увеличивается (на обычных архитектурах X86, а также на более экзотических материалах NUMA NUCA, которые, как вы могли догадаться, были нацелены).

Итак, ваше предположение о том, что разделяемая память работает быстро, требует проверки конкретный сценарий и на вашем целевом оборудовании. В наши дни это не совсем здравое предположение!

7
ответ дан 29 November 2019 в 03:37
поделиться

Я могу вспомнить пару аналогичных технологий:

  1. Несколько лет назад была технология под названием JavaSpaces , но она, похоже, никогда не прижилась, позор, если вы спросите меня.
  2. В настоящее время существуют технологии распределенного кеширования, такие как Coherence и Tangosol .

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

4
ответ дан 29 November 2019 в 03:37
поделиться
Другие вопросы по тегам:

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