>source

xml 파일에 7개의 목록을 작성해야 합니다. 각 목록의 크기는 1GB에서 5GB입니다.

예상되는 xml 파일은 다음과 같습니다-

<doc>    <items1>        <itemA>..</itemA>        ..
    </items1>    <items2>        <itemB>..</itemB>        ..
    </items2>    <items3>        <itemC>..</itemC>        ..
    </items3>    .
    .
    .
    <items7>        <itemG>..</itemG>        ..
    </items7></doc>

자바 객체는 다음과 같습니다.

List<ItemA> items1= new List<>(); //1GB-5GB
List<ItemB> items2= new List<>(); //1GB-5GB
List<ItemC> items3= new List<>(); //1GB-5GB
List<ItemD> items4= new List<>(); //1GB-5GB
List<ItemE> items5= new List<>(); //1GB-5GB
List<ItemF> items6= new List<>(); //1GB-5GB
List<ItemG> items7= new List<>(); //1GB-5GB

모든 목록을 단일 객체(카탈로그)로 래핑하여 Java 객체로 & 한 번에 마샬링하면 많은 메모리가 소모되며 이 목록 크기가 증가할 때마다 인프라를 확장해야 합니다. 아래 code는

JAXBContext.newInstance("ta").createMarshaller().marshal(new ObjectFactory().createCatalogue(catalogue), new FileOutputStream(fileName));

여기 카탈로그는 7가지 목록이 모두 포함된 Java 개체입니다.

청크로 데이터를 작성하여 메모리 소비를 줄일 수 있는 현명한 방법이 있습니까? 나는 탐구했다 스택이를 위해 데이터 목록을 쓰는 방법을 찾을 수 없습니다.

자바에서 인프라를 통해 RAM을 확장하지 않고 xml에 효율적으로 최대 20GB를 쓸 수 있는 방법이 있습니까?

우리는 각 목록을 개별적으로 작성하기를 원합니다. 또한 이전에 작성된 파일은 다음 목록을 작성하는 동안 힙에 로드되지 않아야 합니다.

기본적으로 이 데이터를 XML로 쓰기 위해 청크로 분할하는 효율적인 방법을 원하십니까?

InSaNiTy2021-10-20 04:36:10

최근 삭제 된 질문에서와 같이 다시 묻습니다. 누수인지 어떻게 아나요? 메모리 부족보다? 그것은 같은 것이 아닙니다. 그리고 "xml로 마샬링될 때까지 모든 Java 객체가 메모리에 있다는 것은 매우 분명합니다"는 대답이 아니었으며 지금도 아닙니다.

user2074212021-10-20 04:36:10

@InSaNiTy 나는 '어쩌면'에 관심이 없습니다. 명확히하는 것은 OP에 달려 있습니다. 그가 의미하는 바를 추측하는 것은 우리에게 달려 있지 않습니다.

user2074212021-10-20 04:36:10
  • 이전 Spark는 S3의 _1 및 _2 하위 폴더로 인해 하이브 테이블을 읽을 수 없습니다.
  • 다음 python : Numba: str을 int로 변환하는 방법?