-
Notifications
You must be signed in to change notification settings - Fork 57
基本数据结构 对象 内存
zht edited this page Jan 2, 2020
·
1 revision
- 逻辑
- boolean出现时用JByte表示
- 字符
- JChar
public class JChar extends JType {
public char value;
}
- 数值
- 整型
- JByte
- JShort
- JInt
- JLong
- 浮点
- JDouble
- JFloat
- 整型
- 对象
- JObject
public class JObject extends JType{
/* 实例对象所属的类的引用 */
public JavaClass javaClass;
/* 实例对象在heap的偏移量 */
public Integer offset;
}
-
Jtype
不含任何字段和方法,上面 8 种数据类型都继承Jtype -
Slot
public class Slot {
/*value用于填充基本数据类型,double、long需要两个slot填充,对应jType为空 */
public int value;
/* jType用于表示对象 */
public JType jType;
}
- JavaHeap : 表示堆内存,对象和数组都在这里
public class JavaHeap {
/*保存 <offset,对象> */
Map<Integer, ObjectFields> objectContainer
/*保存<offset, 数组>*/
Map<Integer, ArrayFields> arrayContainer
}
- ObjectFields:用来保存一个对象
public class ObjectFields extends Vars {
/*表示基本数据类型时,value用于填充,jType为空,表示时double、long占用2个slot
*表示对象时,value为空,jType用于表示对象 */
public Slot[] slots;
}
- ArrayFields:用来保存一个数组
public class ArrayFields {
/*对象数组,基本数据类型和对象都继承JType*/
public JType[] primitiveTypes;
public int arraySize;
}
- 例如堆中存在3个对象,5个数组:
objectContainer(基于Slot):
0->[14,1,3] /*表示14和2^32+3=4294967299,long占用2个slot。int型和long型组成的对象*/
1->[22,1,88] /*表示3个整型int组成的对象*/
2->[jObject_1,15] /*表示一个对象和整型组成的对象*/
arrayContainer(基于JChar等基本数据类型和JObject):
/*jObject有offset指向对象*/
0->[14,6,7,79,...]
1->[3.14,1.16,6.3]
2->[]
3->['a','b','c']
4->[jObject_1,jObject_2,jObject_3]