Java와 JVM

fleecy·2023년 7월 1일

자바

목록 보기
1/1

Java란?

"Write once, run anywhere"

Java는 인터넷 환경에 적합하도록 고안된 객체지향 프로그래밍 언어이며, JVM을 동반한다.

인터넷 출현에 따라 웹에서의 활용을 목표로 운영체제 독립성을 가진 언어로부터 Java를 탄생시켰다.
Java로 작성된 프로그램은 운영체제(OS)와 하드웨어에 종속되지 않기에 한 번의 프로그램 작성으로 어디서든 실행된다. 이러한 Java의 이식성은 JVM에 기반한다.


JVM이란?

JVM이란 Java 프로그램에 OS 독립성을 부여하면서 메모리 관리(GC) 기능도 수행하는 Java Virtual Machine을 뜻한다. JIT compiler에 의해 성능이 좌우된다.

Java 컴파일러(javac)는 Java로 작성된 프로그램(.java)을 바이트 코드(.class)로 변환하고 JVM은 바이트 코드(.class)를 바이너리 코드로 변환해 실행시킨다. 이때 인터프리터와 JIT compiler가 그 역할을 수행한다.
즉, 사람이 작성한 코드를 VM이 이해할 수 있는 코드로, 그리고 CPU가 이해할 수 있는 코드로 점차 변환하는 것이다.

그림
![](https://velog.velcdn.com/images/fleecy/post/d6063f44-f94b-4e95-89c8-08ab31656df7/image.png)

Java의 특징

Java는 순수한 객체지향 언어라는 평가를 받는다.
기본 구문은 cpp에서, 객체지향 관련 구문은 small talk라는 언어에서 차용했다.
한편 Java8.0은 현재 추세에 따라 함수형 언어의 기능을 추가한 버전이다.

Java는 Java API를 통해 좋은 개발 환경을 제공한다. 네트워크, 멀티쓰레드 관련 기능 등을 포함하는 클래스 라이브러리이다. 구체적인 내용은 Oracle에서 확인할 수 있다.

한편 Java는 Dynamic loading로 시점에 따라 필요한 클래스만을 로딩하기에 프로그램이 유연하도록 한다.


기타

키워드 :

인터넷, JVM / cpp, 객체지향 / Java API, multithread, network / Garbage collection, dynamic loading /

추가내용 :

  • Java의 사용 : 주로 서버쪽 프로그래밍(Servlet, JSP[Java Server Pages])에 사용된다.
  • Applet : 웹 초창기 정적 웹페이지에 멀티미디어 기능을 넣던 애뮬레이터이다. 당시 제공 기능이 유일했기에 인기가 많았지만 보안상의 이슈로 현재는 거의 쓰이지 않는다.
  • 바이너리 코드 != 바이트 코드
    • 바이너리 코드(binary code) : cpu가 이해할 수 있는 코드
    • 바이트 코드(byte code) : VM이 이해할 수 있는 코드. java의 경우 바이트 코드는 JIT 컴파일러에 의해 바이너리 코드로 변환된다.
  • 속도 : JVM에서 바이트 코드(.class)를 변환할 때, 기존 인터프리터는 각 행마다 변환을 해줬기에 느렸지만, JIT(Just-In-Time) compiler의 등장으로 코드 전체를 한꺼번에 변환하며 속도를 향상시켰다.
  • GC : Garbage Collection. JVM에서 제공하는 자동 메모리 관리 기능. 기본적으로 Stop the World, Mark and Sweep 이라는 두 가지 단계를 거친다.

출처

Java의 정석(3rd Edition, 남궁성)
Java API(오라클)(https://docs.oracle.com/javase/8/docs/api/)

바이트코드와 바이너리 코드의 차이는 무엇일까?(https://shrtorznzl.tistory.com/82)
바이트 코드, 바이너리 코드란??(https://velog.io/@ktf1686/%EB%B0%94%EC%9D%B4%ED%8A%B8-%EC%BD%94%EB%93%9C-%EB%B0%94%EC%9D%B4%EB%84%88%EB%A6%AC-%EC%BD%94%EB%93%9C%EB%9E%80)
바이너리와 바이트 코드란?(+ 기계어란?)(https://usefultoknow.tistory.com/entry/%EB%B0%94%EC%9D%B4%EB%84%88%EB%A6%AC%EC%99%80-%EB%B0%94%EC%9D%B4%ED%8A%B8-%EC%BD%94%EB%93%9C%EB%9E%80-%EA%B8%B0%EA%B3%84%EC%96%B4%EB%9E%80)

[Java]자바의 동작과정 Java Compiler와 JVM(https://kingofbackend.tistory.com/123)
[Java] Garbage Collection(가비지 컬렉션)의 개념 및 동작 원리 (1/2)(https://mangkyu.tistory.com/118)

Java 8 에서 왜 함수형 프로그래밍이 도입되었을까?(https://tecoble.techcourse.co.kr/post/2021-09-30-java8-functional-programming/)

0개의 댓글