▩ 목 차 ▩
1. 자바에서 사용되는 언어들
1-1. 정리
2. Garbage Collection
3. 자바의 언어의 특징은 다음과 같다.
■ 1. 자바에서 사용되는 언어들 ■
- JVM : Java Virtual Machie
- 작성한 자바 프로그램이 수행되는 프로세스
- 자바 소스코드로부터 컴파일 해서 나온 결과인 자바 바이너리 파일(.class)을 실행할 수 있다.
- 자바 프로그램이 어느 기기, 어느 운영체제에서도 실행될 수 있게 만들어준다.
- 바이너리 코드를 읽고, 검증하고 실행한다.
- JRE의 규격을 제공한다.
- 자바 프로그램의 메모리를 효율적으로 관리 & 최적화해준다.[ Garbage Collection ]
- JRE : Java Runtime Enviroment
- JVM이 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일들과 기타 파일들을 가지고 있다.
- JVM, 자바 클래스 로더를 포함한다.
- JRE는 JVM의 실행환경을 구현했다고 할 수 있다.
- 단지, 자바 프로그램을 구동하기 위한 독립형 구성요소로써 사용 될 수도 있지만, 동시에 JDK의 일부이기도 하다.
- 실행만을 위한 환경이다
- JVM을 생성하는 디스크 상의 부분이고 원활하게 잘 작동할 수 있도록 환경을 맞춰주는 역할이다.
- JDK : Java Development Kit
- 기술적 정의 : 컴파일러와 클래스 라이브러리를 포함하는, 자바 플랫폼 사양서의 구현이다.
- 일반적인 정의 : 개발자가 자바 기반 어플래케이션 개발을 위해 다운로드하는 소프트웨어 패키지다.
- 모든 JDK는 자바 애플리케이션 구동에 이용되는 환경이 JRE뿐만 아니라, JRE에는 없는 자바 컴파일러도 포함하고 있다.
- JDK를 설치하면 JRE, JVM이 자동으로 설치된다.
■ 1-1. 정리
complier(컴파일러)부분은 JDK으로 이해하고,
"Byte code(.class file)" 부분과 "JVM" 부분을 묶어 JRE로 이해하면 펴할 것이다.
■ 2. Garbage Collection ■
[ 추후에 Garbage Collection을 자세히 공부해 이것만을 위한 글을 써보도록 하겠다. ]
어떤 객체를 생성하더라도 그 개 객체는 언제가는 쓰레기가 되어 메모리에서 지워져야만 한다.
==> 왜냐하면 지워지지 않는다면, 자바 프로그램은 엄청난 메모리가 필요할 것이다. 그래서 이러한 메모리 관리를 자동으로 해주는것이 Garbage Collection이다.
JVM은 Heap 영역에서 객체들을 관리한다.
가장 왼쪽에 있는 Young 영역에는 말 그대로 젊은 객체들이 존재하며, Old 영역에는 늙은 객체들이 자리잡게 된다.
그리고 Perm이라는 영역에는 클래스나 메소드에 대한 정보가 쌓인다.[Perm에 저장되는 데이터는 더 많지만, 이 정도만 알고 있어도 된다.]
Young 영역은 Eden과 두 개의 Survivor 영역으로 나뉘는데, 이 중 객체를 생성하자마자 저장되는 장소는 Eden이다.
일반적으로 자바에서 메모리가 살아가는 과정은 아래와 같다.
- Eden 영역에서 객체가 생성된다
- Eden 영역이 꽉 차면 살아있는 객체만 Survivor 영역으로 복사되고, 다시 Eden 영역을 채우게 된다.
- Survivor영역이 꽉 차게 되면 다른 Survivor 영역으로 객체가 복사된다. 이 때 Eden 영역에 있는 객체들 중 살아있는 객체들도 다른 Survivor 영역으로 간다. 즉, Survivor영역의 둘 중 하나는 반드시 비어 있어야만 한다.
위의 과정은 마이너 GC 혹은 영 GC라고 부른다.
그러다가 오래 살아있는 객체들은 Old 영역으로 이동한다. 지속적으로 이동하다가 Old 영역이 꽉 차면 GC가 발생하는데 이것을 메이저 GC 혹은 풀 GC라고 부른다.
여기서 영 GC가 빠를까 풀 GC가 빠를까?
==> 영 GC가 풀 GC보다 빠른다. 왜냐하면 일반적으로 더 작은 공간이 할당되고, 객체들을 처리하는 방식도 다르기 때문이다.
[ 그렇다고 해서 전체의 힙 영역을 영 영역으로 만들면 장애로 이어질 확률이 매우 높아진다. ]
● GC의 방식은 크게 4가지다.
- Serial GC
- Parallel Young Generation Collector
- Parallel Old Generation Collector
- Concurrent Mart & Sweep Collector(줄여서 CMS)
- G1 (Garbage FIrst)
■ 3. 자바의 언어의 특징은 다음과 같다. ■
- 자바는 "단순하고, 객체지향이며, 친숙"해야 한다.
객체지향 언어들의 특징을 지원할 수 있는 다형성, 캡슐화 등의 구조로 되어 있다. - 자바는 "견고하고, 보안상 안전"하다.
메모리 관리 모델이 매우 단순하고, 포인터의 개념이 없다. 그렇기에 매우 믿을 수 있고 견고한 소프트웨어가 될 수 있도록 도와준다.
자바는 기본적으로 분산 환경에서 사용하기 위해 디자인 되었고 분산환경은 보안은 중요한데, 자바 기술은 외부에서 침입이 불가능한 애플리케이션을 만들 수 있도록 해준다. - 자바는 "아키텍처에 중립적이어야 하며 포터블"해야 한다.
자바의 버전만 동일하다면, 동일한 프로그램은 어떤 플랫폼에서도 실행할 수 이다. (JVM 덕분) - 자바는 "높은 성능"을 제공해야 한다.
자바는 실행 환경에서 최대한의 성능을 낼 수 있도록 되어 있다. 또한 자동화된 가비지 컬렉터는 낮은 우선 순위의 쓰레드로 동작하기 때문에 보다 높은 성능을 낼 수 있다. - 자바는 "인터프리트 언어이며, 쓰레드를 제공하고, 동적인 언어"이다.
자바 인터프리터는 자바 바이트 코드를 어떤 장비에서도 수행할 수 있도록 해준다. 또한 자바는 멀티 쓰레드 환경을 제공하기 때문에, 동시에 여러 작업을 수행할 수 있다.(매우 빠른 사용 환경 제공)
'JAVA > 자바의신 2' 카테고리의 다른 글
24장 자바랭 다음으로 많이 쓰는 애들은 컬렉션 - Part3(Map) (1) | 2022.09.19 |
---|---|
23장 자바랭 다음으로 많이 쓰는 애들은 컬렉션 - Part2(Set과 Queue) (0) | 2022.09.18 |
22장 자바랭 다음으로 많이 쓰는 애들은 컬렉션 - Part1(List) (0) | 2022.09.18 |
21장 실수를 방지하기 위한 제네릭 (0) | 2022.09.17 |
20장 가장 많이 쓰는 패키지는 자바랭 (0) | 2022.09.17 |