JVM의 구조와 Java의 실행 방식
JVM이란?
자바 가상 머신(Java Virtual Machine)
자바 바이트 코드를 실행할 수 있게 해줌(.java 파일을 .class 파일(바이트 코드)로 변환해서 실행할 수 있게 해줌)
JVM의 구조
- 프로그램이 실행되면 OS로부터 프로그램이 필요로 하는 메모리를 먼저 할당 받습니다.
- 그리고 자바 컴파일러를 통해 개발자가 작성한 코드(.java)를 바이트 코드(.class)로 변환합니다.
- 다음 Class Loader에서 바이트 코드를 JVM에 로딩 시킵니다.
- 로딩 된 바이트 코드를 execution engine을 통해 기계어로 해석됩니다.
- 해석된 바이트 코드들은 runtime data areas에 배치되어 실질적인 수행이 이루어집니다.
Java의 실행 방식
WORA(Write Once Run Anywhere) → 어느 운영체제든 자바 코드를 컴파일해서 얻은 바이트 코드를 이해할 수 있는 기계어로 바꿔서 실행시켜주는 역할
GC(Garbage Collector)란?
Garbage Collector
JVM의 Heap 영역에서 사용하지 않는 객체를 삭제하는 프로세서를 의미함!
필요한 이유?
1. 메모리 관리를 쉽게해서 프로그래머의 부담을 덜어줌
2. 메모리 사용 효율을 높여줌
동작 방식?
힙 메모리 영역에 생성된 객체들 중 참조되지 않는 객체들을 탐색 후 제거함
제네릭이란?
제네릭은 자바에서 안정성을 맡고 있다고 할 수 있습니다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안전성을 높이고 형변환의 번거로움을 덜어주어 자연스럽게 코드도 더 간결해집니다.예를 들면, Collection에 특정 객체만 추가될 수 있도록, 또는 특정한 클래스의 특징을 갖고 있는 경우에만 추가될 수 있도록 하는 것이 제네릭입니다.이로 인한 장점은 Collection 내부에서 들어온 값이 내가 원하는 값인지 별도의 로직처리를 구현할 필요가 없어집니다. 또한 API를 설계하는데 있어서 보다 명확한 의사전달이 가능해집니다.
제네릭타입을 사용하면 컴파일 과정에서 잘못된 타입사용을 미리 방지할 수 있다는 장점이 있습니다.
어노테이션이란?
어노테이션은 말 그대로 알려주는 것! 이다
뭘 알려주냐???
이 어노테이션이 붙어있는 애가 뭘하는 애인지 알려줌!!
예를 들면 @Override, @Deprecated 등이 있다
Overriding과 Overloading
Overriding(오버라이딩)
- 덮어쓰기라고 생각하면 편함
- 자식 클래스에서 부모 클래스의 메서드를 재정의 하여 먼저 사용할 수 있게 함.
Overloading(오버로딩)
- 추가 적재
- 하나의 클래스 안에서 같은 이름의 메서드를 사용하지만 각 메서드마다 다른 용도로 사용되며 그 결과물도 다르게 구현
- 매개변수만 다른 메서드를 만드는 것