`

JVM总结(1)JVM的整体架构

阅读更多

JVM整体架构图

概况来说,主要包含两个子系统和两个组件:Classloader(类加载器)子系统,Execution engine(执行引擎)子系统;Runtime data area(运行时数据区)组件,Native interface(本地方法接口)组件。

1.Classloader子系统的作用:
根据给定的全限定名类名来装载class文件的内容到runtime data area中的method area(运行时数据区)。开发人员可以通过继承java.lang.Classloader类来自定义类加载器。

2.Execution engine子系统的作用:
执行引擎子系统,执行classes中的指令。任何JVM specification实现(JDK)的核心是Execution engine。每一个运行中的线程都有一个Execution engine的实例。

3.Native Interface组件:
本地方法接口组件与native libraries交互,是其他编程语言交互的接口。

4.Runtime data area组件:
运行时数据区,就是JVM的内存。主要包括五个部分:
Heap(堆)、Method Area(方法区)、Java Stack(Java栈)、Program Counter(程序计数器),Native method stack(本地方法接口)。
其中,Heap和Method area是被所有线程共享使用;而Java stack,Program counter,native method stack是以线程为粒度的,每一个线程都有一份。
(1)Heap
Java程序在运行时创建的所有类或数组都放在同一个堆中。而一个java虚拟实例中只存在一个堆空间,因此所有的线程都共享这个堆。每一个java程序独占一个JVM实例,因而每一个java程序都有自己的堆空间,它们不会彼此干扰。但是同一个java程序的多个线程都共享一个堆空间,就得考虑多线程同步访问的问题。(这里可能出现的OOM异常:java.lang.OutOfMemoryError:Java heap space)

(2)Method Erea
在JVM中,被装载的class的信息存储在Method Erea方法区的内存中。当虚拟机装载某个类时,先用类加载定位相应的class文件,然后读入这些class文件并把这些文件的二进制流传输到JVM中。然后JVM提取其中的类型信息,并将这些信息存储到方法区。该类中的类(静态)变量同样也存储在方法区中。
和Heap一样,Method Erea也是多线程共享的,因此要考虑多线程访问同步的问题。(该区可能会出现的OOM异常有:java.lang.OutOfMemoryError:PermGen full)

(3)Java Stack
Java栈以帧为单位保持线程的运行状态。JVM只会对Java Stack执行两种操作:以帧为单位的压栈或出栈。每当线程调用一个方法的时候,就对当前状态做一个帧保存到java stack中(压栈);当一个方法返回调用时,从java.stack弹出一个帧(出栈)。帧的大小有一定的限制,所以有可能出现StackOverFlow的问题。

(4)Program counter
在一个运行中的Java程序中,每一个线程都有自己的PC寄存器,也是该线程启动时创建的。PC寄存器的内容总是指向下一条将被执行的“地址”,这里的“地址”可以是一个本地指针,也可以是在方法区中相对应于该方法起始指令的偏移量。

(5)Native method stack
在一个运行的Java程序中,可能还会用到一些根本地方法相关的数据区。当某个线程调用一个本地方法时,它就进入了一个全新的不受JVM控制的世界。本地方法可以通过本地方法接口来访问JVM的运行时数据区,同时还可以做n多事情,本地方法具有和JVM相同的能力和权限。(这里可能出现JVM无法控制的内存溢出OOM问题:native heap OutOfMemory)

======================================================================
声明:JVM总结系列文章,主要参考了《深入Java虚拟机》-周志明,这本书。博文中的内容相当于读书笔记,结合书籍、网络相关内容及个人理解,仅作为本人学习记录使用。如果对您有所帮助,那万分荣幸;不过有时间建议读作者的原著,另外有一本《Java分布式应用》--林昊,也涉及到了JVM的内容,同样推荐。对于直接摘录书中的片段,如果原作者有异议,可以联系我删除。(该声明适用于该系列文章,就不在接下来的几篇文章中写了)
======================================================================
  • 大小: 19.6 KB
分享到:
评论

相关推荐

    jvm 详细介绍,了解jvm各个组成部分和功能

    为了适应不同的操作系统和硬件平台,JVM 需要模拟一个简化的 CPU 架构,以支持各种指令的执行。在典型的 JVM 实现中,存在一个简单的 CPU 架构模型,包括以下几个主要部分: - **PC(Program Counter)**:程序...

    JVM虚拟机从入门到实战视频教程.zip

    010-JVM整体架构学习路线(1) 010-JVM整体架构学习路线 011-第二章-class文件结构课程简介 012-class文件的理解 013-class文件的格式 014-大小端模式(1) 014-大小端模式 015-class文件的数据结构 016-class文件基本...

    涨见识!JVM性能监控与调优实战 一线大厂大牛讲师的JVM优化案例与解决方案课程

    JVM性能监控与调优实战课程,作为整篇课程的重中之重,...而后篇则更加的注重实战和实操,对性能监控的实战部署和配置,有了更加深入的理解和教学,整体来说课程完全达到了架构师的内容级别,需要同学们好好学习掌握。

    JVM-整体结构原理深度解析

    JVM启动后,在操作系统层面表现为一个独立的进程,其内部架构包括以下几个关键组成部分: ##### 2.1 类装载器(ClassLoader) 类装载器负责加载Java类文件(.class文件)。这些文件包含特定的文件标识,并且仅负责...

    JVM_调优基础(中英文对照版)

    1. **JConsole**:内置在JDK中,可以直接连接到正在运行的JVM实例,查看内存使用情况、线程状态等信息。 2. **VisualVM**:提供图形化的界面,方便用户直观地了解JVM的状态,包括内存使用、CPU负载等。 3. **MAT...

    北航云计算公开课07 JVM Internal

    1. **指令集设计**:JVM有自己的指令集,用于解释或编译Java字节码。这包括数据处理、算术逻辑操作、控制流等指令。 2. **内存管理**:JVM需要实现堆内存和栈内存的管理,包括对象的创建、垃圾回收等机制。 3. **...

    JVM知识图谱.pdf

    ### JVM知识图谱详解 #### 一、JVM概述与讲师介绍 - **JVM**:Java Virtual Machine,是运行Java字节码的虚拟机环境。 - **讲师介绍**:本课程将由具有多年Java开发经验及JVM研究背景的专业讲师主讲。 #### 二、...

    java虚拟机简介 jvm介绍

    1. **指令集架构**:JVM的指令集非常精简,但足以支持Java语言的各种操作需求。例如,`iload`表示加载整型变量到寄存器,`anewarray`表示创建数组对象,`iand`表示执行整型按位与操作等。 2. **指令格式**:JVM指令...

    pact-jvm-master.zip_io.pactfoundation_master pact_pact_pact jvm_

    总结来说,Pact JVM 是一个高效且灵活的契约测试解决方案,它通过契约来促进服务间的协同开发,提升了微服务的测试覆盖率和整体质量。无论是在新项目还是已有项目的维护中,Pact JVM 都能发挥其独特的优势,为开发...

    面试必问之jvm与性能优化.pdf

    这种策略有助于减少内存占用,提高系统的整体性能。 **2. 类加载器** Java中的类加载器主要有以下几种: - **Bootstrap ClassLoader (启动类加载器)**:这是最顶层的类加载器,负责加载Java核心库(rt.jar),它是...

    JVM 入门到精通 Typora 版

    #### 三、JVM的整体结构 - **内存区域**: - 方法区:存储每个类的信息(包括类名、字段、方法数据等)。 - 堆:所有线程共享的内存区域,用于存储对象实例和数组。 - 虚拟机栈:线程私有的,用于存储局部变量、...

    nginx-upstream-jvm-route-0.1.tar.gz

    在现代Web应用架构中,负载均衡和高可用性是不可或缺的组成部分。Nginx作为一款高性能的反向代理服务器,常被用于处理HTTP和HTTPS请求,通过Upstream模块实现对后端服务器的负载均衡。而当我们的后端服务器选择...

    JVM基础原理

    #### JVM的整体架构 JVM的整体架构主要包括以下部分: - **ClassLoaderSystem**:负责加载类到JVM中,通过不同的类加载机制确保类的正确加载和隔离。 - **RuntimeDataArea**:存储运行时的数据,如方法区、堆、栈...

    Java分布式应用学习笔记02再谈JVM

    在分布式应用中,JVM集群是指多个JVM实例协同工作,共同处理任务的架构。这可以是物理上分布在不同服务器上的JVM,也可以是同一服务器上通过网络通信连接的多个JVM实例。JVM集群能够提供更高的可用性、负载均衡和...

    大数据笔记kafka-jvm.zip

    2. 性能调优实战:通过监控工具(如VisualVM、JConsole)分析JVM性能,结合Kafka的监控指标(如生产者和消费者速率、延迟等),进行整体性能优化。 六、案例分析 1. 实战示例:分享实际项目中Kafka与JVM协同工作的...

    MSB企业级JVM优化与性能调优课程 解读JVM内部机制-针对性解决企业架构优化问题

    ### MSB企业级JVM优化与性能调优课程解读 #### 一、JVM基础知识与原理 ##### 1.1 JVM内存结构 JVM(Java虚拟机)内存...这不仅对企业级应用的开发维护至关重要,也能够帮助企业节省大量的硬件成本,提高整体竞争力。

Global site tag (gtag.js) - Google Analytics