From b5b048e55c167406653b95b1469ed10bc0f10688 Mon Sep 17 00:00:00 2001 From: hylee Date: Mon, 29 Jul 2024 16:23:43 +0900 Subject: [PATCH] =?UTF-8?q?java.lang.OutOfMemoryError:=20Java=20heap=20spa?= =?UTF-8?q?ce=20=EC=97=90=EB=9F=AC=EB=A1=9C=EC=9D=B8=ED=95=9C=20=EB=B0=B0?= =?UTF-8?q?=EC=B9=98=EB=A1=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../addr/service/impl/AddrServiceImpl.java | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/main/java/itn/let/mjo/addr/service/impl/AddrServiceImpl.java b/src/main/java/itn/let/mjo/addr/service/impl/AddrServiceImpl.java index b270cff0..c528ee35 100644 --- a/src/main/java/itn/let/mjo/addr/service/impl/AddrServiceImpl.java +++ b/src/main/java/itn/let/mjo/addr/service/impl/AddrServiceImpl.java @@ -59,6 +59,7 @@ public class AddrServiceImpl extends EgovAbstractServiceImpl implements AddrSer private static final String PHONE_REGEX = "^(01[016789]-?\\d{3,4}-?\\d{4})$"; private static final Pattern PHONE_PATTERN = Pattern.compile(PHONE_REGEX); private static final Charset EUC_KR = Charset.forName("EUC-KR"); + private static final int BATCH_SIZE = 10000; // private static final int MAX_ADDR_CNT = 500000; //임시 500만개 private static final int MAX_ADDR_CNT = 5000000; @@ -471,7 +472,9 @@ public class AddrServiceImpl extends EgovAbstractServiceImpl implements AddrSer if(addrListVO.size() > 0) { // 등록 - addrDAO.insertAddrList(addrListVO); + // Batch insert + batchInsertAddrList(addrListVO); +// addrDAO.insertAddrList(addrListVO); } @@ -497,7 +500,29 @@ public class AddrServiceImpl extends EgovAbstractServiceImpl implements AddrSer , LocalDateTime.now()); } - public static boolean isValidPhoneNumber(String phoneNo) { + private void batchInsertAddrList(List addrListVO) throws Exception { + + int totalSize = addrListVO.size(); + int batchCount = (totalSize + BATCH_SIZE - 1) / BATCH_SIZE; + long startTime, endTime; + double executionTime; + + for (int i = 0; i < batchCount; i++) { + int startIndex = i * BATCH_SIZE; + int endIndex = Math.min(startIndex + BATCH_SIZE, totalSize); + List batchList = addrListVO.subList(startIndex, endIndex); + + startTime = System.currentTimeMillis(); + addrDAO.insertAddrList(batchList); + endTime = System.currentTimeMillis(); + + executionTime = (endTime - startTime) / 1000.0; + System.out.println("Batch " + (i + 1) + "/" + batchCount + " Execution time: " + executionTime + " seconds"); + } + + } + + public static boolean isValidPhoneNumber(String phoneNo) { if (phoneNo == null || phoneNo.isEmpty()) { return false; }