String
- String 객체는 한번 생성되면 할당된 메모리 공간이 변하지 않는다.
- concat, + 와 같은 연산시 메모리의 내용이 변하는 것이 아니라, 새로운 String 객체를 만든 후 새 String 객체에 연결된 문자열을 저장하고 그 객체를 참조하게 된다.
- 기존 객체를 참조하는 변수가 없다면 가비지컬렉터의 대상이되어 수거된다.
- 연산이 많아지게되면 카비지컬랙터가 수거하기 전에 heap영역에 계속 쌓이게 되어 메모리가 부족해 속도가 느려진다.
StringBuffer StringBuilder
- String과 다르게 클래스는 한 번만 만들고 메모리의 값을 변경시켜서 문자열을 변경. 그러므로 문자열연산이 자주 있을 때 사용하면 좋음
StringBuffer
- 속도가 느리나 멀티 스레드 환경에서 Synchronize 키워드가 가능하므로 동기화가 가능
StringBuilder
- 속도가 빠르나 동기화를 지원하지 않기 때문에 멀티 스레드 환경에서 적합하지 않음
* 쓰레드 동기화 - 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하도록 하는 것
'개발자 기술 면접 준비 > 정리' 카테고리의 다른 글
== VS equals() (0) | 2021.06.08 |
---|---|
Array VS List (0) | 2021.06.08 |
런타임 VS 컴파일 (0) | 2021.06.08 |
메모리 구조 (0) | 2021.06.07 |
메모리란? (0) | 2021.06.07 |