一、 概述
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