详细介绍什么是实时JAVA

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

它是如何工作的 让我们先简短的了解程序员可以多么轻易的利用这些实时JAVA的新特性的。我们将只考虑新的API中的最有趣的部分:线程和内存。对于其他问题,请参阅real-time JAVA specification 文档(PDF). 规范的制订者们一个主要的目标就是保证RTS编程的简单性,尽管实时问题是很复杂的;这就意味着操作系统必须尽可能多的完成一些工作,使得程序员只需要完成实时程序设计这个具有挑战性的工作。线程RealtimeThread 类继承了java.lang.Thread类。这个类有多个构造函数,开发者能够调试线程的行为。

public RealtimeThread()public RealtimeThread(SchedulingParameters scheduling)public RealtimeThread(SchedulingParameters scheduling, ReleaseParameters release)

提供给RealtimeThread(还有MemoryParameters )的构造函数的两个参数ReleaseParameters 和SchedulingParameters使得线程的时间和处理器需求可以通知给系统。RealtimeThread实现了Schedulable接口。关键就在于Schedulable对象可以被放置在ImmortalMemory, HeapMemory, ScopedPhysicalMemory, and PhysicalImmortal等类的实例所表示的内存中。 NoHeapRealtimeThread 是RealtimeThread的一个特有的形式。因为NoHeapRealtimeThread实例可以立刻抢占任何已实现的垃圾收集器,它的run()函数中的逻辑不允许分配或引用任何在堆中分配的对象,或者是对在堆中的对象进行操作。例如,如果A和B是immortal memory中的两个对象。B.p是堆中的一个对象的引用 , A.p和B.p的类型是一致的,那么NoHeapRealtimeThread是不允许执行与下面类似的代码的:

A.p = B.p;B.p = null;

考虑到这些限制,NoHeapRealtimeThread对象必须被放置在一个内存区域中以防止线程可能unexceptionally的控制实例的变量。这就是为什么NoHeapRealtimeThread的构造函数要求ScopedMemory 或 ImmortalMemory的引用了。当线程启动后,所有的操作都处于分配的内存区域中。因此,new操作产生的所有的内存分配都处于这个区域中。内存管理 我们已经发现了一些内存相关的类了。更确切的说,MemoryArea 是所有处理可分配的内存区域的类的抽象的基类,这些内存区域包括ImmortalMemory,物理内存和ScopedMemory。HeapMemory类是一个单体(singleton)对象,它允许其他内存区域中的代码在JAVA堆中分配内存。这个方法返回一个对HeapMemory单体实例所代表的JAVA堆的指针。

public static HeapMemory instance() 

更有意思的是ImmortalMemory类,这是一个所有线程都共享的内存资源。在ImmortalMemory中分配的对象一直会存活到程序结束的时候,并且绝不会被垃圾收集掉,尽管一些垃圾收集算法可能会要求扫描Immortal Memory ScopedMemory区域连接到特定内存区域,这是一个处理那些指向具有有限生命周期的内存空间的类 RawMemoryAccess实例把一段范围的物理内存当作一个固定顺序的字节。Accessor方法的完整实现将允许通过偏移量来访问物理地址的内容,把它解析成byte,short,int或long数据或者这些类型的数组。如果你需要访问float或是double类型的值,就必须使用RawMemoryFloatAccess类。偏移量是代表high-order 还是 low-order字节取决于RealtimeSystem类中的静态布尔变量BYTE_ORDER的值。一个raw的内存空间当然不能够存储JAVA对象的引用,因为这样一种操作是不安全的。RawMemoryAccess类用下面的构造函数来初始化:

public RawMemoryAccess(JAVA.lang.Object type,long base, long size) throws SecurityException, OffsetOutOfBoundsException,SizeOutOfBoundsException,UnsupportedPhysicalMemoryException,MemoryTypeConflictException,MemoryInUseException

值得注意的是这个构造函数定义了相当多的可能抛出的异常。Type参数是代表所需内存类型的对象所需要的。它被用于定义初始地址以及控制映射。结论 实时JAVA提供了一个更可靠和可预测的调度机制,内存处理方法,各种不同的内存模型,一个可预测性更好的线程和同步模型,异步时间处理,以及high-resolution时间处理。这使得可预测的运行成为传统的计算性能测试中所有决定中的第一选择。这就是实时的真谛。 这篇文章只是一个新的概念和Sun的JAVA实现的的综述。如果你对具体的实现细节很感兴趣,你可以在下面的资源中找到很多有用的资料。实时JAVA为JAVA应用程序提供了实时能力,这也使得JAVA有可能成为第一个可用的商业的实时语言。资源 * Real-Time JAVA Platform Programming, by Peter C. Dibble* Real-Time Specification for JAVA (PDF)* Sun J2SE Real-Time EditionPeter Mikhalenko是Deutsche Bank的一个商务顾问。

[1][2]

向上攀爬的。

详细介绍什么是实时JAVA

相关文章:

你感兴趣的文章:

标签云: