Ciao a tutti!
La mia situazione è questa:

- db oracle + java;
- necessità di produrre un file xml che potrebbe raggiungere dimensioni enormi

Effettuo query su db oracle che, in alcuni casi, potrebbe restituirmi migliaia (a volte milioni) di record e devo creare un file xml dove ogni record rappresenta un blocco XML.
Sto utilizzando la libreria JAXB 2 con classi annotate. Effettuo il marshall puntuale del singolo resultset utilizzando un outputstream (di seguito il codice)

------------------------------------------------------------------------------------------
ResultSet rs = ps.executeQuery();

JAXBContext jaxbContext = JAXBContext.newInstance(Prova.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_O UTPUT, true);
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
OutputStream os = new FileOutputStream("E:\\prova.xml");
os.write("<?xml version='1.0' encoding='UTF-8' standalone='yes'?><Prova>".getBytes());
do{
Prova c = new Prova();
c.setA(rs.getString("a"));
c.setB(rs.getString("b"));
c.setC(rs.getString("c")");
c.setD(rs.getString("d"));
c.setE(rs.getString("e"));
c.setF(rs.getString("f"));
c.setG(rs.getString("g"));
c.setH(rs.getString("h"));
c.setI(rs.getString("i"));
c.setL(rs.getString("l"));
marshaller.marshal(c, os);
os.flush();
c=null;
System.gc();
i=i+1;
}while(rs.next());
os.write("</prova>".getBytes());
------------------------------------------------------------------------------------------

Ora, con questo procedimento ho notato che l'utilizzo delle risorse è minimo in quanto ogni resultset letto lo scrivo su file e nulla rimane in memoria.
Il problema è che l'intera esecuzione della procedura richiede troppo tempo.
Cosa mi suggerite?

Grazie a tutti!