Java

EXEM Knowledge Base

Jump to: navigation, 찾기

Java는 Sun Microsystems에 의해 개발된 프로그래밍 언어이다. Java의 공식 홈페이지는 http://java.sun.com이다.

목차

[편집] Java의 특징(오해와 진실)

[편집] Java는 플랫폼(하드웨어와 OS)에 독립적이다

Java로 작성된 Application은 하드웨어와 OS에 독립적인 바이트코드(Bytecode)로 변환된다. 바이트코드는 JVM에 의해 해석되고 실행된다. 따라서 어떤 종류의 하드 웨어와 OS든, JVM만 제공되면 아무런 수정없이 Java Application을 수행할 수 있다. 이러한 특징 때문에 Java 언어는 Multi Platform Application을 위한 최적의 언어로 인정받는다.

하지만, 이것이 완벽한 독립성을 보장하는 것은 아니다. 하드웨어와 OS의 미묘한 특징에 따라 작동 여부나 성능이 결정되는 경우가 종종 있다. JVM을 구현하는 벤더들은 하드웨어와 OS별로 최적의 성능을 보장하기 위해 다양한 최적화 옵션을 구현한다. 따라서 Java Application의 성능을 최적화하려면 많은 경우 하드웨어나 OS의 특징을 파악해서 적절한 옵션을 제공해야 한다.

현존하는 모든 JVM은 공통적으로 JIT(Just-In-Time) 컴파일 기능을 제공한다. JTI 컴파일이란 하드웨어 독립적인 바이트코드를 실행 시간에 하드웨어 종속적인 머신코드로 변환해서 수행하는 것을 의미한다. 즉, 하드웨어 독립적인 Java 언어의 특성은 그대로 유지하되 성능 개선을 위해 실행 시간에 하드웨어 종속적인 코드를 생성하는 것으로 이해할 수 있다.


[편집] Java는 메모리 관리가 자동화된다

Java 언어에는 C/C++에서 제공하는 메모리 관련 기능들(예: malloc, free, new, delete, ...)이 존재하지 않는다. 대신 Garbage Collection 기법을 사용해서 생성 후 더 이상 사용되지 않은 객체들을 자동으로 정리해준다.

하지만, 자동화된 메모리 관리가 메모리 관리를 할 필요가 없다는 것을 의미하지 않는다. Java Application의 성능에 가장 큰 걸림돌이 Garbage Collector에 의한 GC 작업에 의한 정지(Pause)라는 것은 많은 것을 암시한다. GC 작업의 부하를 줄이기 위해 Application 개발자는 메모리를 효율적으로 사용하게끔 코드를 구현해야 한다. 시스템 관리자는 GC 작업에 영향을 주는 JVM 옵션들을 효과적으로 적용해서 GC 작업에 의한 성능 저하를 최소화해야 한다.

JVM을 제공하는 각 업체들은 보다 효율적이고 진보된 개념의 Garbage Collection 알고리즘을 제공하기 위해 노력하고 있다. 따라서 각 JVM 벤더들과 버전에 따라 어떤 종류의 Garbage Collection 알고리즘을 정확하게 이해하는 것이 필요하다.

[편집] Java를 구성하는 것

Java는 통상 4가지의 요소 또는 관련 기술로 구분할 수 있다.

  • Java Program Language
  • Java class file format
  • Java API(Application Proframming Interface)
  • Java Vertual Machine(JVM)

우리가 프로그램을 코딩하고 수행을 할 때 위의 4가지가 모두 필요하게 된다. 우선 소스 코드는 Java Program Language로 코딩을 하게 된다. 이 와중에 Java API의 method를 호출하여 system resource를 이용하게 된다. 이렇게 만들어진 소스 코드를 Java class file의 형태로 컴파일한다. 또한 이 class file은 JVM에서 수행이 된다.

그림:java.png

[편집] JVM

JVM(Java Virtual Machine)은 명세(Specification)과 구현(Implementation)이 독립적으로 관리된다. JVM의 명세는 Sun에 의해 주관되며 공개적인 표준이다. JVM의 명세를 따르기만 하면 누구나 JVM을 구현할 수 있다. 대표적인 JVM 구현물로는 Sun HotSpot JVM, IBM JVM, BEA JRockit JVM, HP HotSpot JVM등이 있다.

각 JVM들은 나름대로의 다양한 성능 최적화 옵션들을 제공한다. 이러한 옵션들을 정확하게 이해해야만 최적의 성능을 이끌어 낼 수 있다.

[편집] 참조

Java에 대한 상세한 정보는 아래 URL들을 참조한다.