일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- puppeteer
- TCP
- Docker
- Apollo
- redis
- 서버
- java11
- 스프링
- graphql
- LangChain
- bufferdreader
- Scanner
- mysql
- Mongoose
- 백준알고리즘
- mongodb
- 프로그래머스
- ai
- 자바
- Spring
- eof
- Android
- HTTP
- nodejs
- MapReduce
- 스프링부트
- 조건문
- restapi
- java
- k8s
- Today
- Total
자라나라 개발머리
[JAVA] 자바 특징/코드 실행 과정/자바 가상 기계(JVM)의 특징 본문
자바의 특징
1. 이식성이 높다.
이식성이란? 운영체제(윈도우, 맥 OS, 리눅스 등)가 달라도 동일한 소스 파일로 실행 가능한 것
자바는 윈도우에서 작성한 소스코드 파일을 맥os에서 수정없이 실행할 수 있다.
2. 객체 지향 프로그래밍 언어이다.
객체 지향 프로그래밍은 개발 기법 중 하나로, 객체를 먼저 만들고 객체들을 조립 및 연결해서 프로그램을 완성 시킨다.
자바는 객체 지향 프로그래밍 언어이다. 따라서 객체 지향 언어로써 갖춰야 할 캡슐화, 상속, 다형성 기능을 지원하고 있다.
3. 메모리를 자동으로 관리한다.
타 언어(ex: C++)의 경우 생성된 객체를 제거하기 위해 직접 코드를 작성해야 한다. 메모리 관리를 개발자가 직접 해야 하는 것이다.
자바는 개발자가 직접 메모리에 접근할 수 없도록 설계되었으며, Garvage Collector가 자동으로 사용하지 않는 객체를 제거시켜준다.
4. 범용성이 있다.
자바는 다양한 운영체제에서 실행되는 프로그램을 개발할 수 있으며, 더하여 웹/앱 애플리케이션 등 개발 여러 분야에서 다양하게 이용되는 언어이다.
5. 멀티 스레드를 쉽게 구현할 수 있다.
하나의 프로그램이 동시에 여러 가지 작업을 처리해야 할 경우, 멀티 스레드 프로그래밍이 필요하다.
자바는 스레드 생성 및 제어와 관련된 라이브러리 API를 제공하고 있기 때문에 멀티 스레드를 쉽게 구현할 수 있다.
6. 동적 로딩(Dynamic Loading)을 지원한다.
자바는 애플리케이션이 실행될 때 모든 객체가 생성되지 않고, 객체가 필요한 시점에 클래스를 동적 로딩해서 객체를 생성한다. 따라서 유지보수를 하더라도 문제가 있는 클래스만 수정하면 되므로 전체 애플리케이션을 다시 컴파일할 필요가 없다. 이러한 특징 덕분에 유지보수를 쉽게 빠르게 진행 할 수 있다.
7. 오픈소스 라이브러리가 풍부하다.
코드 실행 과정과 자바 가상 기계(JVM)
1. 코드 실행 과정
자바 코드 실행과정은 총 두가지 단계를 거친다.
소스 파일(.java) -----ⓐ-----> 바이트 코드 파일(.class) -----ⓑ-----> 기계어
ⓐ. 컴파일러 작동(javac.exe)
자바 컴파일러인 javac.exe를 실행시켜 소스 파일(.java)을 번역한 바이트 코드 파일(.class)이 생성된다.
ⓑ. 자바 가상 기계(JVM) 구동
바이트 코드 파일 형태는 컴퓨터가 이해할 수 없기 때문에 기계어로 번역시키는 과정이 한 번 더 필요하다.
이때 필요한 것이 자바 가상 기계(JVM:Java Virtual Machine)이다. JVM은 바이트 코드 파일을 기계어로 번역한다.
2. JVM의 특징
1. 자바 언어 자체는 운영체제에서 자유로우나, JVM은 운영체제에 종속적이다.
자신의 운영체제에 맞는 JVM을 설치해야 바이트 코드 파일을 자신의 운영체제에 맞는 기계어로 번역할 수 있다. 자바가 이식성이 높을 수 있는 것은 JVM 덕분이다.
2. 단점
하지만 두 번의 과정을 거쳐서 기계어가 만들어지기 때문에 한 번의 컴파일링으로 실행 가능한 언어(C,C++)보다 속도가 느리다는 단점이 있다. 그러나 JVM이 최적화 됨에 따라 속도의 격차가 많이 줄어들고 있다.
'Java' 카테고리의 다른 글
[JAVA 11] EOF 처리 방법 (Scanner, BufferedReader) (0) | 2022.08.08 |
---|---|
[JAVA 11] java.util.StringTokenizer 정리 (0) | 2022.08.07 |
[JAVA] BufferdReader read(), readLine() 차이 (0) | 2022.07.26 |
[JAVA] 왜 BufferdReader를 사용할까?/BufferdReader 사용 전후 비교 (0) | 2022.07.11 |
[JAVA] 조건문(if, switch) (0) | 2022.07.09 |