`

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虚拟机从入门到实战视频教程.zip

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

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

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

    挑战高薪-JVM深入详解

    本套视频课程,依据JVM的内存结构,对JVM的整体架构进行了详细的讲解。学完本套课程,相信同学会对JVM整体乃至细节部分会有很深的理解。提高大厂面试通过率,提升自身核心竞争力。 课程目录 课程资料丰富: ????...

    java虚拟机规范高清中文版本(java SE 8版本)

    第2章:概览Java虚拟机整体架构; 第3章:介绍如何将Java语言编写的程序转换为虚拟机指令集; 第4章:定义class文件格式。它是一种与硬件和操作系统无关的二进制格式,用来表示编译后的类和接口; 第5章:定义了...

    Java高并发高性能分布式框架从无到有微服务架构设计.doc

    有Ehcache 3.x、MapDB实现分布式缓存 进程内缓存和磁盘缓存,在多JVM实例的情况下,会存在两个问题: 1、单机容量问题; 2、数据一致性问题(多台JVM实例的缓存数据不一致怎么办?),这个问题不用纠结, 既然数据...

    java 面试题 总结

    1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括...

    Hadoop实战中文版.PDF

    1296.3.3 使用压缩 1296.3.4 重用JVM 1326.3.5 根据猜测执行来运行 1326.3.6 代码重构与算法重写 1336.4 小结 134第7章 细则手册 1357.1 向任务传递作业定制的参数 1357.2 探查任务特定信息 1377.3...

    【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识.rar

    对于 Java 初学者来说: 本文档倾向于给你提供一个比较详细的学习路径,让你对于Java整体的知识体系有一个初步认识。另外,本文的一些文章 也是你学习和复习 Java 知识不错的实践; 对于非 Java 初学者来说: 本文档...

    美团.2021最新面经.pdf.zip

    1、将最近做的两个项⽬详细讲解 + 现场画出整体系统架构图并结合架构图讲解+ 设计模式 类图我是拿了㇐张纸,画出来然后对着电脑屏幕开讲,这⾯试画⻛可以想象㇐下哈,⾯试官隔着 屏幕看。 2、因聊的项⽬时间⽐较⻓,...

    Java及大数据学习路线.pdf

    异步数据传输框架Ajax ⽂件的上传下载 1.3JavaEE框架 系统整体分层解耦框架spring 轻量级Web框架springmvc 轻量级持久层框架mybatis 服务器操作系统Linux 内存数据库Redis 项⽬架构、jar包管理⼯具Maven 1.4JavaEE⾼...

    Java并发编程的艺术_非扫描

    读者对象·Java开发工程师·架构师·并发编程爱好者·开设相关课程的大专院校师生如何阅读本书阅读本书之前,你必须有一定的Java基础和开发经验,最好还有一定的并发编程基础。如果你是一名并发编程初学者,建议按照...

    Java虚拟机规范<<Java SE 8>>pdf

    本书完整而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而深入的分析,深刻揭示Java虚拟机的工作原理。...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    面试的整体流程.mp4 │ Java面试题02.java的垮平台原理.mp4 │ Java面试题03.搭建一个java的开发环境.mp4 │ Java面试题04.java中int占几个字节.mp4 │ Java面试题05.java面向对象的特征.mp4 │ Java面试题06.装箱和...

    Java虚拟机规范 Java SE 8版-带目录-pdf

    Java虚拟机规范 Java SE 8版-带目录-pdf,本书完整而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而深入的分析...

    java8源码-javaGuide:【Java学习】一份涵盖大部分Java程序员所需要掌握的核心知识。https://javaguide.cn

    java8 源码 目录 Java 基础 容器 并发 JVM I/O Java ...架构 ...总结(---正在进行中---) 数据结构总结重构(---正在进行中---) ...本文档倾向于给你提供一个比较详细的学习路径,让你对于Java整体的知识体系有一个初步认识

    java8源码-javaGuide:java面试整理

    java8 源码 目录 Java 基础 容器 并发 JVM I/O Java ...架构 ...总结(---正在进行中---) 数据结构总结重构(---正在进行中---) ...本文档倾向于给你提供一个比较详细的学习路径,让你对于Java整体的知识体系有一个初步认识

    大数据测试——精选推荐.pdf

    验证⽆数据损坏 架构测试 架构测试 Hadoop处理海量数据是⾮常的消耗资源的,良好的架构是确保⼤数据项⽬成功的基础。糟糕的涉及会导致性能急剧的下降,进⽽使得系统⽆法满⾜我们的需 要,因此我们需要,或是说⾄少...

    Java虚拟机规范

    《Java虚拟机规范(Java SE 8版)英文版》全面而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而深入的分析,...

    Java虚拟机规范.Java SE 8版

    第2章概述Java虚拟机的整体架构,包括class文件格式、数据类型、原始类型、引用类型、运行时数据区、栈帧、浮点算法、异常等,这对理解本书后面的内容有重要帮助;第3章详述如何将Java语言编写的程序转换为Java...

Global site tag (gtag.js) - Google Analytics