【搞定JVM】开篇:JVM介绍与知识脉络梳理

转发自:https://blog.csdn.net/a724888/article/details/77992936

前言:

JVM(Java Virtual Machine):Java 虚拟机是整个 java 平台的基石,是 java 系统实现硬件无关与操作系统无关的关键部分,是保障用户机器免于恶意代码损害的屏障。Java开发人员不需要了解JVM是如何工作的,**但是,**了解 JVM 有助于我们更好的开(通)发(过) java(公司) 程(面)序(试)。

 写这篇文章的目的:

  • 总结所学的 JVM 知识
  • 帮助想了解 JVM 的朋友,知无不言,言无不尽

本篇文章将会介绍一下内容:

一、什么是JVM

二、JVM用来做什么事情

三、JVM生命周期

四、JVM的整体架构

五、文章推荐


一、什么是JVM

要想说明白什么 JVM 就不得不提另外两个概念,JRE 和 JDK,初学者总是把这几个概念搞混。

Jvm,Jre,Jdk 都是 java 语言的支柱,他们分工协作。但不同的是 Jdk 和 Jre 是真实存在的,而 Jvm 是一个抽象的概念,并不真实存在。

JDK:
        JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。JDK 物理存在,是 programming tools、JRE 和 JVM 的一个集合。如下图所示:

JRE:

        JRE(Java Runtime Environment)Java 运行时环境,JRE 物理存在,主要由Java API 和 JVM 组成,提供了用于执行 java 应用程序最低要求的环境。

Jvm:

JVM(Java Virtual Machine) 是一种软件实现,执行像物理机程序的机器(即电脑)。
本来,Java被设计基于从物理机器分离实现WORA( 写一次,随处运行 )的虚拟机上运行,虽然这个目标已经几乎被遗忘。
JVM 并不是专为 Java 所实现的运行时,实际上只要有其他编程语言的编译器能生成正确 Java bytecode 文件,则这个语言也能实现在JVM上运行。
因此,JVM 通过执行 Java bytecode 可以使 java 代码在不改变的情况下运行在各种硬件之上。

JVM 有如下特点:

(1)基于堆栈的虚拟机 :最流行的计算机体系结构,如英特尔X86架构和ARM架构上运行基于寄存器 。 但是,JVM是基于栈的;

(2)符号引用 :除了基本类型以外的数据(类和接口)都是通过符号来引用,而不是通过显式地使用内存地址来引用;

(3)垃圾收集 :一个类的实例是由用户明确创建的代码和垃圾回收自动销毁;

(4)通过明确界定的基本数据类型的保证平台的独立性 :传统的语言,如C / C ++根据平台有不同的int型的大小。 JVM中明确规定了基本数据类型,以保持它的兼容性和保证平台的独立性;

(5)网络字节顺序 :Java class文件用网络字节码顺序来进行存储:为了保证和小端的Intel x86架构以及大端的RISC系列的架构保持无关性,JVM使用用于网络传输的网络字节顺序,也就是大端。

**Java bytecode **
为了实现WORA,JVM使用Java字节码,java(用户语言)和机器语言之间的中间语言。
该Java字节码是部署Java代码的最小单位。


二、JVM用来做什么事情

基于安全方面考虑,JVM 要求在 class 文件中使用许多强制性的语法和机构化约束,但任意一门功能性语言都可以表示为一个能被 JVM 接受的有效的 class 文件。作为一个通用的、机器无关的执行平台,任何其他语言的实现者都可将 JVM 当作他的语言产品交付媒介。

JVM 中执行以下操作:

  • 加载代码
  • 验证代码
  • 执行代码
  • 提供运行环境

JVM 提供定义了:

  • 存储区
  • 类文件格式
  • 寄存器组
  • 垃圾回收堆
  • 致命错误报告等

三、JVM生命周期

  • 启动:任何一个拥有main函数的class都可以作为JVM实例运行的起点
  • 运行:main函数为起点,程序中的其他线程均有它启动,包括daemon守护线程和non-daemon普通线程。daemon是JVM自己使用的线程比如GC线程,main方法的初始线程是non-daemon。
  • 消亡:所有线程终止时,JVM实例结束生命。

四、JVM的整体架构

先看一下Java代码的执行过程:

五、文章推荐

1、Jvm系列(一):java类的加载机制

第一篇文章讲的是Java类的加载机制,也是我在博客园最收欢迎的Jvm文章,读完之后你会了解什么是类加载器、类加载机制、双亲委派模型等内容。

2、Jvm系列(二):JVM内存结构

这篇文章描述了Java虚拟机的内存结构,内存每个区域作用,如何通过参数对各个区域进行控制。

3、Jvm系列(三):GC算法 垃圾收集器

讲述了Jvm垃圾回收的经典算法,以及各种垃圾回收机制,对象存活判断等。

4、Jvm系列(四):jvm调优-命令篇

这篇文章讲述了如何通过Jvm命令去调优,各Jvm命令使用方法。

5、Jvm系列(五):Java GC分析

这是非常有名的一张图,简单明了展示了GC日志的构成

文章介绍如何分析GC日志来诊断Java项目的运行状态,GC分析是生产调优的重要手段之一。

6、Jvm系列(六):Java服务GC参数调优案例

一名网友根据GC日志,进行Jvm调优的经典案例

7、Jvm系列(七):jvm调优-工具篇

介绍了Jvm调优各种工具的使用

8、Jvm系列(八):jvm知识点总览

如何你只是想通过面试,其实只要看一篇就够了,这篇文章将Jvm中的关键知识点进行了汇总。

9、Jvm系列(九):如何优化Java GC

翻译自国外的一篇Java GC文章,文章详细描述几种GC调优的方式,值得借鉴。

10、Jvm系列(十):教你如何成为Java的OOM Killer

也是线上一场线上Jvm实战调优的经历,看着挺爽。

11、Jvm系列(十一):Java 8-从持久代到metaspace

Java 8 Jvm内存变化。

12、Jvm系列(十二):Java 8的新特性—终极版

杜琪翻译的 Java 8 的新特性。

13、一个脚本引发的血案

我们曾经线上出现事故后,定位分析的经历,结局出乎意料。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值