Programming/Java
-
[Java] JVM의 구조Programming/Java 2021. 4. 5. 12:55
JVM의 구조를 살펴보자. JVM은 크게 Class Loader SubSystem(클래스로더 서브시스템), Runtime Data Areas, Execution Engine(실행엔진)으로 구성되어 있다. JVM 아키텍처 source : dzone.com 1. 클래스로더 서브 시스템 프로그램을 실행하는 데 필요한 클래스를 읽어오는 역할을 한다. 클래스 로딩 절차는 다음과 같이 요약할 수 있다 메서드 호출 문장을 만난다. 해당 메서드를 가진 클래스 바이트 코드가 로딩 전이다. 클래스 로더가 jre 라이브러리 디렉토리에서 해당 클래스의 유무를 조사한다. 발견하지 못했다면, jdk 확장 디렉토리에서 해당 클래스의 유무를 조사한다. 발견하지 못했다면, classpath 환경변수에 지정된 디렉토리(직접 선언한 클래..
-
[Java] JDK(개발도구), JRE(실행환경), JVM(가상머신)Programming/Java 2021. 4. 5. 12:54
자바언어의 특징인 WORA와 자바로 작성된 프로그램을 뒷바침하는 도구들(JDK,JRE,JVM)을 살펴보자. 1. 자바의 WORA(Write Once Run Anywhere) C언어의 특징을 먼저 살펴보자. C언어로 작성된 프로그램은 플랫폼에 종속적이다. 예를 들어, Intel CPU + Windows OS 환경에서 작성한 C 프로그램은 해당 환경에서만 실행이 가능하다. 즉, Intel CPU + MAC OS 또는 AMD CPU + Windows OS등의 환경에서는 실행되지 않는다는 것이다. C로 작성된 프로그램이 호환성이 없는 이유는 다음과 같다. CPU(Central Processing Unit, 중앙처리장치)마다 기계어가 다름 기계어는 Java나 Python처럼 통일된 문법을 가진 언어가 아니다. C..
-
[Java] 기계어(바이너리코드)와 바이트코드Programming/Java 2021. 4. 5. 12:53
기계어(바이너리코드)와 바이트코드를 알아보자 컴퓨터(CPU)는 일종의 계산기이다. 0과 1로 이루어진 바이너리 코드(binary code)를 해석하여 프로그램을 실행한다. 사람이 이해할 수 있는 high-level language x = 10 + 2 y = x + 4 기계가 이해할 수 있는 low-level language (binary/machine code) 001001 11101 11101 1111111111111000 001000 00001 00000 0000000000001010 001000 00001 00001 0000000000000010 101011 11101 00001 0000000000000000 001000 00010 00001 0000000000000100 101011 11101 0..
-
[Java] JVM과 GC 메모리 관리Programming/Java 2021. 4. 5. 12:52
JVM(Java Virtual Machine, 자바가상머신) OS의 메모리 영역에 접근하여 메모리를 관리하는 프로그램으로, 메모리관리와 Garbage Collecting 기능을 수행한다. GC(Garbage Collector, 가비지 컬렉터) 동적으로 할당한 메모리 영역 중 사용하지 않는 영역을 탐지하여 해제하는 기능을 수행한다. JVM의 메모리관리 참고자료 C나 C++에서는 OS레벨의 메모리에 직접 접근하기 때문에, free() 메소드를 호출하여 할당받은 메모리를 해제해주어야 한다. 그렇지 않으면 메모리 누수가 발생하여 프로그램의 응답속도가 늦어지다 결국 OOM(OutOfMemory) 오류로 프로그램이 종료되고, 다른 프로그램에 영향을 끼칠 수도 있다. 반면, 자바는 OS의 메모리 영역에 직접 접근하지..