Skip to content

基本数据结构 对象 内存

zht edited this page Jan 2, 2020 · 1 revision

1. 基本数据类型

  • 逻辑
    • 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;
}

2. 内存相关结构

  • 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]
Clone this wiki locally