자바 언어의 특징
운영체제에 독립적이다.
다른 언어들은 각 운영체제에 맞게 적용하기 위해서 많은 노력을 해야 했지만 CPU 내부적으로 사용하는 게 다르다. 기본적으로 x86, arm도 다른데 두 언어는 서로 다른 명령어 집합을 다르게 사용하기 때문에 다른 언어들은 그 언어에 맞게 이해할 수 있도록 바꿔주는 과정이 필요했던 것으로 예상이 된다. 하지만 자바에서는 JVM을 통해서 자바 자바 프로그램을 실행하기 때문에 JVM이 자바 응용프로그램으로 부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달한다. JVM에서 예측 할 수 있듯이 VM은 Virtual Machine 의 약자이다. 그러나 JVM 자체는 운영체제에 종속적이기 때문에, 각 운영체제마다 다른 JVM 버전을 사용해야 한다.
객체지향 언어이다.
객체지향 언어의 기본 특징인 상속, 캡슐화, 다형성이 적용되어있다.
자동 메모리 관리(Garbage Collector)
Garbage Collector를 제공하는데, 해당 처럼 메모리를 자동으로 관리해주는 언어를 매니지드 언어라고 부른다. C 언어 같은 경우에는 malloac 을 통해서 새로운 메모리를 할당 받을때마다 직접 개발자가 선언을 해주어야 하기 때문에, 이러한 언어들을 unmanaged 언어라고 부른다.
네트워크 분산처리를 지원한다.
인터넷과 대규모 분산환경을 염두해두어 다양한 네트워크 프로그래밍 라이브러리를 제공해주고 있다.
멀티쓰레드를 지원한다.
일반적으로 멀티쓰레드 지원은 운영체제 마다 다르고 그에 따라 다르지만 자바는 JVM에서 돌아가기 때문에 멀티쓰레드와 관련해서 구현하기 쉽고 관련된 라이브러리도 제공해준다고 한다.
동적 로딩을 지원한다.
여러 개의 클래스가 있다고 가정할 때, 필요한 시점에 클래스를 로딩하여 사용할 수 있다는 장점이 있다.
JVM
위에서 잠깐 얘기했듯이 JVM은 자바만을 위한 Virtual Machine 이다. 다른 언어들의 코드는 OS에서 바로 메모리로 적재를 하는데에 반해, 자바는 애플리케이션 → JVM → OS → 메모리로 적재되기 때문에 다른 언어들에 비해 속도가 느리다는 단점이 있다. 그러나 JIT 컴파일러에 의해서 속도가 많이 향상되었다. 자바는 다른 언어와 달리 컴파일러와 인터프리터가 둘이 섞여있는 형태인데, 일정 수준까지 바이트 코드로 컴파일하고 컴파일 된 바이트 코드를 한 줄씩 해석하면서 실행한다. 이러한 문제때문에 느린 것이다.
자바 언어의 큰 단점은 다른 언어의 비해서 속도가 느리고 JVM이 운영체제에 종속적이기때문에, 운영체제에 맞는 JVM을 설치해야 한다.
JDK
Java Development Kit 의 약자이다. 해당 JDK에는 JVM과 자바 API 등 다양한 것들이 들어있다. 각 운영체제에 맞는 JDK를 사용하면 되고 , 현재는 JDK 17까지 나와있다.
JDK에 있는 java 실행 파일 용어
- javac : 자바 컴파일러, 자바 소스코드를 바이트 코드로 컴파일한다.
- java : 자바 인터프리터, 컴파일러가 생성한 바이트코드를 해석하고 실행한다.
- javap : 역어셈블러, 컴파일된 클래스파일을 원래의 소스로 변환한다.
자바 프로그램의 실행과정
- 프로그램의 실행에 필요한 클래스 파일을 로드한다. → 이미 컴파일러가 바이트 코드로 변경한 상황
- 클래스 파일을 검사한다. (파일형식, 악성코드 체크) → 컴파일이랑 다른 의미이다. 컴파일러 단계에서는 이미 체크 예외등을 다 처리해서 바이트 코드로 변환한다.
- 지정된 클래스의 main 메소드를 호출한다.
https://product.kyobobook.co.kr/detail/S000001550352
'Language > Java' 카테고리의 다른 글
7-2 참조변수 super, 생성자 super() (0) | 2023.03.22 |
---|---|
7-1 상속과 오버라이딩 (0) | 2023.03.22 |
6. 객체지향언어 1 (0) | 2023.03.22 |
3. 연산자 (0) | 2023.03.21 |
2. 변수 (0) | 2023.03.21 |