首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
图解JVM的类加载机制(详细版)
】的更多相关文章
图解JVM的类加载机制(详细版)
注:本文为作者整理和原创,如有转载,请注明出处. 上一篇博文,把JAVA中的Class文件格式用图形的方式画了一下,逻辑感觉清晰多了,同时,也为以后查阅的方便. Class文件只是一种静态格式的二进制流,它只有被虚拟机加载进内存解析之后才会生成真正的运行时的结构,因此,搞清楚类加载机制不但有助于我们加深理解Class文件中各个字段的含义,同时也有利于我们更深入的了解JAVA代码背后的暗流涌动.比如new关键字背后,虚拟机都做了什么?JAVA中的哪些操作会真正导致类被加载?哪些操作又会导致类被初始…
图解JVM的Class文件格式(详细版)
了解JAVA的Class文件结构有助于掌握JAVA语言的底层运行机制,我在学习的过程中会不断的与ELF文件格式作对比(当然他们的复杂程度.格式相去甚远,比如可执行ELF的符号表解析在静态链接阶段已经完成(除了动态链接库是在动态链接阶段完成),而Class的符号解析都是在类加载后动态完成的),由于在以前学习的时候发现网上关于Class文件结构的图都不是很详细,而我是一个喜欢图示的人,所以就自己动手画了一个(其中大部分图标来自<<深入理解JAVA虚拟机第二版>>),图片很大…
面试必问:JVM类加载机制详细解析
前言 在Java面试中,简历上有写JVM(Java虚拟机)相关的东西,JVM的类加载机制基本是面试必问的知识点. 类的加载和卸载 JVM是虚拟机的一种,它的指令集语言是字节码,字节码构成的文件是class文件.平常我们写的Java文件,需要编译为class文件才能交给JVM运行.可以这么说:C语言代码——>二进制文件——>计算机硬件,就相当于Java代码——>字节码文件——>JVM.JVM将指定的class文件读取到内存里,并运行该class文件里的Java程序的过程,就称之为类的…
JVM内存结构 JVM的类加载机制
JVM内存结构: 1.java虚拟机栈:存放的是对象的引用(指针)和局部变量 2.程序计数器:每个线程都有一个程序计数器,跟踪代码运行到哪个位置了 3.堆:对象.数组 4.方法区:字节流(字节码文件)所代表的静态存储结构转换为方法区的运行时数据结构 5.常量池:String(字符串常量) JVM的类加载机制:双亲委派模型 启动类加载器(Bootstrap ClassLoader):主要负责加载JDK\jre\lib目录中并且能被虚拟机识别的类库到JVM内存中. 扩展类加载器(Exte…
JVM之类加载机制
JVM之类加载机制 JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程. 类加载五部分 加载 加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的入口.注意这里不一定非得要从一个Class文件获取,这里既可以从ZIP包中读取(比如从jar包和war包中读取),也可以在运行时计算生成(动态代理),也可以由其它文件生成(比如将JSP文件转换成对应的Class类). 验证 这一阶…
JVM的类加载机制全面解析
什么是类加载机制 JVM把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被JVM直接使用的Java类型,这就是JVM的类加载机制. 如果你对Class文件的结构还不熟悉,可以参考之前的文章Class文件结构全面解析(上)和Class文件结构全面解析(下). 欢迎关注微信公众号:万猫学社,每周一分享Java技术干货. 类的生命周期 类从被加载到内存中,到被卸载出内存,一共分为以下几步: 加载(Loading) 验证(Verification) 准备(Pre…
大白话谈JVM的类加载机制
前言 我们很多小伙伴平时都是做JAVA开发的,那么作为一名合格的工程师,你是否有仔细的思考过JVM的运行原理呢. 如果懂得了JVM的运行原理和内存模型,像是一些JVM调优.垃圾回收机制等等的问题我们才能有一个更清晰的概念. 为了走进JVM,深入了解底层,王子打算写一个JVM的专题,留下自己对JVM探索的足迹,同时也希望能帮到小伙伴们更好的理解JVM. 那我们开始吧. JAVA代码的运行流程 首先我们就来聊一聊JAVA代码是怎么运行起来的,这部分比较基础相信大家都知道,就当成是个复习吧. 我们编写…
一文教你读懂JVM的类加载机制
Java运行程序又被称为WORA(Write Once Run Anywhere,在任何地方运行只需写入一次),意味着我们程序员小哥哥可以在任何一个系统上开发Java程序,但是却可以在所有系统上畅通运行,无需任何调整,大家都知道这是JVM的功劳,但具体是JVM的哪个模块或者什么机制实现这一功能呢? JVM(Java Virtual Machine, Java虚拟机)作为运行java程序的运行时引擎,也是JRE(Java Runtime Environment, Java运行时环境)的一部分. 说…
【JVM】类加载机制
原文:[深入Java虚拟机]之四:类加载机制 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载.验证.准备.解析.初始化.使用和卸载七个阶段.它们开始的顺序如下图所示: 类加载的过程包括了加载.链接.初始化三个阶段.链接包括验证.准备.解析三个部分. 在这五个阶段中,加载.验证.准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持java语言的运行时绑定(也成为动态绑定或晚期绑定).另外注意这里的几个阶段是按…
深入理解JVM(3)——类加载机制
1.类加载时机 类的整个生命周期包括了:加载( Loading ).验证( Verification ).准备( Preparation ).解析( Resolution ).初始化( Initialization ).使用( Using )和卸载( Unloading )七个阶段.其中验证.准备和解析三个部分统称为连接( Linking ),这七个阶段的发生顺序如下图. 上图中,加载.验证.准备.初始化和卸载这五个阶段的顺序是确定的,类的加载过程必须按照这种顺序开始.但解析阶段不一定:它在某些…
JVM学习——类加载机制(学习过程)
JVM--类加载机制 2020年02月07日14:49:19-开始学习JVM(Class Loader) 类加载机制 类加载器深入解析与阶段分解 在Java代码中,类型的加载.连接与初始化过程中都是在程序 运行期间完成的. 提供了大量的灵活性.增加了更多的可能性. Java虚拟机与程序的生命周期. 在如下几种情况下,Java虚拟机将结束生命周期 执行了System.exit()方法 程序正常执行结束 程序在执行过程中遇到了异常或错误而异常终止 由于操作系统出现错误而导致Java虚拟机进程终止 上…
JVM的类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 类加载的过程: 包括加载.链接(含验证.准备.解析).初始化 如下图所示: 1.加载: 类加载指的是将类的class文件读入内存,并为之创建一个java.lang.Class对象,作为方法区这个类的数据访问的入口. 也就是说,当程序中使用任何类时,系统都会为之建立一个java.lang.Class对象.具体包括以下三个部分: (1)通过类的全…
(转) JVM——Java类加载机制总结
背景:对java类的加载机制,一直都是模糊的理解,这篇文章看下来清晰易懂. 转载:http://blog.csdn.net/seu_calvin/article/details/52301541 1. 类加载器的组织结构 类加载器 ClassLoader是具有层次结构的,也就是父子关系.其中,Bootstrap是所有类加载器的父亲. (1)Bootstrapclass loader: 启动类加载器 当运行Java虚拟机时,这个类加载器被创建,它负责加载虚拟机的核心类库,如java.lang.*等…
JVM虚拟机—JVM的类加载机制
1 什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并向程序员提供了访问方法区内的数据结构的接口. 2 类的生命周期 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading).验证(Verification).准备(Pre…
漫谈JVM之类加载机制(篇一)
前言 最近在看一本书,发现代码里用到了Thread.currentThread().getContextClassLoader(),为什么类加载器还与线程有关系呢,为什么不直接使用ClassLoader.getSystemClassLoader()呢?带着这些疑问又把JVM类加载机制从头到尾学习了一遍. 篇一 类加载时机 我们编写的代码存储在java文件中,java源代码通过编译生成Java虚拟机可识别的字节码,存储在Class文件中.运行java程序时需要将Class文件中的信息加载到Java…
每日一问:讲讲 JVM 的类加载机制
前面给大家讲解了 Java 虚拟的内存结构 以及 Java 虚拟机的垃圾回收机制,我们更加明白了 Java 的内存管理机制,今天我们来讲讲 Java 虚拟机的另外一个高频考点:类加载机制. JVM 的类加载过程分为加载.验证.准备.解析.初始化 5 个阶段. 加载 加载阶段由类加载器进行负责,类加载器根据一个类的全限定名读取该类的二进制字节流到 JVM 内部,然后转换为一个对应的 java.lang.Class 对象实例:一个类由类加载器和类本身一起确定,所以不同类加载器加载同一个类得到的 ja…
图解 JVM 核心知识点(面试版)
一.基本概念 1.1 OpenJDK 自 1996 年 JDK 1.0 发布以来,Sun 公司在大版本上发行了 JDK 1.1.JDK 1.2.JDK 1.3.JDK 1.4.JDK 5,JDK 6 ,这些版本的 JDK 都可以统称为 SunJDK .之后在 2006 年的 JavaOne 大会上,Sun 公司宣布将 Java 开源,在随后的一年多里,它陆续将 JDK 的各个部分在 GPL v2(GNU General Public License,version 2)协议下开源,并建立了 Op…
JVM(5) 类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化.最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 一.类加载的时机 类从被加载到虚拟机内存中开始,到卸载出内存位置,整个生命周期包括7个阶段:加载 → 验证 → 准备 → 解析 → 初始化 → 使用 → 卸载.其中,验证.准备.解析3个部分统称为连接. 二.类加载的过程 1.加载 相对于类加载的其他阶段,一个非数组类的加载阶段(准确的说,是加载阶段中获取类的二进制字节流的动作)是开发人员可控…
在 Linux 中安装 Oracle JDK 8 以及 JVM 的类加载机制
参考资料 该文中的内容来源于 Oracle 的官方文档 Java SE Tools Reference .Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以直接找到这个总入口 Java SE 8 Documentation ,想阅读什么就点什么.本博客不定期从 Oracle 官网搬砖. 前言 在 Linux 中使用 Java,我一般都是直接使用 Linux 发行版自带的软件包,一个命令即可搞定 JDK 的安装.但是 Linux 发行版中自带的 JDK 往往是…
JVM——Java类加载机制总结
)解析:解析阶段是把虚拟机中常量池的符号引用替换为直接引用的过程. 2.3 初始化 类初始化时类加载的最后一步,前面除了加载阶段用户可以通过自定义类加载器参与以外,其余都是虚拟机主导和控制.到了初始化阶段,才是真正执行类中定义Java程序代码.初始化阶段,根据程序中的定制,初始化类变量. 初始化过程其实是执行类构造器方法的过程. (类构造器方法是由编译器自动收集类中所有类变量的赋值动作和静态语句块中的语句合并产生的.) //静态语句块中只能访问定义在静态语句块之前的变量,定义在它之后的变量可以赋…
jvm的类加载机制总结
类的加载机制分为如下三个阶段:加载,连接,初始化.其中连接又分为三个小阶段:验证,准备,解析. 加载阶段 将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后再堆内创建一个class对象,用来封装类在方法区内的数据结构. 加载class文件的方式: 从本地系统中直接加载 通过网络下载.class文件 从zip,jar等归档文件中加载.class文件 从专有数据库中提取.class文件 将Java源文件动态编译为.class文件 类的加载最终产品是位于堆中的cla…
你可能不知道的jvm的类加载机制
引言:在java代码中,类型的加载.连接与初始化过程都是在程序运行期间完成的. 加载:查找并加载类的二进制数据(class文件加载到内存中) 连接:a 验证:确保被加载类的正确性. b准备:为类的静态变量分配内存,并将其初始化为默认值. c解析:把类中的符号引用转换为直接引用. 初始化:为类的静态变量赋予正确的初始值. -----java程序对类的使用方式分为两种(主动使用,被动使用) -----创建类的实例 -----访问某个类或者接口的静态变量 getstatic指令,或者对该静态变量赋…
深入理解JVM - 虚拟机类加载机制 - 第七章
类加载的时机类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括了:加载/验证/准备/解析/初始化/使用/卸载七个阶段.其中验证/准备和解析统称为连接(Linking). 加载.验证.准备.初始化和卸载的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也称为动态绑定或晚期绑定). 加载时机:虚拟机规范并没有强制约束.初始化时机:虚拟机规范严格规定有且只有情况必须立即对类进行“初始化”(加载/验证/准备/解析在此前开始)…
JVM系列-类加载机制
简介 在java中,类的声明周期总共分为以下几种: 加载(Loading),验证(Verification),准备(Preparation),解析(Analysis), 初始化(Initialization),使用(Using),卸载(Unloading).其中,验证,准备,解析统称为连接(Linking)如图 一.加载: 在加载阶段,JVM需要完成以下准备: 通过一个类的全限定名来获取定义此类的二进制字节流(并非要从class文件获取,也可从jar或war中读取,也可以在运行时动态生成,还可以…
JVM(四)类加载机制
1.静态绑定和动态绑定 静态绑定:即前期绑定,在程序执行前方法已经被绑定,此时由编译器或者其他连接程序实现,针对Java,可以理解为编译期的绑定,java中只有final.static.private和构造方法是前期绑定的. 动态绑定:即晚期绑定,也叫运行时绑定,在运行时根据具体的类型进行绑定,在java中几乎所有的方法都是后期绑定. 2.加载阶段: ①要做的三件事: a.通过一个类的全限定名来获取定义的二进制流文件(class文件.jar包.网络中.其他应用jsp) b.将…
理解JVM之类加载机制
类完整的生命周期包括加载,验证,准备,解析,初始化,使用,卸载,七个阶段.其中验证,准备,解析统称为连接,类的卸载在前面的关于垃圾回收的博文中已经介绍. 加载,验证,准备,初始化,卸载这五个阶段的顺序是确定的,类的加载必须按照这种顺序按部就班的来,而解析阶段不一定,它可以在初始化阶段之后开始,这是为了支持java的运行时动态绑定.值得注意的是,上述的五个阶段只是按部就班的"开始",并不是按部就班的"进行"或者"完成",因为这些阶段通常是互相交叉混…
JVM虚拟机类加载机制(一)
类从被加载到虚拟机内存中开始,到卸载出内存截止,整个生命周期包括:加载.验证.准备.解析,初始化.使用.卸载七个阶段.其中验证.准备.解析三个部分统称为连接. 类初始化情况: 遇到new.getstatic.putstatic 或 invokestatic 这4条字节码指令时,如果没有初始化,则需要…
一夜搞懂 | JVM 类加载机制
前言 本文已经收录到我的Github个人博客,欢迎大佬们光临寒舍: 我的GIthub博客 学习导图 一.为什么要学习类加载机制? 今天想跟大家唠嗑唠嗑Java的类加载机制,这是Java的一个很重要的创新点,曾经也是Java流行的重要原因之一. Oracle当初引入这个机制是为了满足Java Applet开发的需求,JVM咬咬牙引入了Java类加载机制,后来的基于Jvm的动态部署,插件化开发包括大家热议的热修复,总之很多后来的技术都源于在JVM中引入了类加载器. 如今,类加载机制也在各个领域大放异…
深入理解JVM,虚拟机类加载机制
类加载过程概览 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括以下7个阶段: 加载(Loading) 验证(Verification) 准备(Preparation) 解析(Resolution) 初始化(Initialization) 使用(Using) 卸载(Unloading) 其中前五个阶段即为类加载的全过程.在后面会进行详细的介绍.而验证.准备.解析3个部分统称为连接(Linking).这7个阶段的发生顺序如下图: 在上图中,加载.验证.准备.初始化和卸载这5个阶…
jvm之java类加载机制和类加载器(ClassLoader),方法区结构,堆中实例对象结构的详解
一.类加载或类初始化:当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载.连接.初始化3个步骤来对该类进行初始化.如果没有意外,JVM将会连续完成3个步骤. 二.类加载时机: 1.创建类的实例,也就是new一个对象 2.访问某个类或接口的静态变量,或者对该静态变量赋值 3.调用类的静态方法 4.反射(Class.forName("com.lyj.load")) 5.初始化一个类的子类(会首先初始化子类的父类) 6.JVM启动时标明的启动类,即文件名和类名相同的那个…