public void iterateFields(OopVisitor visitor, boolean doVMFields) {
   super.iterateFields(visitor, doVMFields);
   TypeArrayKlass klass = (TypeArrayKlass) getKlass();
   int length = (int) getLength();
   int type = (int) klass.getElementType();
   for (int index = 0; index < length; index++) {
     FieldIdentifier id = new IndexableFieldIdentifier(index);
     switch (type) {
       case TypeArrayKlass.T_BOOLEAN:
         {
           long offset =
               baseOffsetInBytes(BasicType.T_BOOLEAN) + index * getHeap().getBooleanSize();
           visitor.doBoolean(new BooleanField(id, offset, false), false);
           break;
         }
       case TypeArrayKlass.T_CHAR:
         {
           long offset = baseOffsetInBytes(BasicType.T_CHAR) + index * getHeap().getCharSize();
           visitor.doChar(new CharField(id, offset, false), false);
           break;
         }
       case TypeArrayKlass.T_FLOAT:
         {
           long offset = baseOffsetInBytes(BasicType.T_FLOAT) + index * getHeap().getFloatSize();
           visitor.doFloat(new FloatField(id, offset, false), false);
           break;
         }
       case TypeArrayKlass.T_DOUBLE:
         {
           long offset = baseOffsetInBytes(BasicType.T_DOUBLE) + index * getHeap().getDoubleSize();
           visitor.doDouble(new DoubleField(id, offset, false), false);
           break;
         }
       case TypeArrayKlass.T_BYTE:
         {
           long offset = baseOffsetInBytes(BasicType.T_BYTE) + index * getHeap().getByteSize();
           visitor.doByte(new ByteField(id, offset, false), false);
           break;
         }
       case TypeArrayKlass.T_SHORT:
         {
           long offset = baseOffsetInBytes(BasicType.T_SHORT) + index * getHeap().getShortSize();
           visitor.doShort(new ShortField(id, offset, false), false);
           break;
         }
       case TypeArrayKlass.T_INT:
         {
           long offset = baseOffsetInBytes(BasicType.T_INT) + index * getHeap().getIntSize();
           visitor.doInt(new IntField(id, offset, false), false);
           break;
         }
       case TypeArrayKlass.T_LONG:
         {
           long offset = baseOffsetInBytes(BasicType.T_LONG) + index * getHeap().getLongSize();
           visitor.doLong(new LongField(id, offset, false), false);
           break;
         }
     }
   }
 }
 public void printValueOn(PrintStream tty) {
   TypeArrayKlass klass = (TypeArrayKlass) getKlass();
   tty.print(klass.getTypeName());
 }