写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 一.什么是类加载过程 (1).概述 我们编写的类(.java文件)会被编译器(如javac编译器)编译成Class文件.Java虚拟机把Class文件加载到内存中的过程就称为类加载过程. (2).类的生命周期 一个类从被加载到虚拟机内存中,到卸载出内存,共经历七个过程,即这个类的生命周期会经历加载.验证.准备.解析.初始化.使用.卸载七个阶段.其中,验证.准备.解析三个阶段又统称为…
虚拟机类加载机制是把描述类的数据从 Class 文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型. ​ 需要注意的是 Java 语言与其他编译时需要进行连接工作的语言不通,它的连接过程是在程序运行期间完成的,这样会在类加载时稍微增加一些性能开销,但是却能为 Java 应用程序提供高度的灵活性.例如,如果编写一个使用接口的应用程序,可以等到运行时再指定其实际的实现. 通过文章,你可以了解到以下内容 类加载时机 类加载过程 类加载器与不足 1. 类加…
一.类加载的时机 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载.验证.准备.解析.初始化.使用.卸载 7个阶段,其中验证.准备.解析 3个部分统称为 连接. 二.具体步骤解析 1.加载 加载阶段,虚拟机要完成以下3件事情: 1)通过一个类的全限定名来获取定义此类的二进制字节流: 2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构: 3)在内存中生成一个代表这个类的java.lang.class对象,作为方法区这个类的各种数据的访问入口. 相对于类加载过…
一.类生命周期:共7个阶段 类从被加载到虚拟机内存中开始,到卸载出内存.整个生命周期包括:加载.验证.准备.解析.初始化.使用和卸载7个阶段. 其中验证.准备.解析3个部分统称为连接. 类加载的过程:不包括上面的使用和卸载. 示意图:![](https://ws1.sinaimg.cn/large/b35c33e9ly1g1p5ab39wdj20hg07jq48.jpg) 二.类加载各阶段说明:(加载只有5个阶段,不包括使用和卸载) 加载:(完成3步) 通过一个全限定类名来获取定义此类的二进制字…
一.概念 "通过一个类的全限定名来获取描述此类的二进制字节流",实现这个动作的代码模块成为 类加载器. 二.分类 从java开发人员的角度出发,系统提供的类加载器大致分为如下3类: 1.启动类加载器(Bootstrap ClassLoader) 负责将存放在<JAVA_HOME>/lib目录中的,或者被-Xbootclasspath参数所指定的路径中的,并且是虚拟机识别的类库加载到虚拟机内存中: 2.扩展类加载器(Extension ClassLoader) 负责加载<…
大家都知道,Java中JVM的重要性,学习了JVM你对Java的运行机制.编译过程和如何对Java程序进行调优相信都会有一个很好的认知. 废话不多说,直接带大家来初步认识一下JVM. 什么是JVM? JVM(Java Virtual Machine)是一个抽象的计算机,和实际的计算机一样,它具有指令集并使用不同的存储区域,它负责执行指令,还要管理数据.内存和寄存器. 看到这里,可能不懂JVM的人,已经蒙圈了.没关系,下面让我详细为大家介绍JVM的体系架构图,或许你会明白些. 简单来说,JVM就是…
本文内容过于硬核,建议有 Java 相关经验人士阅读. 1 引言 从上周开始一直在看周志明的 「深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)」 ,好多年之前看过第二版的,绝对算的上是国内 JVM 领域的经典之作,值得多读几遍. 全书的开头就介绍了如何自己编译一次 JDK ,之前看书的时候直接跳过了,一直都没自己操作过,上周读到这里的时候突然萌生了实践的念头,说搞就搞. 首先我这次选用的 OpenJDK ,而不是 OracleJDK , OracleJDK 会有一些独立的商业特性,而…
JVM--类加载机制 2020年02月07日14:49:19-开始学习JVM(Class Loader) 类加载机制 类加载器深入解析与阶段分解 在Java代码中,类型的加载.连接与初始化过程中都是在程序 运行期间完成的. 提供了大量的灵活性.增加了更多的可能性. Java虚拟机与程序的生命周期. 在如下几种情况下,Java虚拟机将结束生命周期 执行了System.exit()方法 程序正常执行结束 程序在执行过程中遇到了异常或错误而异常终止 由于操作系统出现错误而导致Java虚拟机进程终止 上…
首先一个思维导图来看下Tomcat的类加载机制和JVM类加载机制的过程 类加载 在JVM中并不是一次性把所有的文件都加载到,而是一步一步的,按照需要来加载. 比如JVM启动时,会通过不同的类加载器加载不同的类.当用户在自己的代码中,需要某些额外的类时,再通过加载机制加载到JVM中,并且存放一段时间,便于频繁使用. 因此使用哪种类加载器.在什么位置加载类都是JVM中重要的知识. JVM类加载 JVM类加载采用 双亲委派机制,如下图所示: JVM中包括集中类加载器: 1 BootStrapClass…
[转载] :http://my.oschina.net/rouchongzi/blog/171046 Java之类加载机制 类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行. 研究类加载机制的第二个目的是让程序能动态的控制类加载,比如热部署等,提高程序的灵活性和适应性. 一.简单过程 Java程序运行的场所是内存,当在命令行下执行: java HelloWorld 命令的时候,JVM会将HelloWorld.class加载到内存中,…
[深入Java虚拟机]之四:类加载机制 类加载过程     类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载.验证.准备.解析.初始化.使用和卸载七个阶段.它们开始的顺序如下图所示: 其中类加载的过程包括了加载.验证.准备.解析.初始化五个阶段.在这五个阶段中,加载.验证.准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为动态绑定或晚期绑定).另外注意这里的几个阶段是按顺序开…
转自:http://my.oschina.net/xianggao/blog/70826 参考:http://www.ibm.com/developerworks/cn/java/j-lo-classloader/ Java类加载机制 类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行.研究类加载机制的第二个目的是让程序能动态的控制类加载,比如热部署等,提高程序的灵活性和适应性. 在java.lang包里有个ClassLoader类,…
算上大学,尽管接触Java已经有4年时间并对基本的API算得上熟练应用,但是依旧觉得自己对于Java的特性依然是一知半解.要成为优秀的Java开发人员,需要深入了解Java平台的工作方式,其中类加载机制和JVM字节码这样的核心特性.今天我将记录一下我在新的学习路程中对Java类加载机制的理解. 1.类加载机制 类加载是一个将类合并到正在运行着的JVM进程中的过程.首先要加载一个类,我们必须先得将类文件加载进来并连接,并且要加上大量的验证,随后会生成一个代表着这个类的class对象,然后就可以通过…
深入研究Java类加载机制 类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行. 研究类加载机制的第二个目的是让程序能动态的控制类加载,比如热部署等,提高程序的灵活性和适应性. 一.简单过程 Java程序运行的场所是内存,当在命令行下执行: java HelloWorld 命令的时候,JVM会将HelloWorld.class加载到内存中,并形成一个Class的对象HelloWorld.class. 其中的过程就是类加载过程: 1.寻…
Java 类加载机制 Java 类加载机制详解. @pdai Java 类加载机制 类的生命周期 类的加载:查找并加载类的二进制数据 连接 验证:确保被加载的类的正确性 准备:为类的静态变量分配内存,并将其初始化为默认值 解析:把类中的符号引用转换为直接引用 初始化 使用 卸载 类加载器, JVM类加载机制 类加载器的层次 寻找类加载器 类的加载 JVM类加载机制 自定义类加载器 参考文章 类的生命周期 其中类加载的过程包括了加载.验证.准备.解析.初始化五个阶段.在这五个阶段中,加载.验证.准…
类加载机制与对象初始化   一 . 类加载机制 类加载机制是指.class文件加载到jvm并形成Class对象的机制.之后应用可对Class对象进行实例化并调用.类加载机制可在运行时动态加载外部的类,还可以达到类隔离的效果. 类从而加载到虚拟机中开始,整个过程分为下图七个阶段,其中验证,准备,解析统称为解析.图中加载,验证,准备,初始化,卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种过程按部就班的开始,而解析则不一定,它在某些情况下可能在初始化之后才开始,这是为了支持java语言的运行时…
Java类加载机制 类加载器 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代码模块称为“类加载器”. 类加载器可以说是Java语言的一项创新,也是Java语言流行的重要原因之一,它最初是为了满足Java Applet的需求而开发出来的.虽然目前Java Applet技术基本上已经“死掉”,但类加载器却在类层次划分.OSGi.热部署.代码加密等领域大放异彩,成为了J…
在一篇<初步了解JVM第一篇>中,我们已经了解了: 类加载器:负责加载*.class文件,将字节码内容加载到内存中.其中类加载器的类型有如下: 启动类加载器(Bootstrap) 扩展类加载器(Extension) 应用程序类加载器(AppClassLoader) 用户自定义加载器(User-Defined) 执行引擎:负责解释命令,提交给操作系统执行. 本地接口:目的是为了融合不同的编程语言提供给Java所用,但是企业中已经很少会用到了. 本地方法栈:将本地接口的方法在本地方法栈中登记,在执…
前言 最近在看一本书,发现代码里用到了Thread.currentThread().getContextClassLoader(),为什么类加载器还与线程有关系呢,为什么不直接使用ClassLoader.getSystemClassLoader()呢?带着这些疑问又把JVM类加载机制从头到尾学习了一遍. 篇一 类加载时机 我们编写的代码存储在java文件中,java源代码通过编译生成Java虚拟机可识别的字节码,存储在Class文件中.运行java程序时需要将Class文件中的信息加载到Java…
一.类文件的结构 我们都知道,各种不同平台的虚拟机,都支持 "字节码 Byte Code" 这种程序存储格式,这构成了 Java 平台无关性的基石.甚至现在平台无关性也开始演变出 "语言无关性" ,就是其他语言也可以运行在 Java 虚拟机之上,比如现在的 Kotlin.Scala 等. 实现语言无关性的基础仍然是虚拟机和字节码存储格式,Java 虚拟机步包括 Java 语言在内的任何语言绑定,他只和 "Class 文件" 这种特定的二进制文件格…
这是Java基础篇(JVM)的第二篇文章,紧接着上一篇字节码详解,这篇我们来详解Java的类加载机制,也就是如何把字节码代表的类信息加载进入内存中. 我们知道,不管是根据类新建对象,还是直接使用类变量/方法,都需要在类信息已经加载进入内存的前提下.在Java虚拟机规范中,类加载过程也就是类的生命周期包括7个部分:加载.验证.准备.解析.初始化.使用.卸载.不过我们先不写这几个阶段,先讲讲类加载器的知识,然后再来看具体的类加载过程. 1. 类加载器 关于类加载器,我主要关注两个方面,一是类加载器的…
首先Throws(抛出)几个自己学习过程中一直疑惑的问题: 1.什么是类加载?什么时候进行类加载? 2.什么是类初始化?什么时候进行类初始化? 3.什么时候会为变量分配内存? 4.什么时候会为变量赋默认初值?什么时候会为变量赋程序设定的初值? 5.类加载器是什么? 6.如何编写一个自定义的类加载器? 首先,在代码编译后,就会生成JVM(Java虚拟机)能够识别的二进制字节流文件(*.class).而JVM把Class文件中的类描述数据从文件加载到内存,并对数据进行校验.转换解析.初始化,使这些数…
本文内容过于硬核,建议有 Java 相关经验人士阅读. 1. 什么是类的加载? 类的加载指的是将类的 .class 文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class 对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的 Class 对象, Class 对象封装了类在方法区内的数据结构,并且向 Java 程序员提供了访问方法区内的数据结构的接口. 类加载器并不需要等到某个类被 「首次主动使用」 时再加载它, JVM…
类加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 类加载的时机 遇到new(比如new Student()).getstatic和putstatic(读取或设置一个类的静态字段,如下代码,读取被final修饰并已在编译器把结果放入常量池的静态字段除外).invokestatic(调用类的静态方法)这四条指令时,如果对应的类没有初始化,则要对对应的类先进行初始化. public c…
一.前言 前面分析了class文件具体含义,接着需要将class文件加载到虚拟机中,这个过程是怎样的呢,下面,我们来仔细分析. 二.什么是类加载机制 把class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是类加载机制. 三.类加载总体流程图 说明:类的整个生命周期分为以上七个阶段,验证.准备.解析统称为连接阶段.关于加载流程笔者之前也写过一篇文章JVM之类加载器,从代码层面了解类加载机制.下面我们将更加详细的讲解各个阶段,加载阶段只是类加…
当 Java 虚拟机将 Java 源码编译为字节码之后,虚拟机便可以将字节码读取进内存,从而进行解析.运行等整个过程,这个过程我们叫:Java 虚拟机的类加载机制.JVM 虚拟机执行 class 字节码的过程可以分为七个阶段:加载.验证.准备.解析.初始化.使用.卸载. 在开始聊之前,先给大家看一道面试题. class Grandpa { static { System.out.println("爷爷在静态代码块"); } } class Father extends Grandpa…
有兴趣可以先参考前面的几篇JVM总结: JVM自动内存管理机制-Java内存区域(上) JVM自动内存管理机制-Java内存区域(下)     JVM垃圾收集器与内存分配策略(一) 我们知道,在编写一个Java程序后,需要由虚拟机将描述类的数据从Class文件(这里面的Class文件不是指某个特定存在于磁盘上面的文件,而是一串二进制字节流)加载到内存,并对数据进行校验.转换解析和初始化,最终形成可被虚拟机使用的Java类型,这就是虚拟机的类加载机制.与编译时需要进行连接工作的语言不同,Java中…
1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口. 类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.c…
我们在编写Java程序之后,会通过编译器得到一个class文件,这个class文件是如何与JVM进行配合的呢?类中的信息是如何变成JVM可以使用的Java类型呢?这些都是类加载机制做到的. 虚拟机把描述类的数据从class文件中加载到内存里,并对数据进行校验,转换解析和初始化,最终形成被虚拟机直接使用的Java类型,这就是类加载机制. 类的生命周期 一个类从加载进入内存到卸载出内存,一共经过以下几个生命周期. 加载 验证 准备 解析 初始化 使用 卸载 这篇文章主要说明前5个生命周期,也就是说主…
在上一篇JVM类加载机制详解(一)JVM类加载过程中说到,类加载机制的第一个阶段加载做的工作有: 1.通过一个类的全限定名(包名与类名)来获取定义此类的二进制字节流(Class文件).而获取的方式,可以通过jar包.war包.网络中获取.JSP文件生成等方式. 2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构.这里只是转化了数据结构,并未合并数据.(方法区就是用来存放已被加载的类信息,常量,静态变量,编译后的代码的运行时内存区域) 3.在内存中生成一个代表这个类的Java.lan…