JAVA란?
자바는 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)과 연구원들이 개발한 객체 지향 프로그래밍 언어로 1995년에 발표되었다. 처음에는 가전제품에 탑재해 동작하는 프로그램을 만들기 위해 탄생했으나 지금은 웹과 모바일 앱 개발에서 가장 많이 사용하는 언어로 성장했다.
JAVA 특징
- 운영체제에 독립적
- 자바 가상 머신(JVM)하고만 통신하고 JVM이 자바 응용프로그램으로부터 전달 받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달
- JVM이 운영체제에 종속적이어서 여러 운영체제에 설치 할 수 있는 서로 다른 버전이 존재
- 객체 지향 언어
- 객체 지향언어로 상속, 캡슐화, 다형성을 지원
- 자동 메모리 관리(Garbage Collection)
- GC가 자동으로 메모리를 관리해서 참조되지 않은 메모리를 해제해줌
- 네트워크와 분산처리를 지원
- 다양한 네트워크 프로그래밍 라이브러리(Java API)를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발 가능
- 멀티 스레드를 지원
- 멀티 스레드를 지원하면 프로그램 단위가 같은 스레드를 동시에 수행할 수 있다. 자바는 멀티 프로세서 하드웨어를 지원하도록 설계되었으므로 멀티 CPU 시스템에서 효율이 높다.
- 동적
- 자바는 동적 로딩을 지원함으로써 프로그램 실행 시 모든 클래스가 로딩되지 않고 필요한 시점에 필요한 클래스만을 로딩
JAVA 단점
- 실행속도가 상대적으로 느리다.
- jvm위에서 돌아가기때문에 컴파일 언어에 비해 상대적으로 느릴 수 있다.
- 메모리 사용량이 많습니다.
- 가비지 컬렉션이 자동으로 메모리를 관리하는 과정에서 오버헤드가 발생할 수 있다.
JAVA 실행과정
- 자바 컴파일러가 소스코드를 바이트코드로 변환시킨다.
- 바이트 코드란 .java 파일을 JVM이 이해할 수 있도록 하는 Bytecode 로 변환하고 .class 파일을 만드는 것을 의미하는데, .class 파일에 존재하는 데이터
- 클래스로더가 바이트코드를 JVM의 runtime data area(메모리 영역)로 올린다.
- 클래스 로더란 JVM이 바이트코드를 메모리인 Runtime Data Area에 로드하는 역할
- Execution engine의 interpreter와 JIT compiler를 통해 코드를 해석한다.
- interpreter란 소스코드를 빌드시에 암것도 하지 않다가, 런타임시에 한줄 한줄 읽어가며 변환
JIT compiler 란소스코드를 한꺼번에 컴퓨터가 읽을 수 있는 native machine (기계)어로 변환