Java卡对象管理

一、    概述
    Java卡VM是Java VM的一个子集。Java卡中用来表示、存储、操作的数据结构称之为对象。Java卡平台除了的基本数据类型外的数据以对象方式存在。本文介绍Java卡平台中的对象管理。


二、    对象种类
    除了类的对象实例,数组也是以对象的方式存在。例如以下常见的对象:
    boolean类型数组、byte类型数组、short类型数组、int类型数组、普通对象和对象数组。分别举例表示:
2.1 boolean类型数组对象
    reference = new boolean[10];
2.2 byte类型数组对象
    reference = new byte[10];
2.3 short类型数组对象
    reference = new short[10];
2.4 int类型数组对象
    reference = new int[10];
2.5 类的实例
    reference = new Object();
2.6 对象数组
    reference = new Object[10];


三、    Java卡对象管理
    对象由对象头和对象体组成。为了便于管理,将对象简单分为三类:简单对象类型、对象类型、对象数组类型(第二章节的2.1 至 2.4为简单数组对象类型。2.5为普通对象类型。2.6为对象数组类型)。
3.1 简单数组对象类型
    简单数组对象类型对象头由8字节的对象头和对象体(数据域)组成。
3.1.1 简单数组类型对象头

  • 1字节对象type:
#define Header_ArrayType_Boolean (u8)0x60 /* 011 - - - - - */
#define Header_ArrayType_Byte 	 (u8)0x80 /* 100 - - - - - */
#define Header_ArrayType_Short 	 (u8)0xA0 /* 101 - - - - - */
#define Header_ArrayType_Int 	 (u8)0xC0 /* 110 - - - - - */

 

  • 2字节对象上下文context:

    记录当前对象所属的上下文context。

  • 2字节class reference:

    对象所属的类索引。例如Byte类索引。

  • 1字节package ID:

    记录当前class reference所属的package ID。

  • 2字节元素个数num fields:

    元素个数。例如reference = new boolean[10],元素个数为10。

简单数组类型对象示意图:

                              图3.1.1 简单数组类型对象

3.1.2 简单数组类型对象体(数据域)
    对象体(数据域)存储对象数据。对象数据域的长度 = sizeof(对象类型) * 元素个数。例如reference = new short[10],元素个数为10,short类型元素占2字节空间大小,则对象体占20字节空间。


3.2 普通对象类型
    普通对象类型对象头由6字节的对象头和对象体(数据域)组成。
3.2.1 普通对象类型对象头

  • 1字节对象type:
#define Header_Simple_Object        (u8)0x20 /* 001 - - - - - */

 

  • 2字节对象上下文context:

    记录当前对象所属的上下文context。

  • 2字节class reference:

    对象所属的类索引。例如Byte类索引。

  • 1字节package ID:

    记录当前class reference所属的package ID。

普通对象示意图:
 
                                     图3.2.1 普通对象类型

3.2.2 普通对象类型对象体(数据域)
    例如存在示例类:

public class example {

    boolean[] booleanArrayReference;
    byte[] byteArrayReference;
    short[] shortArrayReference;
    int[] intArrayReference;
    Object objectReference;
    Object[] objectArrayReference;

    Public example(){

    }
}


    对象体(数据域)存储对象数据。对象数据域的长度 = (example类的数据大小) * 2(java卡中引用用两字节表示)。
例如reference = new example(),则对象体(数据域)占12字节空间。


3.3 对象数组类型
    对象数组类型对象头由11字节的对象头和对象体(数据域)组成。
3.3.1 对象数组类型对象头

  • 1字节对象type:
#define Header_ArrayType_Reference (u8)0xE0 /* 111 - - - - - */
  • 2字节对象上下文context:

    记录当前对象所属的上下文context。

  • 2字节class reference:

    对象所属的类引用。例如Byte类引用。

  • 1字节package ID:

    记录当前class reference所属的package ID。

  • 2字节元素个数num fields:

    元素个数。例如reference = new example [10],元素个数为10。

  • 2字节OA_ComponentClassClassRec:

    new的类的类索引。

  • 1字节OA_ComponentClassClassRecPkg:

    OA_ComponentClassClassRec所属的pkg ID


对象数组类型对象示意图:


                              图3.3.1对象数组类型对象

3.3.2对象数组类型对象体(数据域)
    例如前述示例类example。reference = new example[10],则对象体(数据域)占10字节空间。


END

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值