From 613ec4e1ae50645a8f48b0a14f1d36e6c255dfd5 Mon Sep 17 00:00:00 2001 From: pyzhou Date: Tue, 15 Nov 2022 20:15:49 +0800 Subject: [PATCH] fix(TDI-48676):ResumeUtil OOM * fix(TDI-48676):ResumeUtil OOM * replace duplicate variable --- .../java/routines/system/ResumeUtil.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/main/plugins/org.talend.librariesmanager/resources/java/routines/system/ResumeUtil.java b/main/plugins/org.talend.librariesmanager/resources/java/routines/system/ResumeUtil.java index 1864f0a780..0b7ca56106 100644 --- a/main/plugins/org.talend.librariesmanager/resources/java/routines/system/ResumeUtil.java +++ b/main/plugins/org.talend.librariesmanager/resources/java/routines/system/ResumeUtil.java @@ -520,9 +520,13 @@ public class ResumeUtil { private String lineSeparator = System.getProperty("line.separator"); - private int capibility = 2 << 22; //8M + private final int capibility = 2 << 22; //8M + + private final int FLUSH_FACTOR = 6 *1024 *1024; //6M + + private final int SUBSTRING_SIZE = 2 << 20; //2M + - private int FLUSH_FACTOR = 6 *1024 *1024; //6M public SimpleCsvWriter(FileChannel channel) { @@ -553,6 +557,16 @@ public class ResumeUtil { content = replace(content, "" + TextQualifier, "" + TextQualifier + TextQualifier); } + if (content.length() > SUBSTRING_SIZE) { //2M + int index = 0; + for (; content.length() - index > SUBSTRING_SIZE; index += SUBSTRING_SIZE) { + flush(true); + final String substring = content.substring(index, index + SUBSTRING_SIZE); + buf.put(substring.getBytes()); + } + content = content.substring(index); + } + byte[] contentByte = content.getBytes(); if(contentByte.length > capibility - buf.position()) { flush(true);