키 유형이 BitSet이고 값이 List 인 여러 맵을 직렬화하려고합니다. 현재 ~ 430k 개 요소가있는 8 개의지도가 있습니다. 각 키는 4096 비트를 포함하는 비트 세트입니다.Java에서 여러 개의 거대한 맵을 연속 처리하기
제 문제는 제작 된 파일의 크기에 있으며 프로 시저 자체에는 없습니다. 나는이에게 표준적인 방법 할 때마다 :
SerializationUtils.ensurePathExists(filePath);
DeflaterOutputStream fstream = new DeflaterOutputStream(new FileOutputStream(filePath.toFile()));
ObjectOutputStream ostream = new ObjectOutputStream(fstream);
ostream.writeObject(object);
ostream.close();
또는 Kryo하고 UnsafeOutput를 사용하여 - 나는 항상 크기 ~ 2백20메가바이트의 파일 끝을.
한편 python에서 똑같은 데이터 구조를 직렬화하면 (pickle 모듈을 사용하면) ~ 100MB 크기의 파일이 생성됩니다.
BitSet 클래스가 최적의 직렬화 루틴 (최소 정보량 작성)을 선언하는 것을 보았습니다. 내 유일한 추측은 여분의 ~ 100MB는 JVM 메타 오버 헤드의 일부에서 나온다는 것입니다. 여분의 100MB를자를 방법이 있습니까?
@Eugene 그건 맞지 않아. 예를 들어 우리가 논의한 'serialVersionUId'값과 클래스 이름, 필드 이름과 타입 태그와 같은 메타 데이터가 생성됩니다. Object Serialization Speification의 Protocol 섹션을 참조하십시오. – EJP
@Eugene 분명히 파이썬이하는 것보다 * 많이 * 더 많습니다. 당신은 둘 모두에 대해 추측하는 것 같습니다. – EJP
@Eugene 음, 그러지 마세요. 너 혼란 스러울 뿐이야. 이 모든 것을 삭제하십시오. 간신히 하나의 정확한 단어를 게시했습니다. – EJP