728x90
인프런의 백기선님의 강의 정리용입니다.
JAVA...
JAVA 란?
- 프로그래밍 언어
- JDK에 들어있는 자바 컴파일러를 사용하여 바이트코드로 컴파일 할 수 있다.
JVM(Java Virtual Machine)
- 자바 가상머신으로 .class(바이트 코드) 를 OS에 맞는 코드로 변환
JVM 구조
JVM 구조 중에 중요한 것은 힙영역과 메서드 영역이다
힙, 메서드는 공유 자원 , 나머지는 쓰레드 개념이다.
클래스 로더 시스템
- 로딩 : 클래스를 로딩... 로딩 완료시 링크를 함.
- 링크
1) Verify: .class 파일 형식이 유요한지 검증
2) Prepare: 클래스 변수(static 변수) 와 기본값에 필요한 메모리
3) Resolve : 심볼릭 메모리 레퍼런스를 메소드 영역에 있는 실제 레퍼런스로 교체한다.- 심볼릭 레퍼런스 : 실제 new 로 해서 생성한 객체는 클래스 로딩 전에 실제 힙영역에 있는 객체를 참조하지 않는다. 논리적(?)으로 참조하고 있는 것이다. 하지만 Resolve 단계에서 이 논리적인 참조를 힙 영역과 연결하는 역할을 한다.
- 초기화 : static 변수의 값을 할당한다. 클래스의 static 키워드가 붙은 것들은 이때 할당이 된다.
JVM 메모리
- 힙 : 객체 저장, 인스턴스들을 명시적으로 만드는 객체들도 힙에 저장됨. (ex) ( Person person = new Person(); )
- 메서드 영역 : 클래스 수준의 정보, 전역적으로 사용되는 공유자원 느낌.
- 풀패키지 경로 ( package me.mypackage; 클래스 맨위에 있는..)
- 클래스 이름
- 상속받은 클래스가 있다면 부모클래스의 이름
public class App{ public static void main( String[] args ) { ClassLoader classLoader = App.class.getClassLoader(); System.out.println(classLoader); System.out.println(classLoader.getParent()); } } —————————————————————————————————————————— jdk.internal.loader.ClassLoaders$AppClassLoader@71bc1ae4 jdk.internal.loader.ClassLoaders$PlatformClassLoader@48140564 ——————————————————————————————————————————
- 스태틱 변수 ( static int number = 10;)
- 메서드 들
- 스택 : 쓰레드마다 런 타임 스택 생성. 그 안에다가 스택 프레임을 쌓는다.(메소드 콜, 어떤 메소드를 호출 했는지), Exception 또는 Error 시 나오는 콘솔창에 나오는 (at 호출 한 메소드 명 (클래스명.java : 17)) 쓰레드마다 한개 씩 생성됨.
- PC(Program Counter) 레지스터 : 쓰레드 마다 생성
- 네이티브 메소드 스택 : 네이티브 메소드를 호출 할 때 메소드에 native라는 키워드가 있고 그 메소드의 구현을 C 또는 C++로 한 것.
실제로 Thread.currentThread();를 까서 들어가보면 native 키워드가 붙어 있는게 있다. - 네이티브 메소드 라이브러리 : 네이티브 메소드 인터페이스 (JNI)를 통해야 한다. 네이티브 메서드를 사용할 때 네이티브 메소드 스택이 생성되고 네이티브 메서드 인터페이스를 사용하는 프레임이 쌓인다.
실행 엔진
- 인터프리터 : 바이트 코드를 이해하는 것. 기계언어로 한줄 씩 바꿔준다. 한줄마다 네이티브 코드로 컴파일 한다. 똑같은 코드가 나올때는 JIT 컴파일러로 보낸다.
- JIT 컴파일러 : 저스트 인 타임 컴파일러. 자바 파일을 컴파일 하는 것이 아니라 바이트코드를 네이티브 코드로 바꾼다. 반복된 코드를 다 찾아서 미리 바꿔 놓는다. 인터프리터가 반복하는 코드에 진입했을 때 한줄 씩 인터프린팅 하는 것이 아니라 변경되어 있는 네이티브 코드를 바로 실행한다.
- GC(가비지 컬렉터) : 안쓰는 객체들을 없애는 역할
출처 : 인프런 백기선님 강의 | https://www.inflearn.com/course/the-java-code-manipulation
728x90
'더 자바' 카테고리의 다른 글
더 자바 리플렉션(2) (0) | 2022.04.04 |
---|---|
더자바 리플렉션 (1) (0) | 2022.04.01 |
더 자바 바이트코드 조작 (0) | 2022.03.31 |
Comment