운영체제에 독립적이다.
자바가상머신(JVM) 덕분에 가능하다.
객체지향 언어이다.
상속, 캡슐화, 다형성 같은 객체지향개념의 특징이 잘 적용되어 있다.
자동 메모리 관리
가비지컬렉터(Garbage Collector)가 자동적으로 메모리를 관리해주기 때문에 프로그래밍에 집ㅂ중할 수 있다.
네트워크와 분산처리를 지원한다.
풍부하고 다양한 네트워크 프로그래밍 라이브러리를 지원한다.
멀티쓰레드를 지원한다.
일반적으로 운영체제에 따라 구현방법이 상이하며 처리 방식도 다르다. 그러나 자바는 시스템과 관계없이 구현 가능하며 관련된 라이브러리가 제공된다. 그리고 자바 인터프리터가 쓰레드에 대한 스케쥴링을 담당한다.
동적 로딩을 지원한다.
실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩한다. 그 외에도 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 된다.
Java Virtual Machin
자바를 실행하기 위한 가상 컴퓨터
하드웨어에 맞게 완전히 컴파일된 상태가 아니고 실행 시에 해석(interpret)되기 때문에 속도가 느리다는 단점이 있다.
JVM은 OS종속적이다.
Java Runtime Environment
└ JVM + 자바클래스 라이브러리(Java API)
Java Development Kit
└ JRE + 자바를 개발하는데 필요한 프로그램들