Java/JVM (7) 썸네일형 리스트형 [JVM] Garbage Collection 개념과 동작원리 개요GC(Garbage Collection)는 왜 필요할까?C나 C++로 작성하는 프로그램은 개발자가 직접 동적으로 할당된 메모리 영역에 대한 해제를 해줘야했다. 이렇게 런타임중에 할당한 메모리 영역을 사용하고 필요없어졌을때 정상해제가 안된다면, 메모리 누수가 발생해서 프로세스가 OS로부터 할당받은 메모리 영역이 고갈된다. Java에서는 필요없게된 Heap 영역의 객체를 자동을 해제해주고 개발자는 로직 작성에만 신경쓸수 있도록 개발하였다. 이러한 작업을 수행하는 주체는 Garbage Collector라하며, 사용이 끝나 필요없는 쓰레기(garbage) 객체를 회수(collection)하는 작업이라서 GC(Garbage Collection)라고 부른다. GC의 장점개발자의 실수로인한 메모리 누수를 방지할.. [Java] 인스턴스 메서드 호출 및 실행 과정 - Bytecode 실행과 Runtime Data Area의 변화 (3) 2. Instance 생성과 Constructor 호출 및 실행 과정 내용에 이어서 인스턴스 메서드(Instance Method) 호출 및 실행 과정을 다룰것이다. [Java] 2. Instance 생성과 Constructor 호출 및 실행 과정 - Bytecode 실행과 Runtime Data Area의 변화앞선, 1. 클래스 파일(.class)의 메모리 로드 과정 내용에 이어서 인스턴스(Instance) 생성과 생성자(Constructor) 호출 및 실행 과정을 다룰것이다. 생성자에 대한 내용은 Constructor에 설명되어있다. [Java]devjohnpark.tistory.com 인스턴스 참조 값과 인자 값 로드인스턴스 참조 값 로드이전에 invokespecial #9 명령어를 실행하여, 생성자.. [Java] 인스턴스 생성과 생성자 호출 및 실행 과정 - Bytecode 실행과 Runtime Data Area의 변화 (2) 앞선, 1. 클래스 파일(.class)의 메모리 로드 과정 내용에 이어서 인스턴스(Instance) 생성과 생성자(Constructor) 호출 및 실행 과정을 다룰것이다. 생성자에 대한 내용은 Constructor에 설명되어있다. [Java] 1. 클래스 파일의 메모리 로드 과정 - Bytecode 실행과 Runtime Data Area의 변화OverviewJava 프로그램이 실행되면서 JVM의 메모리 구조는 어떻게 변화할까 궁금하였다. 해당 과정을 이해하기 위해, 바이트 코드를 명령어와 JVM의 Runtime Data Area와 맵핑시키면서 분석하였다. 또한devjohnpark.tistory.com Instance 생성소스코드 중, AddExample addExample = new AddExample(.. [Java] 클래스 파일의 메모리 로드 과정 - Bytecode 실행과 Runtime Data Area의 변화 (1) OverviewJava 프로그램이 실행되면서 JVM의 메모리 구조는 어떻게 변화할까 궁금하였다. 해당 과정을 이해하기 위해, 바이트 코드를 명령어와 JVM의 Runtime Data Area와 맵핑시키면서 분석하였다. 또한 클래스 파일(.class)에는 어떤 데이터가 저장되어 있고, 메서드 영역에 로드된 이후에는 어떻게 변화되는지도 파악할 수 있었다.사람이 읽을 수 있는 형태의 바이트 코드로 변환Java Source Code아래는 Main 클래스의 main 메서드에서 AddExample 인스턴스를 생성하고 add메서드를 호출하여 반환값을 받는 코드이다. 바이트 코드 분석을 위해서 간단한 코드로 진행하였다.public class Main { public static void main(String[].. [Java] JVM과 OS의 호환성 Java로 작성한 프로그램의 독립성을 위해서는 JVM 역할이 필요하다. 결국, JVM은 CPU와 OS에 종속되기 때문이다. 그렇다면 그중 OS의 어떤 부분이 JVM과의 호환이 필요한지를 알아보고, 어떻게 JVM으로 해결했는지 자세하게 파헤쳐볼것이다.OS의 명령어아래는 OS의 쉘 명령어(Shell Command)이다. Window와 macOS는 쉘 명령어가 아예 다르며, macOS와 linux는 Unix 기반의 운영 체제이므로 비슷하다. 이처럼, OS 마다 CPU 아키텍처와 호환되게 만든 자신들만의 쉘 명령어 들이 있다.Windowdir # 현재 디렉토리의 파일과 디렉토리 목록을 출력cd Desktop # Desktop 디렉토리로 이동mkdir new_dir # 새로운 디렉토리를 생.. [Java] JVM과 CPU의 호환성 Java로 작성한 프로그램의 독립성을 위해서는 JVM 역할이 필요하다. 결국, JVM은 CPU와 OS에 종속되기 때문이다. 그렇다면 그중 CPU의 어떤 부분이 JVM과의 호환이 필요한지를 알아보고, 어떻게 JVM으로 해결했는지 자세하게 파헤쳐볼것이다.명령어와 CPU 아키텍처명령어와 폰노이만 구조컴퓨터는 연산을 수행하는 기계이며, 프로그램은 명령어(Instruction)들의 연속된 연산으로 실행된다. 명령어는 +/-과 같은 연산과, 1 + 2의 식에서 연산할 대상인 1과 2 처럼 데이터가 있을 것이다. 그리하여 폰노이만은 명령을 내리는 놈인 제어장치(Control Unit), 연산을 하는 놈인 산술/논리 장치(Arithmetic Logic Unit), 데이터를 저장하는 놈인 메모리(Memory)으로 역할을.. [Java] Java 소스코드 Compile, Hex Dump, Disassemble 컴파일 (Compile)javac [source_code_name].java 명령어를 실행 시켜, 아래의 자바 소스 코드를 바이트 코드로 컴파일하였다..public class ByteCode { public static void main(String[] args) { int x = 5; int y = 32768; int z = x + y; } } 컴파일한 클래스 파일(.class)을 vim 텍스트 편집기로 열어보면, 다음과 같이 사람이 읽기 어려운 바이너리 형태로 저장되어있다.Êþº¾^@^@^@B^@^\^@^B^@^C^G^@^D^L^@^E^@^F^A^@^Pjava/lang/Object^A^@^F^A^@^C()V^C^@^@^@ ^@ .. 이전 1 다음