일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- stack메모리
- 자바
- Runtime data Area
- 객체지향
- Spring
- Native Method Stack
- Spring SOLID
- Stack
- Execution Engine
- Java
- pc register
- 스택메모리
- 개방폐쇄원칙
- Open Closed Principle
- 객체지향 설계 5원칙
- 의존성 역전 원칙
- 자바 heap
- 자료구조
- 개방-폐쇄 원칙
- JVM
- Data Structure
- 스택
- 단일책임원칙
- 단일 책임 원칙
- solid
- Heap
- Single Responsibillity Principle
- Class Loader
- 실행 엔진
- CS
- Today
- Total
목록자바 (7)
Juuunew 살아남기
스택은 한쪽 끝으로만 데이터를 넣고 뺄 수 있는 후입선출(Last-In-First-Out) - [나중에 들어온 데이터가 가장 먼저 빠져나간다] 형태의 자료구조이다. 대표적으로 컴퓨터 내부 프로세스 구조의 함수 동작 방식이 스택이다. 가장 쉬운 예시로 실행 취소(ctrl + z)를 생각할 수 있다. 실행취소를 여러번 할 때 가장 최근에 수행되었던 작업부터 취소되는 것을 떠올리면 된다. class Stack { class Node { private T data; private Node nextNode; public Node(T data) { this.data = data; } } private Node top; public T pop() { // 맨 위에 값이 null -> Exception if (top ..
런타임 데이터 영역 (Runtime Data Area - 메모리) 런타임 데이터 영역은 자바 어플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다. 즉, 프로그램을 수행하기 위해 OS에서 할당받은 메모리 공간이다. 런타임 데이터 영역은 다섯가지의 영역으로 나눌 수 있다. Method Area Heap Area Stack Area PC Register Native Method Stack 이 중 Method Area, Heap Area는 모든 쓰레드가 공유하고, 나머지는 각 쓰레드마다 생성되는 영역이다. Method Area 클래스 멤버 변수의 이름, 데이터 타입, 접근 제어자 정보와 같은 각종 필드 정보들과 메서드 정보, 데이터 타입 정보, static 변수, final class 등이 생성되는 ..
실행 엔진이란? 실행엔진은 메모리에 적재된 클래스(바이트 코드)들을 기계어로 변경하여 명령어 단위로 실행한다. 바이트 코드를 운영체제에 맞게 해석해주는 역할을 수행하며 크게 두 가지 방식을 사용한다. 인터프리터 (Interpreter) JIT (Just In Time) 인터프리터 (Interpreter) 바이트 코드 명령어를 하나씩 읽어서 해석하고 바로 실행한다. 바이트 코드 한 줄씩 읽고 실행하는데 중복되는 바이트 코드들에 대해서도 매번 컴파일 하게되어 속도가 느리다는 단점이 있다. 따라서 중복되는 바이트 코드에 대해서는 JIT 컴파일러를 사용한다. JIT (Just In Time) 인터프리터의 속도 문제를 해결하기 위해 생겨난 기능이며, 인터프리터로 먼저 컴파일을 하다가 반복되는 코드를 발견하면 JI..
클래스 로더는 JVM 내로 컴파일된 자바 코드(.class)를 동적으로 로드하고, 링크를 통해 레퍼런스를 연결하는 과정을 거치고 static 값들 초기화 및 변수에 할당 후 JVM의 메모리 영역인 Runtime Data Area에 배치한다. 클래스를 메모리에 올리는 로딩 기능은 한번에 메모리에 올리지 않고, 어플리케이션에서 필요한 경우에 동적으로 메모리에 적재한다. 클래스 로더는 3단계로 진행된다. 로딩 -> 링크 -> 초기화 로딩 (Loading) : 자바 바이트 코드( .class )를 메소드 영역에 저장한다. 로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성하여 "힙(Heap)" 영역에 저장. Bootstrap : JAVA_HOME/lib에 있는 코어 자바 API를 제공한다. (최상위 우선순..
자바 프로그램이 실행되면서 동적으로 생성된 객체가 저장되는 공간이다. 모든 Object 타입의 데이터가 할당됨 Heap 영역의 Object를 가르키는 참조변수가 Stack에 할당 생명주기가 김 생명 주기에 따라 Young Generation(짧음)과 Old Generation(김)으로 나뉘어진다. (추후 공부예정) 쉽게 말해 new 연산자로 생성된 객체 또는 인스턴스가 저장되는 공간이라고 생각하면 편하다. age는 원시타입 int를 타입으로 가지고있어 Stack 영역에 값이 함께 저장되어지고, Object를 상속받아 구현된 String 객체의 값은 Heap 영역에 생성되게 된다. Stack 영역에 생성된 name 변수는 Heap 영역에 있는 String 주소값을 참조하게 된다. 조금 더 나아가서 name..
Stack 메모리 함수나 메서드의 지역 변수(local variable)와 매개 변수(parameter)가 저장된다. 함수나 메서드가 호출될 때마다 스택 프레임이 스택 메모리 안에 쌓인다. Heap 영역에 생성된 Object 타입 데이터의 참조값이 할당 primitive type(원시타입)의 데이터가 값과 함께 할당 boolean, char, short, int, long, float, double 하나의 Thread 당 하나의 Stack을 가짐 (각 Thread에서 다른 Thread의 Stack 영역에 접근 불가 🌟 스택 프레임 하나의 메서드를 호출하는데 필요한 메모리 덩어리 메서드 하나 당 하나의 스택 프레임이 존재 메서드를 호출하기 직전 스택 프레임을 자바 Stack 메모리에 생성한 후 메서드를 호..
기본 타입 (Primitive Type) 실제 값을 저장하는 공간 자바의 메모리 영역 중 Stack 메모리에 저장 크기를 벗어나면 오버플로우(overflow) 발생 정수형의 기본 타입은 int 실수형의 기본 타입은 double 논리형의 기본값은 false 💡 오버플로우란? 해당 타입이 표현할 수 있는 최대 범위보다 큰 수를 저장할 때 발생하는 현상을 가리킴 💡 기본값이 존재하기 때문에 Null 이 존재하지 않음. 기본형 타입에 Null 포함하고 싶다면 래퍼 클래스(Wrapper)를 활용 💡 래퍼 클래스는 기본 타입 자료형을 객체로 다루기 위한 클래스 참조 타입 (Referance Type) 참조 타입은 기본 타입을 제외한 모든 타입 Null 허용 자바의 메모리 영역 중 Heap 메모리에 저장 값들을 저장..