1. JVM体系结构概述

一、 JVM的位置

    JVM是运行在操作系统之上的,与硬件没有直接的交互,但是可以调用底层的硬件,用JIN (Java本地接口调用底层硬件接口,了解下就好,已经过时了)

二、JVM体系结构概览

1. 类装载器ClassLoader (4个知识点,①概念,②种类(3种系统自带,1种自定义),③双亲委派机制,④沙箱安全机制)

1.1 类装载器的概念
        负责加载class文件,class文件 ** 在文件开头有特定的文件标识 ** ,将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。  

    解释:Car.class  是由 .java 文件 经过编译而得来的 .class文件,存在本地磁盘  

            ClassLoader: 类转载器,作用就是加载并初始化 .class文件 ,得到真正的 Class 类,即模板  (此处不明白则带着疑问继续往下看,为什么叫模板)

            Car Class : 由 Car.class 字节码文件,通过ClassLoader 加载并初始化而得,那么此时 这个 Car 就是当前类的模板,这个Car Class 模板就存在 【方法区】

            car1,car2,car3 : 是由Car模板经过实例化而得,即 new出来的 --> Car car1 = new Car() , Car car2 = new Car() ,Car car3 = new Car() , 因此可知,由一个模板,可以得到多个实例对象,即模板一个,实例多个
            所以,拿car1举例,car1.getClass 可以得到其模板Car 类,Car.getClassLoader() 可得到其装载器  
1.2 类装载器的种类
    1.2.1 虚拟机自带的加载器
        ①  启动类加载器 也叫根加载器 (Bootstrap)  ,由C++编写  ,程序中自带的类, 存储在$JAVAHOME/jre/lib/rt.jar中,如object类等
        ②  扩展类加载器 (Extension)  ,Java 编写 ,在我们平时看到的类路径中,凡是以javax 开头的,都是拓展包,存储在$JAVAHOME/jre/lib/ext/*.jar 中
        ③  应用程序类加载器  (AppClassLoader),即平时程序中自定义的类  new出来的  

        Java也叫系统类加载器,加载当前应用的classpath的所有的类

    1.2.2 用户自定义加载器
        Java.lang.ClassLoader的子类,用户可以定制类的加载方式,即如果你的程序有特殊的需求,你也可以自定义你的类加载器的加载方式 ,进入ClassLoader的源码,其为抽象类,因此在你定制化开发的时候,需要你定义自己的加载器类来继承ClassLoader抽象类即可,即 MyClassLoader extends ClassLoader

    所以,Java 的类的加载机制,永远是从 启动类加载器 -->  拓展类加载器  --> 应用程序类加载器  这样的一个顺序进行加载
1.3 类装载器的双亲委派机制
      先举一个栗子,来说明下啥叫双亲委派,比如 有一个类叫 A.java  ,当要使用A类时,类加载器要先去 启动类加载器(Bootstrap)中去找,如果找到就使用启动类加载器中的A类,不继续往下执行,但是如果找不到,则依次下放,去 拓展类加载器 中找,同理找到就用,找不到就继续下放,再去 应用程序类加载器中找,找到就用,此时找不到就会报classNotFund Exception的异常。 

    概念:
        当一个类收到类加载请求,它首先不会尝试自己去加载这个类,而是先把这个请求委派给父类去完成,每一个层次类加载器都是如此,因此所有的类加载请求都是应该传到启动类加载器中的,只有当其父类加载器自己无法完成这个请求的时候(在他的加载路径下没有找到所需加载的Class),子类加载器才会尝试自己去加载。

    采用双亲委派的一个好处就是比如加载位于rt.jar包中的类java.lang.Object,不管是哪个加载器加载这个类,最终都是会委托给顶层的启动类加载器进行加载,这样就保证了使用不同的类加载器最终得到的都是同一个Object对象。
1.3 类装载器沙箱安全机制
       通过双亲委派机制,类的加载永远都是从 启动类加载器开始,依次下放,保证你所写的代码,不会污染Java自带的源代码,所以出现了双亲委派机制,保证了沙箱安全

Execution Engine 执行引擎负责解释命令,提交操作系统执行。

原文地址:https://www.cnblogs.com/zongheng14/p/12041005.html

时间: 2024-08-01 19:06:00

1. JVM体系结构概述的相关文章

JVM体系结构概述(一)

一.app.java程序运行具体的流程 假设我们现在有app.java这个程序要运行,那么具体的流程到底是怎么样的呢? 我们会先运行 javac app.java, 然后这个程序会被编译,产生了app.class这个file,然后我们会用java app去执行整个程序.下面几幅图解释了这背后发生的事. 步骤一: 这是一个简化的流程:class loader先将开发者编译的app.class和基本的.class文件load到RAM里面,这过程也load了其它基本的.class文件: 比如说,Str

46张PPT讲述JVM体系结构、GC算法和调优

本PPT从JVM体系结构概述.GC算法.Hotspot内存管理.Hotspot垃圾回收器.调优和监控工具六大方面进行讲述.(内嵌iframe,建议使用电脑浏览) 好东西当然要分享,PPT已上传至Github(点此下载),另外良心推荐阅读<深入理解Java虚拟机JVM高级特性与最佳实践.pdf>(点此下载).

大数据技术之_30_JVM学习_01_JVM 位置+JVM 体系结构概览+堆体系结构概述+堆参数调优入门+JVM 的配置和优化+Tomcat 的配置和优化

1.JVM 位置2.JVM 体系结构概览3.堆体系结构概述4.堆参数调优入门5.JVM 的配置和优化6.Tomcat 的配置和优化 熟悉 JVM 架构与 GC 垃圾回收机制以及相应的 JVM 调优,有过在 Linux 系统下的调优经验. 淘宝的周志明<深入理解 Java 虚拟机>中说 JVM 的优化,其中 99% 优化的是堆,1% 优化的是方法区. 内地女歌手照片--李嘉欣,贴在桌面上. 1.JVM 位置 JVM 是运行在操作系统之上的,它与硬件没有直接的交互 2.JVM 体系结构概览 详解如

[转帖]Java虚拟机(JVM)体系结构概述及各种性能参数优化总结

Java虚拟机(JVM)体系结构概述及各种性能参数优化总结 2014年09月11日 23:05:27 zhongwen7710 阅读数 1437 标签: JVM调优jvm 更多 个人分类: Java知识点总结技术架构原理 https://blog.csdn.net/zhongwen7710/article/details/39213377 写的很好.. 堆栈分不清楚的我 愧对计算机系毕业.. 第一部分:相关的概念 数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变

Java虚拟机(JVM)概述

JVM(Java虚拟机)是一个抽象的计算模型.就如同一台真实的机器,它有自己的指令集和执行引擎,可以在运行时操控内存区域.目的是为构建在其上运行的应用程序提供一个运行环境.JVM可以解读指令代码并与底层进行交互:包括操作系统平台和执行指令并管理资源的硬件体系结构.本文主要对JVM进行概述,并介绍Java程序是如何在上面执行的. 虚拟机 从本质上讲,虚拟机是个被构建来提供特定或通用目的服务环境的非实体计算机.这听起来像是一个仿真器,用来仿真机器未配置或不能按要求执行任务的硬件组件.因此,我们要做的

第七章 JVM体系结构与工作方式

JVM能跨计算机体系结构来执行Java字节码,主要是由于JVM屏蔽了与各个计算机平台的软件和硬件之间的差异. 7.1 JVM体系结构 7.1.1 何谓JVM 模拟一个计算机来达到一个计算机所具有的计算功能. 以计算为中心来看计算机的体系结构可以分为如下几个部分. 指令集    计算机能识别的机器语言的命令集合. 计算单元  能够识别并且控制指令执行的功能模块. 寻址方式  地址的位数,最小地址和最大地址范围,以及地址的运行规则. 寄存器定义 包括操作数寄存器,变址寄存器,控制寄存器等的定义,数量

JVM解读:JVM体系结构

JVM全称是java Virtual Machine(java虚拟机),JVM屏蔽了与各个计算机平台相关的软件和硬件差异 在接下来的日子里,我要通过写博客的形式学习JVM,让自己更懂得Java 本系列文章是对<深入分析javaweb技术内幕>和<深入理解java虚拟机>的总结,欢迎大家一起吐槽,一起进步 本文是<JVM解读>的第一篇:JVM体系结构 JVM体系结构 JVM的基本组成 (1)指令集:JVM指令集 (2)类加载器:在jvm启动时或者类在运行时将需要的clas

转:用C++实现的一种插件体系结构-----概述

用C++实现的一种插件体系结构-----概述 本文讨论一种简单却有效的插件体系结构,它使用C++,动态链接库,基于面向对象编程的思想.首先来看一下使用插件机制能给我们带来哪些方面的好处,从而在适当时候合理的选择使用.1, 增强代码的透明度与一致性:因为插件通常会封装第三方类库或是其他人编写的代码,需要清晰地定义出接口,用清晰一致的接口来面对所有事情.你的代码也不会被转换程序或是库的特殊定制需求弄得乱七糟.2, 改善工程的模块化:你的代码被清析地分成多个独立的模块,可以把它们安置在子工程中的文件组

C#学习笔记 ----.NET体系结构概述

Microsoft 中间语言 Microsoft Intermediate Language MSIL简称 IL SDK 软件开发工具包 Software Development Kit IDE 集成开发环境 Integrated Development Environment .NET Framework 的核心 是运行库执行环境,称为公共语言运行库(CLR)或.NET运行库. 在.NET中,编译分为俩个阶段: (1) 把源代码编译为Microsoft 中间语言(IL) (2) CLR把IL编