# JVM

[자바] JVM 내부 및 메모리구조
* 자바 가상 머신(JVM)의 동작 방식 * 자바로 개발된 프로그램을 실행하면 JVM은 OS로부터 메모리를 할당합니다. 자바 컴파일러(javac)가 자바 소스코드(.java)를 자바 바이트코드(.class)로 컴파일합니다. Class Loader를 통해 JVM Runtime Data Area로 로딩합니다. Runtime Data Area에 로딩 된 .class들은 Execution Engine을 통해 해석합니다. 해석된 바이트 코드는 Runtime Data Area의 각 영역에 배치되어 수행하며 이 과정에서 Execution Engine에 의해 GC의 작동과 스레드 동기화가 이루어집니다. **JVM의 구조 클래스 로더(Class Loader)**  컴파일 방식의 등장으로 인터프리터를 사용해도 괜찮을 정도로 격차가 크게 줄었다. 또한 인터프리터 언어는 런타임에 여러 플랫폼 위에서 최적화 될 수 있다. 자바와 JVM은 오늘날 대부분의 인기 플랫폼에서 동작하지만 자바
[퍼비톡] JVM
EFUB 퍼비톡 자료로, 모든 사진의 출처는 EFUB 퍼비톡 입니다. JVM의 등장 배경 문제) 호스트 머신과 타켓 머신의 플랫폼이 다른 경우, 프로그램 실행이 불가능 해결) 자바 바이트코드는 JVM 위에서 동작한다. ➡️ JVM만 있다면 어디서든 실행할 수 있다. JVM Java virtual machine (JVM) 은 자바 프로그램, 그리고 자바 바이트코드로 컴파일된 프로그램을 실행할 수 있게 하는 가상 머신이다. JDK Architecture JDK : 자바 프로그램 개발을 위한 도구를 포함하고 있는 구성요소. 자바 프로그램을 JRE, JVM에서 실행 가능하도록 변환해주는 역할 JRE: 코드를 실행하기 위한 JVM, JVM에 필요한 클래스 라이브러리와 여러 파일이 포

Java, JVM, JRE, JDK
Java의 본질에 대해 정리하고 복습할 겸 기록해보겠다. 어디까지나 학습 기록과 중간 중간 생긴 내 호기심에 대한 나의 하찮은 견해이다😥 Java 우선 Java는 잘 알려져 있다시피 썬 마이크로시스템즈 (Sun Microsystems) 라는 회사에서 제임스 고슬링(James Gosling)이라는 사람을 주축으로 만들어졌다. https://commons.wikimedia.org/wiki/File:Su

[Java] 자바 환경 세팅
📍 JDK 설치 JDK를 설치하면 JRE, JVM이 자동으로 설치된다. JVM(Java Virtual Machine): 자바 가상 머신. 자바 프로그램이 특정 컴퓨터 아키텍처 또는 운영 체제에 종속되지 않고 실행될 수 있도록 JVM 위에서 실행한다. JRE(Java Runtime Environment): JVM + Library Classes JDK(Java Development Kit): JRE + Development Tools 📍 자바 IDE 설치 <a href="https://www.eclipse.org/downloads/" targ

Metaspace OOM
문제 상황 점심시간 전 jenkin를 통해 빌드와 서버 접속이 잘 되는것을 확인하고 점심을 먹으러 갔다. 점심을 먹고 쉬고 있는데 갑자기 서버 접속이 안된다고 얘기를 들었었다. 일단 해결한 뒤 문제를 파악해 봤다. 배경 현재 배포 플로우는 다음과 같다. S3, Docker Hub를 이용하는 보편적인 CI/CD 플로우와 다르다. 외장 톰캣을 사용하기 때문에 tomcat의 autoDeploy 속성을 십분 활용하고 있다. autoDeploy 속성은 Root.war 파일이 변경감지 후 배포하는 방법인데, 무중단 배
Kotlin에서 DynamoDb SDK의 AttributeConverter 사용 시 주의사항 및 문제점 분석(1)
문제발생 새로운 배포를 진행 후 Spring Boot Application 서버가 몇 분뒤에 응답을 할 수 없는 상태가 발생하였다. stage단계에서 간단한 기능 테스트에선 문제가 없었는데 배포 후에 요청이 어느정도 발생하고 나면 문제가 발생하였던 것이다. 신규로 나간 기능 중에서 DynamoDb에서 조회를 하는 부분이 있었고 이 부분에서 문제가 발생하고 있는 것이 아닌가로 분석을 시작하였다. 문제원인 결론적으로 DynamoDb에서 조회를 하는 부분에서 발생한 것은 틀림이 없는 상황이었는데 이상한 것은 예외가 Sentry로 넘어오지 않는다는 것이었다. 롤백을 진행하면 프로세스가 종료되면서 한번에 여러개의 InterruptedException이 발생하였다. InterruptedException은 Thread를 종료하고 싶은 경우 발생을 시키는 것인데 프로세스가 종료되는 경우에 한번에 발생한 다는 것은 프로세스를 종료하는 시점까지 살아있던 Thread가 존재한다는 것이다.

[정리] Java Virtual Machine Garbage Collector(GC) 에 대해 알아보자 (3)
Garbage Collector! 이전 포스트에서 그랬듯 오늘도 JVM 관련 포스트이다. 그 중에서 메모리 영역을 관리해주는 GC가 오늘의 주제이다. 그럼 바로 알아보자. 1. GC가 뭐지? Garbage Collector. 줄여서 GC다. 앞으로 편의상 GC라고 하겠다. GC는 Heap 메모리 영역 중, 유효하지 않은 메모리인 Garbage를 자동으로 제거해주는 기능이다. JVM의 기능 중 더 이상 사용하지 않는 객체를 청소하여 메모리 공간을 확보해주는 작업이다. 자바나 코틀린을 이용하게 되면 JVM의 GC가 불필요한 메모리를 알아서 정리해준다. 대신 자바에서 명시적으로 불필요한 데이터를 표현하기 위해 일반적으로 null을 선언해준다. 기존 생성된 객체1을 참조하지

[정리] Java Virtual Machine 메모리 구조에 대해 알아보자. (2)
JVM Memory! 이전 포스트에서는 JVM 자체에 대한 소개를 했었다. 해서 이번에는 JVM의 주요 부분 중 하나인 메모리 구조에 대해 알아보도록 하자. 우선 시작하기에 앞서 간단하게 JVM이 어떻게 동작하는 구조인지 알아보자. JVM의 구조는 크게 Garbage Colltector, Execution Engine, Class Loader, Runtime Area로 4가지로 나눌 수 있다. JVM은 자바 소스 파일이 자바 컴파일러에 의해 바이트 코드 형태인 클래스 파일이 된다. 이때 클래스 로더가 클래스 파일을 읽어들이면서 JVM이 실행된다. Class Loader와 Execution Engine은 이전 포스트에서 설명했으므로 넘어가고 Garbage Collector은 다음 포스트에서

[정리] Java Virtual Machine이 궁금하니까 알아보자. (1)
Java Virtual Machine.. 일명 "JVM" 이다. 자바를 배우고자 한다면 첫번째로 접하게 되기도 하며, 보통 자바 강의나 책 첫번째 파트에 항상 존재하는 녀석이다. 그렇다고 중요성이 와닿지도 않고, 이 녀석을 몰라도 코드만 짤줄 안다면 프로그램은 돌아가기 때문에 무심코 지나치게 되는 존재이기도 하다. 하지만 가장 먼저 나온다는 것은 가장 중요한 개념이기도 하니까, 만약 필자처럼 멋모를때 자바를 배우고 지금까지 JVM의 철자만 외우고 있는 사람이라면 이 참에 JVM에 대해 알아가보자. 시작! 1. JVM..? 내가 이걸 왜 알아야 하는데? JVM을 알아야 할 이유가 없다면 공부할 필요가 없으니까..! 왜 JVM에 대해 알아야 하는지 혹은 알면 어떤것이 좋은지

Java 언어의 이해(1)
자바 개발자라고 말하고 다녔지만, 정작 다시 생각해보면 자바에 대해 모르는 부분이 너무 많고, 한번 정리가 필요하다고 느껴 작성해보고자 합니다. Java 가장 먼저 JVM을 알려면 자바가 무엇이고, 왜 생겨났는지부터의 이해가 필요할 것 같습니다. Java의 유래 자바의 창시자, 모두가 아는 제임스 고슬링은 Sun 마이크로시스템즈의 프로젝트 일환으로 자바라는 언어를 만들었습니다. 처음은 Oak라는 객체지향언어로 만들었다가, 수정을 거쳐 JAVA가 탄생하게 되었습니다. > ### TMI: JAVA라는 용어는? 자바는 자바 섬의 자바에서 유래하였습니다. 제임스 고슬링은 하루에 자바 커피를 10잔씩 마시는 자바 커피 중독자였다고 합니다. 
[JAVA] 자바 가상 머신(Java Virtual Machine)
JVM(자바 가상 머신) > 시스템 메모리를 관리하면서 자바 기반 애플리케이션을 위해 이식 가능한 실행 환경을 제공 자바 애플리케이션을 클래스 로더를 통해 읽어들이고 자바 API와 함께 실행하는 역할 ➡️ JVM의 목적은 다른 프로그램을 실행시키는 것 기능 자바 프로그램이 어느 기기나 운영체제 상에서도 실행될 수 있도록 하는 것 ➡️ JAVA와 OS 사이에서 중개자 역할을 수행하여 OS에 구애받지 않고 재사용 가능하게 해줌 프로그램 메모리를 관리하고 최적화 하는 것 JVM에서의 메모리 관리 JVM 실행에 있어서 가장 일반적인 상호작용은 힙과 스택의 메모리 사용을 확인하는 것 실행 과정 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로

스터디 3회차 - Java 기본적인 메모리 구조
Java를 배우다보면 항상 따라다니는게 있다 바로 메모리 영역과 JVM이다 오늘은 학원에서 간만에 이 부분에 대해서 복습하게 되어 다시 한 번 더 정리 해볼려고 한다. 일반 프로그램과 Java프래그램의 실행구조 일반 프로그램 일반 프로그램은 운영체제에 따라 해당 프로그램이 해당 운영체제에서 동작이 될 수도 있고 안 될 수도 있다 Java 프로그램 Java 프로그램은 일반 프로그램과 달리 운영체제에 도달하기전 JVM이 해당 운영체제에서 동작이 가능하게끔 해준다 그래서 어떤 운영체제에서도 실행이 가능하다 JVM의 동작 방식 
[TIL] #1 JVM, 변수
목적 파일 컴파일러나 어셈블러가 소스코드를 컴파일 또는 어셈블해서 생성한 파일 c: 하나의 소스 코드로 각 기기에 맞는 목적 파일을 생성 java: 하나의 소스 파일로 어느 JVM에서든 실행시킬 수 있는 목적 파일 생성 반 기계어인 바이트 코드로 목적 파일 생성(.class) Java의 실행 과정 Class Loader는 바이트 코드를 동적으로 JVM에 로딩하여 실행에 필요한 클래스를 Runtime Data Area에 로드 Execution에 의해 기계어로 해석되어 실행 Class Loader -
자바(Java) - Hello의 동작 원리
Hello.java의 3가지 중요한 부분 pulic class로 정의된 Hello 클래스 pulic class의 클래스 이름과 파일 이름은 같아야 한다.⭐⭐(대소문자 구분)⭐⭐ 클래스는 필드(Field)와 메소드(Method)를 가질 수 있다. 함수 ❌❌❌, 메소드이다. 프로그램이 실행하려면 반드시 가져야 하는 main 메소드 Java로 만든 프로그램이 실행되려면 위의 코드(Code)를 가지고 있어야 한다. (=프로그램 시작점) 큰따옴표를 제외하고 대문자로 시작하는 것은 클래스다. System.out은 System이 가지고 있는 out이라는 의미 out.println은 out이 가지고 있는 println이라는 의미 println 뒤에 괄호는 'print 메소드'라고 한다. out은 괄호가 없는데, 'out 필드'라고 한다. out이 가지고 있

JAVA 메모리 (Stack & Heap)
자바 프로그램이 실행되면 JVM(자바 가상 머신)은 OS로부터 메모리를 할당받고, 그 메모리를 용도에 따라서 여러 영역으로 나누어 관리를 한다. JVM의 메모리 공간(Runtime Data Area)은 Method(Static) 영역, Stack 영역, Heap 영역으로 구분되고 데이터 타입(자료형)에 따라 각 영역에 나눠서 할당 되게 된다. > 클래스로더 (Class Loader) : 자바는 동적으로 클래스를 읽어오므로, 프로그램이 실행 중인 런타임에서야 모든 코드가 자바 가상 머신과 연결된다. 이렇게 동적으로 클래스를 로딩해주는

[CS-JAVA] JVM(자바 가상 머신)
JVM이란 > Java Virtual Machine으로, 자바 가상 기계 자바 기술을 활용한 애플리케이션을 실행시키는 가상 기계를 뜻한다. 모든 자바 애플리케이션은 이 JVM위에서 동작한다. (*코틀린, 스칼라 등도 JVM위에서 실행된다.) JVM은 특정 OS에 맞게 자바 언어를 변환한다. 결국 특정 OS에 마주하는 것은 JVM이므로 , 자바는 운영체제에 독립적이고, JVM은 운영체제에 종속적이라고 할 수 있다. (다른 애플리케이션과 달리 자바는 JVM을 거쳐서 속도가 느리다고들 하지만, 요즘에는 기술이 발전하여 굳이 그렇지도 않다!) JVM의 등장배경 > 🤔 C/C++처럼 크로스 컴파일(타겟 플랫폼에 맟춰서 컴파일하는 것)해서 배포하면 되지 않을까?
[ WIL01 ]
JVM 이란?? Java Virtual Machine의 약자로 "자바를 실행하기 위한 가상 기계(컴퓨터)"라는 뜻입니다. Java 는 OS에 종속적이지 않다는 특징을 가지고 있는데 종속 받지 않고 실행하는 것이 바로 JVM입니다. \- 즉, OS에 종속받지 않고 CPU 가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터입니다. JVM 구성요소 > 자바컴파일러 \-내가 작성한 Java 코드들(.java 파일)은 CPU가 인식을 하지 못하므로 기계어로 컴파일을 해주어야 합니다. 그래서 운영체제가 읽을 수 있는 바이트 코드💬(.class 파일)로 변환 시켜주는 것이 Java compiler 입니다. 인터프리터 \- 운영체제가 읽은 바이

[JAVA] JVM (정의, 클래스 로드, 실행 엔진, 인터프리터, JIT 컴파일러)
JVM (Java Virtual Machine) 정의 OS와 애플리케이션 사이의 중개자 역할 JVM은 자바 바이트 코드를 해석하고 실행 JVM이 있다면 OS에 상관없이 JAVA 애플리케이션 실행 가능 > ### JVM 구성 > #### 1. Class Loader (클래스 로더) 요약 : 클래스 파일을 로드하고, 링크를 통해 배치을 수행하는 모듈 JVM내로 .class 파일을 로드 Runtime 시점에 클래스를 로딩 클래스의 인스턴스를 생성하면 메모리에 로드 > #### 2. Execution Engine (실행 엔진) 요약 : 로드된 클래스의 바이트 코드를 실행하는 런타임 모듈 클래스 로더를 통해 Runtime Data Ar