자바 응용프로그램은 운영체제나 하드웨어가 아닌 JVM(Java Virtual Machine)과 통신하고 JVM이 받은 명령을 운영체제가 이해할 수 있도록 변환하여 전달하기 때문에 운영체제로부터 독립적이다.
객체지향 개념의 특징인 추상화, 캡슐화, 상속, 다형성이 적용된 언어이다.
Java로 작성된 프로그램이 실행되면, 가비지컬렉터(Garbage Collector) 가 자동으로 메모리를 관리해주기 때문에 프로그래머는 메모리를 따로 관리하지 않아도 된다는 장점이 있다.
가비지컬렉터가 없다면 프로그래머가 사용하지 않는 메모리를 체크하고 반환해야하는 일을 수동적으로 처리해야 한다.
일반적으로 멀티쓰레드의 지원은 사용되는 운영체제에 따라 구현방법도 상이하며, 처리방식도 다르다. 그러나 Java에서 개발되는 멀티쓰레드 프로그램은 시스템과 관계없이 구현가능하며, 관련된 라이브러리(Java API)가 제공되므로 구현이 쉽다.
Java로 작성된 애플리케이션은 여러 개의 클래스로 구성되어 있다. Java는 동적 로딩을 지원하기 때문에 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다는 장점이 있다.
Java는 JDK(Java Development Kit)와 JRE(Java Runtime Environment) 두 가지 패키지로 구성되어 있다.
JDK는 Java 애플리케이션을 개발하고 컴파일할 때 필요한 도구와 라이브러리를 제공한다. 이에는 Java 컴파일러, 디버깅 도구, 프로파일링 도구, API 문서 등이 포함된다. JDK는 개발자가 Java 애플리케이션을 개발할 때 필수적인 도구이다.
JRE는 Java 애플리케이션을 실행할 때 필요한 최소한의 도구와 라이브러리를 제공한다. 이에는 JVM(Java Virtual Machine), Java 클래스 라이브러리 등이 포함된다. JRE는 사용자가 Java 애플리케이션을 실행할 때 필수적인 도구입니다.
Java 애플리케이션을 개발하려면 JDK가 필요하고, Java 애플리케이션을 실행하려면 JRE가 필요하다.
Java 코드는 컴파일러(javac)를 통해 컴파일된다. 컴파일러는 Java 소스 코드(.java 파일)를 바이트 코드(.class 파일)로 변환한다. 이 때, 컴파일러는 소스 코드를 문법적으로 검사하고, 바이트 코드를 생성한다. 바이트 코드는 JVM에서 실행될 수 있는 중간 코드이다. 바이트 코드는 운영체제나 하드웨어에 상관없이 실행될 수 있다.
바이트 코드는 JVM(Java Virtual Machine)에서 실행된다. JVM은 운영체제와 하드웨어 사이의 추상화 레이어로, Java 프로그램이 실행될 수 있는 환경을 제공한다. JVM은 바이트 코드를 읽어들이고, 실행 가능한 기계 코드로 변환하여 실행한다. 이 때, JVM은 메모리 관리, 스레드 관리, 예외 처리 등의 기능을 수행한다.
Java 코드는 컴파일러를 통해 바이트 코드로 변환되며, 바이트 코드는 JVM에서 실행된다. 이 과정에서 운영체제와 하드웨어에 상관없이 Java 프로그램이 실행될 수 있다.