JVM stack and heap

pepe·2025년 11월 7일

c와 c++는 플랫폼에 종속적이다.

c는 컴파일 하고나면 그 기계코드가 플랫폼이 다를경우 동작하지 않는다.
(플랫폼 = 운영체제 + cpu 아키텍처의 조합)

c는 이 문제를 어떻게 해결했을까

크로스 컴파일이라고 해서 타겟 플랫폼에 맞춰서 컴파일을 해주는게 있다
(ex 리눅스에서 윈도우를 타겟으로 잡고 컴파일 ->
타겟 프로그램은 윈도우에서 작동함)

java는 어떻게 해결했을까

java 소스코드가 javac라는 컴파일러를 거치고나면
java 바이트코드가된다.
이 바이트코드는 jvm이 설치된 플랫폼이라면 어디든지 동작한다.
(즉, java는 플랫폼에 종속적이지 않다.)

자바 언어로 작성된 소스파일 .java을 자바 컴파일러 javac로 컴파일 하면 .class의 바이트 파일 (바이트 파일은 바이트 코드의 집합이다.) 이 되는데 이 것을 JVM기계어로 바꿔준다.

왜 이렇게 만들었을까

c처럼 크로스 컴파일 하면 되잖아 라고 할 수 있다.
네트워크가 발전하던 시기, 모든 종류의 기기에서 자바를 돌리게 하고싶었다. 크로스 컴파일을 쓰면 모든 종류의 기기에서 컴파일을 다시해야한다. 너무 귀찮다.
cpu가 레지스터를 안쓰고 operand stack을 쓰게 한 이유도 마찬가지로 종속적이지 않게하기 위해서이다.

JVM 내부 구조

JVM은 자바 바이트 코드를 실행하는 기계이다.

JVM이 바이트 코드를 실행하기 위해 사용하는 메모리 공간이 있다.
(run time data area) 그 영역 중 method area와 heap은 모든 스레드가 공유한다.

Method area

클래스 로더가 클래스 파일을 읽어오면 클래스 정보를 파싱해서 이곳에 저장함.

Heap

프로그램을 실행하며 생성한 모든 객체를 저장하는 곳
new로 생성한 객체들이 저장되는 곳

JRE - java runtime environment

java에서 널리 쓰이는 라이브러리, JVM에서 도는 라이브러리를 JVM과 묶어서 다운받아서 설치 할 수 있도록 한 것.
어떤 컴퓨터든 JRE만 깔리면 자바 실행 가능

JDK - java development kit

JRE + 개발에 필요한 것들(javac, jdb jar 등등)

profile
pepe

0개의 댓글