일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준 16719
- spring security
- JPA
- sql 기술면접
- 백준 16236
- Kotlin
- 프로그래머스
- 백준
- 백준 17779
- java
- Spring Boot
- MSA
- springboot
- 백준 17626
- 백준 15685
- Spring
- 백준 16235
- MySQL
- re.split
- 백준 파이썬
- java 기술면접
- 웹어플리케이션 서버
- 프로래머스
- spring cloud
- with recursive
- spring oauth
- 파이썬
- JVM
- Coroutine
- 백준 19238
- Today
- Total
목록JVM (2)
시작이 반
JVM기반의 언어를 사용하다가 (Java, Kotlin) 보면 OS에 독립적이라는 말이 나온다. 옛날에는 JVM위에서 동작하기 때문에 OS에 독립적이구나 하고 넘어갔는데 최근에 왜 OS에 독립적인지 정확히 알고싶어 졌다. 자바의 런타임 과정은 아래와 같다. JDK를 통해 바이트코드 생성 ( .java -> .class ) 바이트코드를 JRE에 전달 ( .class ) JRE를 통해 바이트코드를 JAVA 명령어로 실행 이를 JVM이 실행 여기서 JVM이 내부에서 특정 OS에 맞게 자바 언어를 인터프리터나 JIT를 통해 기계어로 변환시켜준다. 때문에 어떤 OS를 사용하든간에 JVM이 JAVA가 실행되는 것을 보장한다. 옜날에는 Java언어는 다른 언어에 비해서 느리다는 말이 나왔었는데 이는 위에 런타임과정에..
C나 C++은 OS레벨의 메모리에 직접 접근 한다. 때문에 사용자가 직접 메모리 누수를 막기 위해 메모리 해제를 해줘야 한다. 자바는 OS에 직접적으로 접근하지 않고 Java Virtual Machine(JVM) 이라고 하는 가상 머신을 통해서 간접적으로 접근을 하게 된다. 이런 JVM은 메모리를 자동으로 관리를 해주는데 이렇기 때문에 메모리 누수가 없으며 사용자가 메모리초과 이외에는 신경을 쓰지 않아도 된다는 장점을 가지고 있다. 그렇다면 JVM은 어떻게 메모리를 자동으로 관리를 해주는 것일까? JVM에는 Garbage Collection(GC)라고 하는 것이 존재한다. 이 가비지 컬렉션은 Heap영역을 스캔하여 사용하지 않는 메모리를 제거해준다. 사용하고 있는지 사용하지 않고 있는지 어떻게 아는 것인..