jvm for a simple math parser

I have built a simple math parser. The parser builds a AST and evaluates the AST. Now I'm trying to build a VM to evaluate the the tree. I got this class to start on, but I have no idea what to do. I did some research about JVMs in general, but I still don't get it.

public class VMCode {
    //code information
    //the number of valud opcodes
    int size=0;
    //the opcodes to be executed
    byte[] opcodes=new byte[128];
    //the items, constants number names etc.
    Object[] items=new Object[8];
    //static definition of opcodes
    public static final byte OP_END=0; //end of code, should not happen
    public static final byte OP_PUSH=1;//push an element on the stack. next two bytes in opcodes (big endian) define which element from items
    public static final byte OP_POP=2;//pop element off the stack
    public static final byte OP_ADD=3;//add top most two elements of the stack and push result on the stack
    public static final byte OP_SUB=4;//subtract top most element from second element of the stack and push result oin the stack
    public static final byte OP_MUL=5;//analog ADD
    public static final byte OP_DIV=6;//analog SUB
    public static final byte OP_JMP=7;//jump absolute next two bytes in opcodes (big endian)
    public static final byte OP_JMP_TRUE=8;//jump absolute next two bytes in opcodes (big endian) if top of stack is not 0
    public static final byte OP_JMP_FALSE=8;//jump absolute next two bytes in opcodes (big endian) if top of stack is 0
    public int addOpcode(byte op){
        //put in next pos in opcodes resize if needed, inc size
        return 0;//position in opcodes at beginning of function
    }
    public int addOpcode(byte op, Object item){
     if(!items.contains(item)) {
            items.add(item);
        }
        //add item to items if not already there
        //put in next pos in opcodes resize if needed, inc size
        //add position of items as next two bytes in opcode
        return 0;//position in opcodes at beginning of function
    }
    public int addOpcode(byte op, int pos){
     if(!items.contains(item)) {
            items.add(item);
        }
        //add item to items if not already there
        //add pos as next two bytes in opcode
        return 0;//position in opcodes at beginning of function
    }
}