我正在尝试使用下面的代码从文件中下载和读取数据,无论如何都会OOM,正是在读取文件时,s3文件的大小为22MB,我通过浏览器下载它是650 MB,但是当我通过视觉监控时VM,解压缩和读取时消耗的内存超过2GB。请任何人指导,以便我找到内存使用率高的原因。谢谢。
public static String unzip(InputStream in) throws IOException, CompressorException, ArchiveException {
System.out.println("Unzipping.............");
GZIPInputStream gzis = null;
try {
gzis = new GZIPInputStream(in);
InputStreamReader reader = new InputStreamReader(gzis);
BufferedReader br = new BufferedReader(reader);
double mb = 0;
String readed;
int i=0;
while ((readed = br.readLine()) != null) {
mb = mb+readed.getBytes().length / (1024*1024);
i++;
if(i%100==0) {System.out.println(mb);}
}
} catch (IOException e) {
e.printStackTrace();
LOG.error("Invoked AWSUtils getS3Content : json ", e);
} finally {
closeStreams(gzis, in);
}
线程“主”java.lang.OutOfMemoryError 中的异常:java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124) 处 java.util.Arrays.copyOf(Arrays.java:3332) 处的 Java 堆空间。在 java.io.BufferedReader.readLine(BufferedReader.java:370) 在 java.io.BufferedReader.readLine(BufferedReader) 的 java.lang.StringBuffer.append(StringBuffer.java:367) 的 AbstractStringBuilder.append(AbstractStringBuilder.java:596) .java:389) 在 com.kpmg.rrf.utils.AWSUtils.unzip(AWSUtils.java:917)