Нет никакого пути, который будет уведомлен относительно неперехваченных исключений в 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
}
}
Поскольку не существует официального API для создания сегмента разделяемой памяти, вам нужно прибегнуть к вспомогательной библиотеке / DDL и JNI, чтобы использовать разделяемую память, чтобы два процесса Java взаимодействовали друг с другом.
На практике это редко является проблемой, поскольку Java поддерживает потоки, поэтому вы можете запустить две «программы» в одной виртуальной машине Java. Они будут использовать одну и ту же кучу, поэтому связь будет мгновенной. Кроме того, вы не можете получать ошибки из-за проблем с сегментом общей памяти.
Стоит обратить внимание на использование отображаемых в память файлов , с использованием класса Java NIO FileChannel или аналогичного (см. Метод map ()). Мы очень успешно использовали это для связи (в нашем случае одностороннего) между процессом Java и собственным процессом C на одной машине.
Признаюсь, я не эксперт по файловым системам (к счастью, у нас есть такой в штате!), но производительность для нас невероятно высокая - по сути, вы обрабатываете раздел кеша страницы как файл и читаете + записываете в него напрямую, без накладных расходов на системные вызовы. Я не уверен в гарантиях и согласованности - в Java есть методы для принудительной записи изменений в файл, что подразумевает, что они (иногда? обычно? обычно? обычно? не уверены) записываются в фактический базовый файл (несколько? очень? чрезвычайно?) лениво, что означает, что некоторая часть времени это в основном просто сегмент разделяемой памяти.
Теоретически, насколько я понимаю, файлы с отображением в память МОГУТ фактически поддерживаться сегментом разделяемой памяти (я думаю, это всего лишь дескрипторы файлов), но я не знаю, как сделать это в Java без JNI.
Общая память иногда работает быстро. Иногда это не так - это вредит кешам ЦП, и синхронизация часто является проблемой (и если она полагается на мьютексы и тому подобное, может быть серьезным ухудшением производительности).
Barrelfish - операционная система, которая демонстрирует, что IPC использует передачу сообщений на самом деле быстрее, чем разделяемая память, поскольку количество ядер увеличивается (на обычных архитектурах X86, а также на более экзотических материалах NUMA NUCA, которые, как вы могли догадаться, были нацелены).
Итак, ваше предположение о том, что разделяемая память работает быстро, требует проверки конкретный сценарий и на вашем целевом оборудовании. В наши дни это не совсем здравое предположение!
Я могу вспомнить пару аналогичных технологий:
К сожалению, ни одна из них не будет иметь правильной скорости разделяемой памяти, но они решают вопросы одновременного доступа и т. д.