java分哪几部分_JVM 是由哪几部分组成的?

本文介绍了JVM的基本组成部分及其功能,包括类加载器、运行时数据区和执行引擎。阐述了不同部分如何协作来运行Java程序,并提供了一份根据Java SE 14虚拟机规范绘制的图表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JVM(Java virtual machine)java 虚拟机是java程序运行的基础。对于日常的开发工作来说,jvm是基本不用管的,程序只要编译没有问题就可以正常运行了。之前做web开发的时候,应用部署在两个tomcat中,当时还认为这两个tomcat运行在同一个jvm上。后来才认识到每个tomcat都运行在自己的jvm上,两个tomcat运行在两个jvm上,可以分别对这两个jvm进行调优。

jvm对于日常的开发,像一个黑盒,里面的东西基本接触不到。如果想要学习jvm,要从哪边下手比较好呢?个人觉得先弄清楚,jvm是由哪几部分组成,每个部分有什么用是个比较实用的方法。弄清楚了这个,就好比出门有了地图,对于周围的环境有了一个整体的认识,不容易迷路了。

那么怎么弄清楚jvm有哪几部分组成呢?当然网上有很多资料,有很多的博客文章,互相验证着看也是一个好方法。但是java最近版本更新的很快,现在最新的版本已经是jdk 14了,jvm是不是也有一些变化更新呢,有没有一份比较权威官方的资料呢?答案是有的。由oracle官方出品的java语言和虚拟机规范是这方面最权威的官方文档了。官网提供了html和pdf两种格式,需要的同学戳 这里。

下图是根据java SE 14虚拟机规范,和网上的博客文章,结合自己的理解所画。

如图蓝色填充所示,JVM可以分为3大部分:类加载器,运行时数据区和执行引擎。

类加载器负责加载字节码文件,即java编译后的 .class 文件。

运行时数据区负责存放.class 文件,分配内存。运行时数据区又分为5个部分:方法区:负责存放.class 文件,方法区里有一块区域是运行时常量池,用来存放程序的常量。

堆:分配给对象的内存空间。

方法区和堆是所有线程共享的内存空间。java虚拟机栈:每个线程独享的内存空间。

本地方法栈:本地native 方法独享的内存空间。

程序计数器:记录线程执行的位置,方便线程切换后再次执行。

java虚拟机栈,本地方法栈,程序计数器是每个线程独享的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值