Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

끄적끄적

[java]String 생성과 메모리 본문

CS 공부

[java]String 생성과 메모리

yenacathy97 2022. 3. 17. 19:41

String의 생성 방식

1. new 연산자를 이용한 방식

  • String s = new String("str1");
  • Heap 영역에 생성

2. 리터럴을 이용한 방식

  • String literal = "str2";
  • String 상수풀에 생성.
  • String을 리터럴로 선언하게 되면 내부적으로 String의intern()메서드 호출
  • String.intern()
    • 주어진 문자열이 String 상수풀에 있는지 검색하고 있으면 주소값 반환, 없으면 새로 추가하고 새로운 주소값 반환

constant pool의 위치 변경

- java 6: perm 영역

- java 8: Perm 영역은 사라지고 Heap 영역 (perm은 고정된 사이즈고 Runtime에 사이즈가 확장되지 않는다. OutofMemoryException문제때문에 변경) -> GC의 대상

java 9 Compact String(압축 문자열)

- String이 JVM의 힙 공간의 많은 부분을 찿지 한다.

- 압축 문자열로 메모리 소비를 최적화 하기 위해 설계되었다.

- 라틴으로 표시 가능한 문자열을 byte로 변환 (coder의 역할)

- 기존 char [] -> byte[] 

 

== 과 equals 비교

- equals는  최상위 클래스 Object에 포함되어 있어 모든 하위 클래스에서 재정의해서 사용할 수 있다.

- String 클래스에서 equals()는 문자열의 내용이 같으면 true를 리턴하도록 재정의 되어있다.

- == 연산자는 int, boolean 과 같은 프리미티브 타입에 대해서는 상수풀에서 값에 대한 주소를 비교한다. reference 타입에 대해서는 주소값을 비교한다. 

 

String 클래스가 final인 이유

- 상수풀에서 객체를 공유해 생성되는 String 객체를 줄여 메모리를 절약.

'CS 공부' 카테고리의 다른 글

thread와 런에이블  (0) 2022.03.20
[java] static  (0) 2022.03.18
[java] 배열 리스트의 동적 동작  (0) 2022.03.17
[java]final 키워드  (0) 2022.03.17
[java]JVM의 구조  (0) 2022.03.17
Comments