什么是jvm虚拟机

本文介绍了JVM的起源和作用,强调了它的跨平台特性。通过类比吃饭的过程,解释了JVM的四个核心子系统:类加载器、运行时数据区域、执行引擎和垃圾收集器如何协同工作,确保Java程序的执行和内存管理。后续章节将详细探讨每个子系统。

最近看了一段时间jdk源码,在看源码的过程中对数据的存储不是很清楚,当时就在想数据到底存在哪里去了?以前只是看博客什么的对jvm有一个大概的了解,但是没有深入研究。经过一段时间的研究<<深入理解java虚拟机后>>,才决定写一些关于jvm的文章,不为别的只为了同为技术的程序员们少走一些弯路,因为这本书第一遍读起来晦涩难懂,我也是查阅了大量的资料才渐渐的理解了什么意思。同时也为了留下自己的脚印,以后几十年后能够看到我在这一年没有荒废时间还在努力的研究技术,估计那时候会欣慰的一笑吧。
1 jvm怎么来的
还记得上的java第一趟课吗?老师怎么说的。。。java是面向对象的语言,而且它是跨平台的。这个跨平台是什么意思?
我们的计算机只认识0 或者 1,我们不管用什么语言写的程序都要经过编译器编译成 0 或者1 组成的2机制文件才能被机器认识,程序才能执行。现在也是这样子,但是我们的程序是运行在机器上,机器是有操作系统的也是有机器指令的,面对不同的厂家不同操作系统我们都需要根据具体的需求 进行编译,这样子做了太多的重复性工作。所以‘与平台无关性’这一理想就出现了,在这种理想下虚拟机也就应运而生。
而且虚拟机跟java一点关系都没有,只不过java是在虚拟机上运行而已。更准确的说任何语言之言编译成.class文件都能在虚拟机上运行。

这里写图片描述

不管什么语言只要编译成class文件,都能做到一次编译处处运行。

1 jvm是什么?
我想大家学java的时候第一课一

### JVM 虚拟机栈的概念和作用 #### 1. JVM 虚拟机栈的定义 JVM 虚拟机栈是 Java 虚拟机中用于存储方法执行时相关数据结构的一部分内存区域。每个线程在创建时都会分配一个虚拟机栈,其生命周期与线程一致[^3]。虚拟机栈由多个栈帧(Stack Frame)组成,每个栈帧对应一次方法调用。 #### 2. 栈帧的组成 栈帧是虚拟机栈的基本组成部分,它包含以下内容: - **局部变量表**:用于存储方法中的局部变量,包括基本数据类型、对象引用等[^4]。 - **操作数栈**:用于存储常量和对象地址,是方法执行过程中临时数据存放的地方[^4]。 - **动态链接**:负责解析方法内调用其他方法的名字,并将其映射为具体的一段代码。 - **方法出口**:用于在方法执行完毕后返回到线程的具体位置[^4]。 #### 3. JVM 虚拟机栈的作用 JVM 虚拟机栈的主要作用是支持方法的执行,包括以下几个方面: - **存储方法执行过程中的局部变量**:通过局部变量表保存方法内的变量信息。 - **提供方法调用和返回的支持**:通过栈帧实现方法的调用和返回逻辑[^4]。 - **管理线程的执行状态**:每个线程拥有独立的虚拟机栈,确保线程之间的隔离性[^3]。 #### 4. 异常处理 JVM 规范定义了两种常见的异常情况: - 如果线程请求分配的栈容量超过虚拟机栈允许的最大容量,则抛出 `StackOverflowError` 异常[^2]。 - 如果虚拟机栈可以动态扩展,但在尝试扩展时无法申请到足够的内存,或者在创建新线程时没有足够的内存来创建对应的虚拟机栈,则抛出 `OutOfMemoryError` 异常[^2]。 #### 5. 示例代码 以下是一个简单的 Java 方法调用示例,展示了虚拟机栈的工作原理: ```java public class Example { private int num = 0; public void methodA() { System.out.println("methodA()"); methodB(); } public void methodB() { System.out.println("methodB()"); num++; } public static void main(String[] args) { Example example = new Example(); example.methodA(); } } ``` 在上述代码中: - 当调用 `methodA()` 时,会创建一个新的栈帧,其中包含局部变量表、操作数栈等。 - 在 `methodA()` 内部调用 `methodB()` 时,又会创建一个新的栈帧,压入虚拟机栈中。 - 方法执行完毕后,栈帧被弹出,控制权返回到上一层方法。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

添码星空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值