JIT 컴파일러와 일반 컴파일러의 차이를 알아보자
·
자바
0. 들어가며최근 자바 공부를 하면서 JIT 컴파일러와 일반 컴파일러의 차이가 문득 궁금해졌습니다.처음에는 단순히 실행 속도를 조금 더 빠르게 해주는정도로만 생각했지만 JVM 내부 구조와 JIT의 동작 원리를 이해하면 일반 컴파일러와의 차이가 훨씬 명확해진다는 것을 알게 되었습니다.이번 글에서는 일반 컴파일러와 JIT 컴파일러의 차이, JIT의 동작 과정, 장점과 느낀 점까지 정리해보겠습니다.1. 일반 컴파일러: 정적 최적화의 구조C나 C++ 같은 전통적인 언어의 컴파일러는 소스 코드를 실행 전에 한 번에 기계어로 변환합니다.즉 프로그램이 실행되기 전에 이미 CPU가 이해할 수 있는 형태로 변환되기 때문에 초기 실행 속도는 빠릅니다.하지만 단점도 있습니다. 실행 환경에서 실제 코드가 어떻게 쓰이는..
[JVM 완전정복 #1] JVM 구성요소 총정리: 가상 머신이 자바 코드를 실행하는 비밀
·
자바
0. 들어가며자바는 “한 번만 컴파일하면 어디서나 실행된다(Write Once, Run Anywhere)”는 말로 유명합니다.그런데 이 말을 가능하게 만드는 주인공이 바로 JVM(Java Virtual Machine) 입니다.평소엔 그냥 지나쳤던 JVM이 어떻게 동작하는지 그리고 내부에서 어떤 구조로 자바 코드를 실행하는지 궁금해서 이번에 정리해봤습니다. JVM을 공부하다 보니 한 번에 다 다루기엔 내용이 너무 방대하더라고요.그래서 이번 글에서는 먼저 주요 구성요소와 역할을 중심으로 정리했습니다.더 상세한 내용은 아래 포스팅에서 자세히 다루었습니다.1. 자바 프로그램의 첫 관문 - 클래스 로더2.Runtime Data Area 완전분석: 메모리 구조와 각 영역 역할3. Garbage Collector 이..
프로그래밍 언어의 시작 – 고급어와 저급어의 이해
·
자바
들어가며자바(Java)는 대표적인 고급 프로그래밍 언어이자 객체지향 언어입니다.하지만 자바를 제대로 이해하기 위해서는 먼저 프로그래밍 언어란 무엇인가? 라는 본질적인 질문부터 짚고 넘어가야 합니다.이번 글에서는 프로그래밍 언어의 근본 개념부터, 고급어와 저급어의 차이 그리고 CPU와 비트 연산의 관계까지 차근차근 살펴보겠습니다.프로그래밍 언어란 무엇인가컴퓨터는 사람의 말을 이해하지 못합니다.우리가 “계산해”, “출력해”라고 말해도 컴퓨터는 오직 0과 1의 신호로만 이해합니다.따라서 프로그래밍 언어는 사람이 이해할 수 있는 문장(고급어)을 기계가 이해할 수 있는 명령(저급어)로 변환하는 매개체 역할을 합니다.이 변환을 수행하는 도구가 바로 컴파일러(Compiler) 또는 인터프리터(Interpreter)..
스택(Stack): 마지막에 쌓은 것을 가장 먼저 꺼내는 구조
·
자료구조
0. 글을 쓰게 된 이유자료구조를 다시 공부하면서 스택(Stack)이 무엇인지는 알고 있었습니다.“마지막에 들어간 데이터가 가장 먼저 나온다”라는 LIFO(Last In, First Out) 특성 정도는 익숙했습니다.그러다가 ccommit 멘토링을 진행하면서 개념은 알고 있는데 왜 스택을 쓰는지 / 스택의 장점과 단점은 무엇인지 / 어떤 상황에서 스택이 정말로 적합한지에 대해서는 막연하게만 이해하고 있었다는 생각이 들었습니다.예를 들어 “괄호 검사할 때 스택 쓰지” 수준에서 멈춰 있었지호출 스택이 왜 그렇게 중요한지Undo/Redo 같은 기능이 왜 스택 없이 설계하기 어려운지스택이 오히려 맞지 않는 경우가 언제인지이런 부분은 정리가 안 되어 있더라고요.그래서 이번 글은 단순히 “스택이 뭔가요?”라는 ..
연결리스트 - 배열이 더 빠른데 왜 굳이 연결 리스트를 배울까?
·
자료구조
1. 들어가며 연결 리스트(Linked List)는 데이터를 노드(Node) 단위로 저장하고 각 노드가 다음 노드의 참조(reference) 를 통해 서로 연결된 선형 자료구조입니다. 배열처럼 메모리에 연속적으로 저장되지 않으며 메모리의 임의 위치에 존재하는 노드들이 포인터(pointer) 를 통해 논리적으로 연결됩니다.이 구조는 메모리의 불연속성을 극복하면서 유연하게 데이터를 관리할 수 있게 해줍니다.2. 연결리스트 내부 구조 이해각 노드는 일반적으로 다음 두 가지 정보를 가집니다.data: 저장할 실제 데이터next: 다음 노드의 주소(참조)class Node { int data; Node next; // 다음 노드를 가리킴 Node(int data) { this.dat..
배열
·
자료구조
배열이란 무엇인가?배열(Array)은 동일한 자료형의 데이터를 연속된 메모리 공간에 저장하는 자료구조입니다.각 원소는 인덱스(index) 로 구분되며 대부분의 언어에서는 0부터 시작합니다.즉 배열은 연속된 메모리 덩어리 속에 데이터를 가지런히 놓고 arr[i] 라는 표현만으로 곧바로 특정 원소를 O(1) 시간에 접근할 수 있게 해주는 구조입니다. int[] numbers = {10, 20, 30, 40}; System.out.println(numbers[2]); // 30 출력 (O(1)) 배열의 핵심 개념 – “연속된 메모리”배열이 빠른 이유는 데이터가 메모리에 연속적으로 저장되기 때문입니다.컴퓨터는 배열의 첫 번째 주소(base address)만 알면arr[i] = base_address + (i ..