科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道实时JAVA简介2

实时JAVA简介2

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Greg Bollella ,是Sun公司的一个杰出的工程师,实时JAVA规范的作者之一,它说,实时意味着“能够可靠的可预测的推测和控制程序逻辑的时间行为的能力。”

来源:IT专家网 2008年6月4日

关键字: 简介 实时 java

  • 评论
  • 分享微博
  • 分享邮件
线程

  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有可能成为第一个可用的商业的实时语言。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章