void reloadScheme() {
		classDescMap.clear();
		customAllocatorMap = null;
		customAllocatorList = null;
		defaultAllocator = new DefaultAllocator(this);
		int descListOid = header.root[1 - currIndex].classDescList;

		ClassDescriptor metaclass = new ClassDescriptor(this,
				ClassDescriptor.class);
		ClassDescriptor metafield = new ClassDescriptor(this,
				ClassDescriptor.FieldDescriptor.class);

		classDescMap.put(ClassDescriptor.class, metaclass);
		classDescMap.put(ClassDescriptor.FieldDescriptor.class, metafield);

		if ((compatibilityMode & IBM_JAVA5_COMPATIBILITY_MODE) != 0
				&& getDatabaseFormatVersion() == 1) {
			ClassDescriptor.FieldDescriptor tmp = metaclass.allFields[2];
			metaclass.allFields[2] = metaclass.allFields[3];
			metaclass.allFields[3] = metaclass.allFields[4];
			metaclass.allFields[4] = tmp;
			tmp = metafield.allFields[2];
			metafield.allFields[2] = metafield.allFields[3];
			metafield.allFields[3] = tmp;
		}

		if (descListOid != 0) {
			ClassDescriptor desc;
			descList = findClassDescriptor(descListOid);

			for (desc = descList; desc != null; desc = desc.next) {
				desc.load();
			}

			for (desc = descList; desc != null; desc = desc.next) {
				if (findClassDescriptor(desc.cls) == desc) {
					desc.resolve();
				}

				if (desc.allocator != null) {
					if (customAllocatorMap == null) {
						customAllocatorMap = new HashMap();
						customAllocatorList = new ArrayList();
					}

					CustomAllocator allocator = desc.allocator;
					allocator.load();
					customAllocatorMap.put(desc.cls, allocator);
					customAllocatorList.add(allocator);
					reserveLocation(allocator.getSegmentBase(),
							allocator.getSegmentSize());
				}

				checkIfFinal(desc);
			}
		}
		else {
			descList = null;
		}
	}