Java Card虚拟机(JCVM)

Java Card虚拟机(JCVM)规范定义了Java程序设计语言的一个子集和一个用于智能卡的兼容Java的虚拟机,包括二进制数据表示和文件格式,以及JCVM指令集。

用于Java Card平台的虚拟机是两部分实现,一部分在卡外,一部分运行在卡本身。卡上的Java Card虚拟机解释字节码、管理类和对象等等。外部Java虚拟机部分是一个开发工具,一般称为Java Card转换工具,装载、检验和进一步地准备卡片小应用程序Java类,用于在卡上执行。转换工具输出的是一个Converted Applet(CAP)文件,这是一个包含一个Java程序包中所有类的文件。转换程序检验类是否遵循Java Card规范。

  JCVM只支持Java程序设计语言的一个有限的子集,然而它保留了许多熟悉的特性,包括对象、继承、程序包、动态对象创建、虚拟方法、接口和异常。JCVM规范放弃了对许多语言元素的支持,因为这些语言元素可能会用掉很多智能卡本来就很有限的内存:

   表格1、Java Card语言限制的摘要信息

语言特性动态类装载、安全管理(java.lang.securitymanager)、线程、对象克隆和某些方面的程序包访问控制不支持。
关键字不支持native、synchronized、transient、volatile、strictfp。
类型不支持char、double、float和long,也不支持多维数组。对int的支持是可选的。
类和接口不支持除了Object和Throwable以外的Java核心应用编程接口类和接口(java.io、java.lang、java.util),并且Object和Throwable的大部分方法不可用。
异常一些Exception和Error子类被省去,因为它们封装的异常和错误不可能在Java Card平台上出现。

  还有程序模型限制。例如一个装载库类不能再扩展到卡上;它隐含地成为final类型。

  为了符合存储限制,JCVM规范额外定义了许多程序属性的约束。表格4 JCVM资源限制总结。 注意这些约束中许多对于Java Card开发者来说是很明白的。

  表格2、Java Card虚拟机约束的摘要信息

程序包一个程序包可以引用128个其他的程序包
一个完全合乎要求的程序包名限于255字节以内。 注意字符大小取决于字符编码。
一个完全合乎要求的程序包名限于255字节以内。
一个类最多可以直接或者间接地实现15个接口。
一个接口最多可以继承于14个接口。
一个程序包如果包含小应用程序(一个小应用程序程序包),它最多可以有256个静态方法;如果没有小应用程序(库程序包),它最多只能有255个静态方法。
一个类最多可以实现128个public或者protected实例方法。

  在Java Card虚拟机中,象在J2SE虚拟机中一样,class文件是核心,但是JCVM规范定义了两种其他文件格式来进一步使平台独立,转换小应用程序(Converted Applet,CAP)和导出(Export)格式,这将后面的文章中讲述。

  虚拟机的生命周期

  JCVM的生命周期与卡片本身的生命周期一致:在卡片制造并测试之后至发行到持卡人手中的一段时间内它就开始了生命周期,当卡片丢失或者毁坏的时候它的生命周期也就结束了。 卡片没有电力的时候JCVM也不会停止,因为它的状态被保存在卡片的非易失性存储器中。启动JCVM初始化JCRE并且创建所有的JCRE框架对象,这些在JCVM的整个生命周期都是运转着的。JCVM启动之后,与卡片所有的相互作用原则上都是被卡片上的某个小应用程序控制。 当卡片没电的时候,保存在RAM中的任何数据都会丢失,但是保存在永久性存储器中的任何状态都被保留。当再次加电以后,虚拟机又再次激活,这时虚拟机和对象的状态被恢复,并且重新开始执行等待进一步地输入。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值