- 강의
- 41강(JVM 메모리 런타임) ~ 44강(여러 기본 ㅡ클래스)
JVM 메모리 런타임
- java 기본형
- 논리형 : boolean
- 문자형 : char
- 정수형 : byte, short, int, long
- 실수형 : float, double
- java 참고형
- java 기본형을 제외한 모든 것
- 종류 : array, 클래스, 인터페이스, enum 등...
- 생성
- new를 이용해서 생성 → JVM Heap 메모리 점유
- 객체 생성
- 기본형 : 값 자체 지칭
- 참조형 : 저장된 공간 주소 지칭(이때 null은 아무것도 지칭하지 않았다는 의미)
- String 객체 생성
- String str1 = "Student"; → String Pool(상수 풀)에 저장됨, 같은 리터럴은 같은 주소를 가짐
- String str2 = new String("Student"); → Heap에 저장됨, 같은 리터럴이어도 서로 다른 주소를 가짐
=> str1과 str2는 서로 다른 값
- 실습 - Java JVM Heap 확인
- Plugin 설치 : "JOL", "JVMs Manager"
- Heap 내용 확인(JVMs Manager) : JVMs 실행 → JVM Actions → Heap Infomation → RUN
- Heap에 할당된 이유 설명(JOL) : 클래스에서 오른쪽 마우스 → Show Object Layout
- Ctrl+d : 두 개의 파일을 쉽게 비교 가능한 명령어
- 빌드부터 실행까지 메모리 과정
- 자바 코드
- 컴파일 : 상수 풀에 상수 넣기
- class loader의 호출 : Method Area에 메소드, 클래스 등 넣기
- 실행
- 자바 코드
GC(Garbage Collector)
- GC : Heap에서 사용하지 않은 메모리 할당 해제
- System.gc()
- GC를 동작시키는 명령어
- 판별대상
- Reachable : 객체가 참조되고 있는 상태
- Unreachalbe : 객체가 참조하고 있지 않은 상태
=> GC는 Heap에서 Unreachable인 상태인 객체 제거
- Heap 공간
- Young Generation : 새로 할당된 객체들의 영역
- Old Generation : Young Generation에서 오랫동안 살아남은 객체들이 존재하는 영역
- GC 방법
- Minor GC : Heap의 Young Generation을 청소하는 GC
- Major GC : Heap의 Old Generationd을 청소하는 GC
- Stop-the-World
- Major GC가 동작할 때에는 Java의 동작을 멈추는 현상
- 현업에서 신경을 많이 쓰는 현상
- 싱글 쓰레드일 경우, 순간적으로 어플리케이션 동작이 멈춤
- 실무에서 GC를 사용하는 방법
- 직접적인 GC 호출(System.gc()) → 매우 무거운 작업이기 때문에 직접 호출 X
- 자동으로 GC가 동작하기 때문에 직접적인 호출할 필요 X
- Java Heap 모니터링을 통해서 GC 동작 확인 가능
- GC 튜닝
Object
- 기본적으로 설치되는 Java.lang 패키지
- Object : 최상위 클래스
- System : 표준 입출력, JVM 종료, GC 실행할 때 사용되는 클래스
- String : 문자열 클래스
- Class : 메모리 로딩할 때 사용하는 클래스\
- Math : 수함 함수 클래스
- Wrapper : 기본 타입의 데이터를 갖는 객체들의 클래스
- 최상위 클래스
- 모든 클래스는 Object의 자식
- 클래스 선언 시 자동으로 "extends Object"가 추가되어 있음
- 실습
- 여러 클래스를 선택해서 오른쪽 마우스 → 클래스들의 관계도 표현
- 클래스 추가 : 오른쪽 마우스 → Content → Add Class To Diagram...
- 주요 메서드 → 오버라이딩(@Override) 가능
- toString()
- 객체 정보를 문자열로 변경
- 기본 구현 : getClass().getName() + '@' + Integer.toHexString(hashCode()) → 클래스명@해쉬코드값
- equals()
- 두 인스턴스가 같은 객체인지 판단
- 기본 구현 : Heap 주소값을 비교해서 같을 경우 true, 다를 경우 false를 반환
- == : 기본 구현된 equals(), 오버라이드해도 변경된 equals가 아닌 기본 equals처럼 동작
- hashCode()
- 객체의 해시 코드 반환
- clone()
- 자신과 같은 객체 복사
- toString()
기본 메서드
String 클래스
- final char[] 문자열
- 객체 초기화 방법(Char[] chars = { 'a', 'b' };)
- new String(chars)
- String.valueOf(chars)
- String → char[]
- toCharArray()
- new 생성자를 이용해서 객체 선언 시, 값이 같더라도 다른 heap 공간에 저장되기 때문에 서로 다른 객체
- but, 리터럴값을 넣으면 상수풀에 저장되기 때문에 같은 객체
- 동등 비교
- == : 항상 두 변수의 메모리 주소값 비교
- equals() : String 클래스에서 재정의해서 주소값이 아닌 리터럴값 비교
- 불변성
- String 객체값 변경 시 새로운 객체가 생성되어서 할당됨
- 계속 객체값 변경 시 불필요한 메모리를 많이 할당됨 → 해결방법 : StringBuilder, StringBuffer
- StringBuilder
- 선언 : new StringBuilder(용량)
- 초기 용량 초과 시 자동으로 용량 변경
- 메서드
- append("추가할 문자열") : 문자열 뒤에 추가
- insert(index, "변경할 문자열") : index 위치부터 변경할 문자열 삽입
- delete(from, to) : from에서 (to-1)까지 문자열 삭제
Class 클래스
- 클래스의 메타정보를 얻어오는 클래스
- 메서드
- 객체.getClass() : 클래스 가져옴
- 클래스.class : 클래스 가져옴
- Class_객체.getConstructors() : 생성자들을 가져옴, 반환값 Constructor[]
- Class_객체.getFields() : 필드 정보를 가져옴, 반환값 Field[]
- Class_객체.getMethods() : 메서드 정보를 가져옴, 반환값 Method[]
- newInstance() : 새로운 객체 생성
- getConstructor(인자값의 클래스 정보) : 특정 생성자 가져옴
- Java Reflection 기술과 같이 사용됨
System 클래스
- 운영체제 시스템 관련 기능을 수행하는 클래스 → 유틸리티 클래스
- 입출력 관리, 시간 측정, 환경변수 접근, GC 호출 등의 기능을 함
Math 클래스
- 수학 계산 관련 메서드를 제공하는 클래스 → 유틸리티 클래스
'슈퍼코딩 > 주특기(JAVA)' 카테고리의 다른 글
2024.05.09(목) 슈퍼코딩 신입연수원 6주차 Day 4 후기 - Collection(List, Set, Map), Hash, Tree (0) | 2024.05.09 |
---|---|
2024.05.08(수) 슈퍼코딩 신입연수원 6주차 Day 3 후기 - Wrapper, Generic (0) | 2024.05.08 |
2024.05.06(월) 슈퍼코딩 신입연수원 6주차 Day 1 후기 - JVM (0) | 2024.05.06 |
슈퍼코딩 신입연수원 5주차 후기 (0) | 2024.05.04 |
2024.05.03(금) 슈퍼코딩 신입연수원 5주차 Day 5 후기 - 추상 클래스, 인터페이스 (0) | 2024.05.03 |