private void prepare() {
		if (prepared) {
			return;
		}
		
		if (elementConverter == null) {
			if (classLoader == null && elementClass != null) {
				classLoader = elementClass.getClassLoader();
			}
			
			elementConverter = Converters.bestConverter(elementClass, classLoader);
		}
		
		if (compressElement) {
			elementConverter = new ZipCompressionConverter<E>(elementConverter);
		}
		
		if (memoryManager == null) {
			if (blockSize == null) {
				int serializedLength = elementConverter.serializedLength();
				blockSize = serializedLength > 0 ? serializedLength : MemoryMappedFileManager.NO_BLOCK_SIZE;
			}
			memoryManager = new MemoryMappedFileManager(bufferSize, blockSize);
		}
		
		if (capacity == 0) {
			capacity = 8;
		}
		
		prepared = true;
	}