host92.log
host92.log

JVM(Java Virtual Machine)

jungwoo jo·2021년 8월 17일
Class Loader JVM Java heap java virtual machine method stack
0
post-thumbnail

일반적으로 개발자라면 자신이 사용하는 개발 언어에 대한 기본 개념과 특징, 사용 방법 등을 학습한다. 자바 개발자라면 JVM 기술 스택의 구조를 이해해야 한다고 생각한다. JVM 기술을 이해함으로서 더 좋은 소프트웨어를 개발할 수 있고 성능 이슈를 탐구할 때 필요한 이론적 배경지식을 갖추게 된다.

JVM

Java Virtual Machine(JVM)은 자바 바이트 코드를 실행하는 가상 머신이다. 바이트 코드는 .java 코드를 컴파일링하여 만들어진 .class 파일을 말한다.
JVM은 플랫폼(실행 환경)에 종속적이지만 구동되는 JVM이 있다면 자바 실행 파일은 어디서든 동작한다.

JVM 구조

java 명령어를 통해 자바 프로그램을 실행하면 OS는 가상 머신 프로세스(JVM)를 구동한다. 자바 가상 환경이 구성되고 사용자가 작성한 class 파일이 실행된다.

구동 과정에서 자바 애플리케이션의 진입점(entry point)은 class 파일에 있는 main() 메서드이다. 제어권을 main으로 넘기려면 가상 머신이 실행되기 전에 main 클래스를 로드 해야 한다. 이때 클래스 로더(Class Loader)가 관여한다. 따라서 자바 프로세스가 새로 초기화 된 이후 클래스 로더가 최소한의 필수 클래스(java.lang.Object, Class, Classloader, ...)들을 로드하고 컴파일된 자바 바이트코드를 런타임 데이터 영역(Runtime Data Area)에 로드하고, 실행 엔진(Execution Engine)이 자바 바이트 코드를 실행한다.

클래스 로더는 뒤에서 더 자세히 다루고 먼저 자바 메모리에 대해 설명한다.

JVM Runtime Data Area 구조

메서드 영역(method area)

  • 프로그램 실행 중 어떤 클래스가 사용되면(동적 로딩), JVM의 클래스 로더가 해당 클래스의 클래스 파일(.class)을 읽어서 분석하여 클래스에 대한 정보(클래스 데이터)를 이곳에 저장한다. 이때 클래스 별로 런타임 상수풀(runtime constant pool), 필드(field) 데이터, 메서드(method) 데이터, 메서드 코드, 생성자(constructor) 코드 등을 분류해서 저장한다. 메서드 영역은 JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역이다.

Runtime Constant Pool 에는 클래스별 상수 테이블이 존재하고 리터럴 값이 포함되어 있다.

힙(heap)

  • 프로그램 실행 중 생성되는 객체와 배열은 모두 이곳에 생성된다. 힙 영역에 생성된 객체와 배열은 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조한다. 참조하는 변수나 필드가 없다면 의미 없는 객체가 되어 이것을 쓰레기로 취급하고 JVM은 CG(Garbage Collector)를 실행시켜 쓰레기 객체를 힙 영역에서 자동으로 제거한다.

호출스택(call stack 또는 execution stack)

  • JVM 스택 영역은 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당된다. 자바 프로그램에서 추가적으로 스레드를 생성하지 않았다면 main 스레드만 존재하므로 JVM 스택도 하나이다. JVM의 호출 스택은 메서드가 호출될 때 호출된 메서드를 위한 메모리가 할당되며, 이 메모리는 메서드가 작업을 수행하는 동안 지역변수(매개변수 포함)들과 연산의 중간 결과 등을 저장하는데 사용된다. 그리고 메서드가 작업을 마치면 할당되었던 메모리 공간(런타임 스택)은 반환되어 비워진다.

PC(Program Counter) 레지스터

  • 스레드마다 스레드 내 현재 실행할 instruction의 위치를 가리키는 포인터가 생성된다.

네이티브 메서드(native method)

  • 자바 외의 언어로 작성된 네이티브 코드를 위한 스택이다. 즉, JNI(Java Native Interface)를 통해 호출하는 C/C++ 등의 코드를 수행하기 위한 스택으로 스레드마다 언어에 맞게 C 스택이나 C++ 스택이 생성된다.

이 글은 자바 언어에 대한 기본기를 다지기 위해 작성하는 글입니다.
글에서 잘못되거나 추가되어야 하는 내용 관련 사항은 jungwoo5759@gmail.com 로 공유해주시면 감사하겠습니다.
해당 글을 참고하시거나 퍼가실 때는 출처 링크 부탁드립니다!

  • 참고
    • JVM Internal
    • HowToDoInJava - Java JDK, JRE and JVM
    • 인프런 강의(더 자바, 코드를 조작하는 다양한 방법 - 백기선)
    • 이것이 자바다 - 신용권의 Java 프로그래밍 정복
    • 자바의 정석 책 3rd Edition
profile
jungwoo jo
개발이 즐거운 사람
이전 포스트

자바 기본기 다지기 - 연산자, 조건문, 반복문

다음 포스트

자바 기본기 다지기 - 객체 지향 O.O!

0개의 댓글

深圳SEO优化公司衢州网站优化按天计费公司黔西南网站优化按天收费公司上海外贸网站制作公司鄂州网站推广方案多少钱厦门网站seo优化公司韶关关键词按天扣费公司内江SEO按天扣费价格遂宁至尊标王价格三明百度竞价包年推广推荐长治网站改版多少钱宜昌百姓网标王推荐宜春网站优化按天计费价格曲靖网站推广方案公司赤峰网站改版哪家好淮安seo优化报价大丰网站改版推荐广州网站优化推广公司临猗百度关键词包年推广报价上饶网络营销多少钱诸城SEO按天扣费巴中模板推广报价绥化百度seo公司莆田关键词按天扣费推荐桐城网络广告推广郴州seo公司许昌seo网站推广哪家好通辽seo网站推广推荐江门网站搭建价格昭通seo网站推广价格双龙百搜标王多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化