-
StringBuilder의 초기화 방법Java/자바를 더 깊게 2022. 3. 12. 21:13728x90
코딩 테스트 문제를 푸는 도중 입력을 받을때 보통 아무생각 없이 아래의 방법을 사용했습니다.
String str = br.readLine();
그러던 중 String은 불변 객체여서 계속 String Intern Pool에 계속 쌓여 메모리가 낭비될 것 같다는 생각이 들었습니다.
StringBuilder sb = new StringBuilder(); for(int y=0; y<N; y++) { sb.append(br.readLine()); for(int x=0; x<M; x++) { } sb.setLength(0); }
따라서 StringBuilder를 사용하면 좋지 않을까 라는 생각이 들었고 이렇게 활용해 보았습니다.
그러던 중 StringBuilder를 초기화? delete? 하는 방법이 궁금하여 찾아보았고 어떤 방법이 제일 좋을지 탐구해보고자 합니다.
- StringBuilder를 매번 새로 생성
- StringBuilder를 1번만 생성하고 sb.delete()로 초기화 후 재사용
- StringBuilder를 1번만 생성하고 sb.setLength()로 초기화 후 재사용
public class Test { static String a; public static void main( String[] args ) throws Exception { // 1. 매번 새로 할당 long time = System.currentTimeMillis(); for( int i = 0; i < 10000000; i++ ) { StringBuilder sb = new StringBuilder(); sb.append( "someString1" ); sb.append( "someString2" ); sb.append( "someString3" ); sb.append( "someString4" ); sb.append( "someString5" ); a = sb.toString(); } System.out.println("매번 새로 할당 : " + (System.currentTimeMillis()-time)); // 2. delete()로 초기화 time = System.currentTimeMillis(); StringBuilder sb2 = new StringBuilder(); for( int i = 0; i < 10000000; i++ ) { sb2.delete( 0, sb2.length() ); sb2.append( "someString" ); sb2.append( "someString2" ); sb2.append( "someString3" ); sb2.append( "someString4" ); sb2.append( "someString5" ); a = sb2.toString(); } System.out.println("sb.delete()로 초기화 : " + (System.currentTimeMillis()-time)); // 3. setLength(0)으로 초기화 time = System.currentTimeMillis(); StringBuilder sb3 = new StringBuilder(); for( int i = 0; i < 10000000; i++ ) { sb3.setLength(0); sb3.append( "someString1" ); sb3.append( "someString2" ); sb3.append( "someString3" ); sb3.append( "someString4" ); sb3.append( "someString5" ); a = sb3.toString(); } System.out.println("sb.setLength()로 초기화 : " + (System.currentTimeMillis()-time)); } }
결과
매번 새로 할당 : 727
sb.delete()로 초기화 : 371
sb.setLength()로 초기화 : 359https://jaehoney.tistory.com/78
'Java > 자바를 더 깊게' 카테고리의 다른 글
JVM Warm-up 이란 (0) 2023.09.09 자바 Inner static class 로딩 시점 (0) 2022.04.10 [Java] Java Multi-Thread Programming의 모든것을 알아보자 (0) 2022.03.02 [Java] Java Collection Framework의 모든것을 알아보자 (0) 2022.02.22 [Java] JVM이란? JVM(Java Virtual Machine)의 모든것을 알아보자 (2) 2022.02.17