Sun's 32-bit JVMs can hold somewhat less than 2GB worth of data in memory. Further, because characters are held as 16-bit Unicode values, a disk file's size might actually double when read in as a Java
String. So serialization issues aside, you may have problems just assembling this data structure in the first place, unless you have 64-bit hardware.
Consider putting the data into a relational database (making sure, of course, that
it can handle that volume of data) and manipulating it from Java without loading it all in.