Какие недостатки стандартного ЯП Java модифицированы Real-Time Java Specification(RTJS)?

Первое важное нововведение RTSJ это предоставление новых классов потоков реального времени: RealtimeThread и NoHeapRealtimeThread, для которых должен использоваться алгоритм планировки, при котором гарантируется, что потоку с наибольшим приоритетом всегда будет предоставлено процессорное время (fixed priority pre-emptive scheduling), при этом минимальный приоритет для потоков реального времени выше максимального приоритета обычных потоков Java. Это довольно серьёзное отличие от обычной реализации Java, о котором обязательно следует помнить при использовании этих классов.

Другая важная часть RTSJ—это введение новых областей памяти, отличных от обычной кучи (heap), используемой в Java. Работа с этими областями памяти осуществляется с помощью класса ScopedMemory. Объекты ScopedMemory должны создаваться непосредственно программистом.

Применение потоков NoHeapRealtimeThread и новых областей памяти помогает избавиться от проблем, связанных со сборщиком мусора. Но у этого решения есть ряд недостатков, связанных с особенностями использования ScopedMemory. Это область памяти с ограниченным временем жизни, при этом время жизни памяти определяется синтаксическими границами метода ScopedMemory.enter. При завершении данного метода все объекты, созданные в этой области памяти, могут быть уничтожены. Поэтому из соображений безопасности спецификация RTSJ запрещает использовать объекты, размещённые в ScopedMemory, за пределами метода ScopedMemory.enter. В противном случае поток, получивший ссылку на объект из ScopedMemory и не выполняющий при этом метод ScopedMemory.enter, не может гарантировать, что этот объект не будет уничтожен в произвольный момент, а использование объекта, уничтоженного в неподходящее время, может привести к краху приложения.

Для гарантии выполнения этого ограничения RTSJ вводит ряд правил, которые должны выполняться при работе со ссылками. Так, объекты, созданные в куче и ImmortalMemory, не могут ссылаться на объекты, созданные в ScopedMemory. То есть объекты с большим временем жизни не могут ссылаться на объекты с потенциально меньшим временем. Нарушение этого правила во время выполнения приведёт к генерации исключения javax.realtime.IllegalAssignmentError.

Виртуальная машина Sun Java™ Real-Time System 2.0 предоставляет два сборщика мусора:

последовательный сборщик мусора (SerialGC): при его использовании отсутствие пауз, связанных с очисткой памяти, гарантируется только для потоков NoHeapRealtimeThread

сборщик мусора реального времени (RTGC), основанный на приоритетах: не требует использования новых областей памяти и потоков NoHeapRealtimeThread для обеспечения предсказуемого поведения.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: