• 一、类生命周期:共7个阶段

    • 类从被加载到虚拟机内存中开始,到卸载出内存。整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。

      • 其中验证、准备、解析3个部分统称为连接。
      • 类加载的过程:不包括上面的使用和卸载。
    • 示意图:![](https://ws1.sinaimg.cn/large/b35c33e9ly1g1p5ab39wdj20hg07jq48.jpg)
  • 二、类加载各阶段说明:(加载只有5个阶段,不包括使用和卸载)
    • 加载:(完成3步)

      • 通过一个全限定类名来获取定义此类的二进制字节流;
      • 将这个字节流的静态存储结构转化为方法区的运行时数据结构;
      • 在内存中生成一个代表该类的Class对象,作为方法区这个类的各种数据的访问入口;
    • 验证:(连接阶段的第一步)
      • 目的:确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并不会危害虚拟机自身的安全。
      • 4个阶段:
        • 1、文件格式验证
        • 2、元数据验证
        • 3、字节码验证
        • 4、符号引用验证
    • 准备:
      • 正式为类变量分配内存并设置类变量初始值,都在方法区中分配。

        • 1、进行内存分配的仅包括类变量(被static修饰的变量),而不包括实例变量。

          • 实例变量将会在对象实例化时随着对象一起分配在Java堆中。
        • 2、这里说的初始值“通常情况”下是数据类型的零值,
    • 解析:
      • 虚拟机将常量池内的符号引用替换为直接引用的过程。

        • 注:符号引用类似于别名,直接引用类似于实际存储地址;
        • 具体解析有:类或接口的解析、字段解析、类方法解析、接口方法解析
    • 初始化:(类加载过程的最后一步)
      • 真正开始执行类中定义的Java程序代码(或者说是字节码)
      • 初始化阶段是执行类构造器<clinit>()方法的过程。
        • <clinit>()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{}块)中的语句合并产生的。

          • 1、静态语句块中只能访问到定义在静态语句块之前的变量,定义在它之后的变量,在前面的静态语句块可以赋值,但是不能访问。
          • 2、父类中定义的静态语句块要优先于子类的变量赋值操作
        • 编译器收集的顺序是由语句在源文件中出现的顺序所决定的,
  • 三、类加载器(顶级在上,次级在先)
    • 1、启动类加载器(顶级)

      • 加载<JAVA_HOME>\lib目录中的类库(或被-Xbootclasspath参数所指定的路径中)
    • 2、扩展类加载器(开发者可直接使用)
      • 加载<JAVA_HOME>\lib\ext目录中的类库(或被java.ext.dirs系统变量指定的路径中的类库)
    • 3、应用程序类加载器(开发者可直接使用)
      • 加载用户类路径(ClassPath)上所指定的类库。
    • 4、用户自定义加载器:
    • 附:
  • 四、双亲委派模型

面试之三:JVM类加载机制-类加载各阶段说明和类加载器的更多相关文章

  1. JVM类加载机制详解(二)类加载器与双亲委派模型

    在上一篇JVM类加载机制详解(一)JVM类加载过程中说到,类加载机制的第一个阶段加载做的工作有: 1.通过一个类的全限定名(包名与类名)来获取定义此类的二进制字节流(Class文件).而获取的方式,可 ...

  2. 深入理解JVM虚拟机6:深入理解JVM类加载机制

    深入理解JVM类加载机制 简述:虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 下面我们具体 ...

  3. JVM总结(四):JVM类加载机制

    这一节我们来总结一下JVM类加载机制.具体目录如下: 类加载的过程 类加载过程概括 说说引用 详解类加载全过程: 加载 验证 准备 解析 初始化 虚拟机把描述类的数据从Class文件加载到内存,并对数 ...

  4. JVM活学活用——类加载机制

    类的实例化过程 有父类的情况 1. 加载父类静态    1.1 为静态属性分配存储空间并赋初始值     1.2 执行静态初始化块和静态初始化语句(从上至下) 2. 加载子类静态    2.1 为静态 ...

  5. Java虚拟机(四):JVM类加载机制

    1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构 ...

  6. JVM类加载机制(转)

    原文出自:http://www.cnblogs.com/ityouknow/p/5603287.html 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运 ...

  7. JVM内存结构 JVM的类加载机制

    JVM内存结构: 1.java虚拟机栈:存放的是对象的引用(指针)和局部变量 2.程序计数器:每个线程都有一个程序计数器,跟踪代码运行到哪个位置了 3.堆:对象.数组 4.方法区:字节流(字节码文件) ...

  8. JVM 学习笔记一 :JVM类加载机制

    前言: 最近在看JVM相关资料,这里记录下学习笔记,希望自己能坚持学完,打牢基础.   一.类加载过程 1,类从被加载到JVM中开始,到卸载为止,整个生命周期包括:加载.验证.准备.解析.初始化.使用 ...

  9. JVM 第三篇:Java 类加载机制

    本文内容过于硬核,建议有 Java 相关经验人士阅读. 1. 什么是类的加载? 类的加载指的是将类的 .class 文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 ...

  10. JVM(5) 类加载机制

    虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化.最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 一.类加载的时机 类从被加载到虚拟机内存中开 ...

随机推荐

  1. Mysql时间存储类型优缺点?DATETIME?TIMESTAMP?INT?

    TIMESTAMP 4个字节储存;值以UTC格式保存;.时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区. DATETIME 8个字节储存;实际格式储存;与时区无关;datetime  ...

  2. 点滴积累【other】---HTTP 错误 404.13 - Not Found,请求筛选模块被配置为拒绝超过请求内容长度的请求(转载)

    此文参考来源:http://blog.csdn.net/tiantian1980/article/details/6577499 问题:HTTP 错误 404.13 - Not Found,请求筛选模 ...

  3. 《转》ceilometer的数据採集机制入门

    问题导读 1.ceilometer负责什么事情? 2.ceilometer 有哪些概念? 3.ceilometer 怎样採集hardware? 附上openstack 官网API   http://d ...

  4. 关于TimeSpan

    一秒是1000万个tick TimeSpan ts = * ); Console.WriteLine(ts); Console.Read(); //print 00:00:01 并且在TimeSpan ...

  5. solr 简单搭建 数据库数据同步(待续)

    原来在别的公司负责过文档检索模块的维护(意思就是不是俺开发的啦). 所以就略微接触和研究了下文档检索. 文档检索事实上是全文检索.是通过一种技术把N多文档进行一定规律的分割归类,然后创建易于搜索的索引 ...

  6. SCWS 中文分词

    SCWS 中文分词v1.2.3 开源免费的中文分词系统,PHP分词的上乘之选! 首页 下载 演示 文档 关于 服务&支持 API/HTTP 论坛 捐赠 源码@github 文档目录 SCWS- ...

  7. pycharm设置安装python第三方插件

    pycharm设置安装python第三方插件 转载于:https://www.mindg.cn/?p=80 今天下了一个pycharm,设置用它来安装python插件,以下是安装步骤,与大家分享,我的 ...

  8. Xml解析之PULL解析 例1

    <?xml version="1.0" encoding="UTF-8"?> <persons> <person id=" ...

  9. [shell]Linux脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别

    一直以为在shell脚本中#都是代表着注释功能,同样在脚本开始的#!/bin/sh也只是告诉用户这是一个shell脚本,而最近顺手查了下,才发现不是这个意思,分享下面的文章. 转自:http://ww ...

  10. supervisor配置详解

    原文:http://lixcto.blog.51cto.com/4834175/1539136 有阵子没写博客了,这段时间一直在研究python django框架和前端相关的东西.楼主学通信的,对we ...