package jvm.engine;
import jvm.classfile.constant.item.Constant;
import jvm.classfile.constant.item.impl.ClassInfo;
import jvm.classfile.constant.item.impl.FloatInfo;
import jvm.classfile.constant.item.impl.IntegerInfo;
import jvm.classfile.constant.item.impl.StringInfo;
public class Heap {
/**
* 没有实现垃圾回收, 所以对于下面新创建的对象, 并没有记录到一个数据结构当中
*/
private static Heap instance = new Heap();
private Heap() {
}
public static Heap getInstance() {
return instance;
}
public JavaObject createObject(Constant constant) {
if (constant instanceof IntegerInfo) {
int value = ((IntegerInfo) constant).getValue();
return Heap.getInstance().newInt(value);
} else if (constant instanceof FloatInfo) {
float value = ((FloatInfo) constant).getValue();
return Heap.getInstance().newFloat(value);
} else if (constant instanceof StringInfo) {
String value = ((StringInfo) constant).getValue();
return Heap.getInstance().newString(value);
} else if (constant instanceof ClassInfo) {
String className = ((ClassInfo) constant).getClassName();
return Heap.getInstance().newClassReference(className);
}
return null;
}
public JavaObject newClassReference(String clzName) {
JavaObject jo = new JavaObject(JavaObject.OBJECT);
jo.setClassName(clzName);
return jo;
}
public JavaObject newString(String value) {
JavaObject jo = new JavaObject(JavaObject.STRING);
jo.setStringValue(value);
return jo;
}
public JavaObject newFloat(float value) {
JavaObject jo = new JavaObject(JavaObject.FLOAT);
jo.setFloatValue(value);
return jo;
}
public JavaObject newInt(int value) {
JavaObject jo = new JavaObject(JavaObject.INT);
jo.setIntValue(value);
return jo;
}
}