- JVM 사용하여 OS에 독립적이다.
- 객체 지향 언어이다.
- GC를 사용하여 메모리를 자동으로 관리해준다.
- 웹/모바일 프로그래밍이 쉽다.
- 어떤 OS로 접근해도 JAVA를 사용하려면 JVM를 통해서 동작하기 때문에 (즉, OS위에 JRE/JDK를 다운 받아서 동작시킴) OS에 독립적이게 코딩할 수 있다.
- c/c++등 자바 이전의 프로그래밍 언어들의 컴파일러는 기계어 코드로 변환할 때 프로그램이 실행될 대상 컴퓨터의 cpu와 운영체제에 종속적인 코드로 변환하는 과정을 거친다.
- 자바 가상 머신 Java Virtual Machine
- 가상 컴퓨터를 시뮬레이션하는 소프트웨어이다.
- JVM은 다른 프로그램을 실행시키는 것이 목적인 프로그램으로,
- 하드웨어, 운영체제에 관계 없이 JVM만 설치되어 있으면 동일한 자바 프로그램을 동작시킬 수 있다.
- 역할
- 어떤 운영체제에서도 실행될 수 있게끔 한다. -> Write Once Run Anywhere
- 프로그램 메모리를 관리하고 최적화한다. -> Garbage Collection
- 자바 실행 환경 Java Runtime Environment (개발자가 아닌 일반인을 위한 자바 실행 환경)
- ⇒ 자바 클래스 라이브러리(Java class libraries) + 자바 가상 머신(JVM)
- 자바 애플리케이션을 실행하기 위한 것
- 개발 관련 도구(javac 등)을 포함하지 않음
- 자바 개발 도구 Java Development Kit
- JDK는 JRE에 추가로 자바 프로그램을 개발하는 데 필요한 컴파일러, 디버거와 같은 명령어행 개발 도구를 추가한 것이다.
-
동작 원리
- 자바 소스(.java)를 자바 컴파일러를 통해 자바 바이트 코드(.class)로 컴파일한다.
- 컴파일된 바이트코드를 JVM의 클래스 로더에게 전달한다.
- JVM의 클래스 로더는 동적 로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Runtime Data area), 즉 JVM의 메모리에 올린다.
- 실행 엔진(Execution Engine)은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행합니다.
- Object oriented programming(OOP)
- 객체간의 관계를 기반으로 프로그래밍하는 언어
- 장점
- 재사용성
- 유지보수
- 코드관리
- 가비지 컬렉션 Garbeage Collection
- 자바의 메모리 관리 방법으로,
- JVM의 Heap 영역에서 동적으로 할당했던 메모리 영역 중 필요 없게 된 메모리 영역을 주기적으로 삭제하는 프로세스이다.
- C 나 C++에서는 이러한 가비지 컬렉션이 없어 프로그래머가 수동으로 메모리 할당과 해제해주어야 함.
- 장점
- 개발자가 직접 메모리 해제하지 않아도 되어 개발에만 집중할 수 있음
- 단점
- 개발자가 메모리가 언제 해제되는지 정확하게 알 수 없다.
- GC 동작하는 중에는 다른 동작을 멈추기 때문에 오버헤드가 발생한다.
안드로이드는 자바 기반으로 되어 있다. 모바일에 최적화된 프레임워크를 제공하고 있음

