Deperecated/JAVA

JAVA관련 토막 지식.

누알라리 2019. 12. 19. 20:41

1. 리터럴(literal)

- 소스 코드 내에서 직접 입력된 값

 

2. JVM의 메모리 사용 영역

- JVM은 운영체제에서 할당받은 메모리 영역을 1. 메소드 영역 / 2. 힙 영역 / 3. 스레드로 구분해서 사용한다.

메모리 영역 설명 설명2

메소드

(Method 영역)

코드에서 사용되는 클래스(~.class)를 클래스 로더로 읽어서

클래스 별로

1. 런타임 상수풀(runtime constant pool)

2. 필드 데이터(field)

3. 메소드 데이터(method)

4. 메소드 코드

5. 생성자(constructor) 코드


으로 분류해서 생성한다.

JVM이 시작할 때 생성되고

모든 스레드가 공유하는 영역이다.

(Heap 영역)

배열과 객체가 생성되는 영역.

JVM의 스택 영역의 변수나 다른 객체의 필드에서 "참조"한다.

참조하는 변수나 필드가 없다면

쓰레기 값으로 가비지콜렉터가 제거한다.

JVM 스택

(Stack 영역)

각 스레드 마다 '하나씩' 존재 하며,

스레드가 시작될 때 할당된다.

(기본은 Main 스레드기 때문에 JVM 스택도 1개)

 

메소드를 호출할 때 마다 프레임(Frame)을 추가(Push)하고,

메소드가 종료될 때 마다 프레임(Frame)을 제거(Pop)한다.

프레임 내부에는 "로컬 변수 스택"이 있다.

기본 타입 변수,

참조 타입 변수가 Push or Pop 된다.

 

변수가 초기화 될 때 생성된다.

변수는 선언된 블록 안에서만 스택에 존재,

블록을 벗어나면 제거된다.

 

기본 타입 변수는 스택 영역에 직접값을,

참조 변수는 힙 영역이나 메소드 영역의

객체 주소를 가진다.

 

배열&객체 = 힙 영역의 주소

class = 메소드 영역의 주소

 

3. main() 메소드에 String[] args를 쓰는 이유.

  • "JAVA 클래스"로 프로그램을 실행하면 JVM은 길이가 0인 String 배열을 먼저 생성하고 main() 메소드를 호출할 때 매개값으로 전달한다.
  • main() 메소드에 매개값을 전달하려면 [Run -> Run Configuration...]에서 [Program arguments]에 배열들을 입력한다.

4. 참조 타입

  • 배열
  • 열거
  • 클래스
  • 인터페이스

5. 배열은 참조 타입으로 객체의 번지값이 저장되기 때문에 배열 값의 비교는 equals() 메소드를 사용해야 한다.

 

~업데이트 예정~

'Deperecated > JAVA' 카테고리의 다른 글

JAVA - 열거 타입  (0) 2020.01.04
JAVA - 향상된 for문  (0) 2020.01.04
JAVA 기본서 공부 - 4 <연산자>  (0) 2019.12.19
JAVA 기본서 공부 -3 <상수>  (0) 2019.12.19
JAVA 기본서 공부 -2 <변수&자료형>  (0) 2019.12.19