`
txidol
  • 浏览: 52150 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java虚拟机学习笔记(类加载)

阅读更多

类在虚拟机内存中的生命周期:


——————————————————————
加载 Loading

验证 Verification |
准备 Preparation | 连接 Linking
解析 Resolution |

初始化 Initialization
使用 Using
卸载 Unloading
————————————————————————

解析的顺序不一定,可以在初始化阶段之后再开始,支持运行时绑定

类初始化:


1.new getstatic putstatic (final除外) invokestatic
2.使用java.lang.reflect包的方法对类进行反射调研
3.初始化子类触发父类初始化 (真正使用到父接口时,如定义的常量)
4.虚拟机启动,用户执行主类(包含main方法)

被动引用,不触发初始化方法:
1.通过子类引用父类的静态字段
2.通过数组定义来引用类
3.常量在编译阶段会存入调用类的常量池中,本质上没有直接引用到定义常量的表


=================================================

加载


1.通过一个类的权限定名来获取定义此类的二进制字节流 zip jar war applet proxy jsp db
2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
3.在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的访问入口

验证


1.文件格式验证 正确解析并存储在方法区
2.元数据验证 语义校验,符合Java语言规范
3.字节码验证数据流和控制流分析 Halting Problem 1.6 -XX: -UseSplitVerifier关掉优化
4.符号引用验证符号引用中全限定名,符号描述,访问性 -Xverify:none

准备


正式为类变量分配内存并设置类变量初始值,在方法区分配。
注意实例变量和对象一起分配在堆中,不在这一过程。
final常量将会赋值,其他都是初始值 0 false ...

解析


1.类或接口解析
2.字段解析
3.类方法解析
4.接口方法解析

初始化

执行类构造器<clinit>
1.顺序收集所有类变量赋值动作和静态块
2.虚拟机会保证先调父类<clinit>
3.虚拟机会保证一个类<clinit>在多线程下加锁和同步

=================================================

类加载器


1.类与加载器确认唯一性
2.双亲委派模型 Parents Delegation Model
启动类加载器 Bootstrap ClassLoader
扩展类加载器Extension ClassLoader
应用程序类加载器 Application ClassLoader
自定义类加载器 User ClassLoader
除了顶层的启动类加载器外,其他都有自己的父类加载器,
父子关系使用组合来复用父加载器代码,优先调父类加载器加载类
3.非双亲委派模型
向前兼容,重写loadClass()
线程上下文类加载器 Thread Context ClassLoader JNDI JDBC JCE
程序动态性,代码热替换HotSwap


OSGi,网状结构的类加载器


1.将以java.*开头的类,委派给父类加载器加载
2.否则,将委派列表名单内的类,委派给父类加载器加载
3.否则,将Import列表中的类,委派给Export这个类的Bundle的类加载器加载
4.否则,查找当前Bundle的ClassPath,使用自己的类加载器加载
5.否则,查找类是否在自己的Fragment Bundle中,如果在,则委派给Fragment Bundle的类加载器加载
6.否则,查找Dynamic Import列表的Bundle,委派给对应的Bundle的类加载器加载
7.否则,类查找失败


分享到:
评论

相关推荐

    Java虚拟机JVM类加载学习笔记

    Java虚拟机JVM类加载学习笔记

    深入Java虚拟机JVM类加载学习笔记

    深入Java虚拟机JVM类加载学习笔记:jvm java classloader 垃圾回收 gc

    Java 虚拟机学习笔记:Java 内存区域,垃圾收集,内存分配与回收策略,JVM 调优,文件结构,类加载机制,Java 程序

    Java 虚拟机学习笔记: Java 内存区域, 垃圾收集, 内存分配与回收策略, JVM 调优, 文件结构, 类加载机制, Java 程序 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,...

    java基础学习笔记之类加载器

    java中的类加载器:java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap, ExtClassLoader,AppClassLoader类加载器也是一个java类,因此类加载器也需要被加载,所以...

    java8源码-JavaRobot:Java学习笔记,JavaLearningNote

    学习笔记(持续更新中) 所有文章均同步发布到微信公众号【JavaRobot】,关注微信公众号,及时得到文章推送,谢谢支持。 说明:如无特别说明,所有代码都基于JDK8 JavaSE(Java基础) Java Core 关键字 synchronized...

    java7rt.jar源码-Java_JVM:这是我的JavaJVM学习笔记

    java虚拟机 一:上篇——内存与垃圾回收器 二:中篇——字节码与类的加载 三:下篇——性能监控与调优篇 一: 上篇——内存与垃圾回收器 架构: jvm依赖的架构: 栈架构/寄存器架构 栈架构 JVM的生命周期: 1.启动 ...

    Scala学习笔记

    Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。它也能运行于CLDC配置的Java ME中。目前还有另一.NET平台的实现[2],不过该版本更新有些滞后。[3] Scala的编译模型(独立编译,动态类加载)与Java和C#...

    记录各种学习笔记(算法、Java、数据库、并发......).zip

    它的设计目标是“一次编写,到处运行(Write Once, Run Anywhere)”,这意味着开发者可以使用Java编写应用程序,并在支持Java的任何平台上无需重新编译即可运行,这得益于其独特的跨平台性,通过Java虚拟机(JVM)...

    关于学习笔记整理,包括Linux、Java、数据结构和算法,和一些IT工具的使用.zip

    它的设计目标是“一次编写,到处运行(Write Once, Run Anywhere)”,这意味着开发者可以使用Java编写应用程序,并在支持Java的任何平台上无需重新编译即可运行,这得益于其独特的跨平台性,通过Java虚拟机(JVM)...

    积分java源码-java-11:Java11OCP学习笔记

    运行时,它会加载给定的类并查找要运行的该类的主要方法。 JVM 的可执行文件名为 java。 每个 Java 类都属于一个包。 源文件中最多可以有一个 package 语句,并且它必须是文件中的第一条语句。 如果没有 package ...

    java总结(1).zip_commandkv3_java_searwg

    学习java基础的一些笔记,总结.如: java开发环境:JVM:java虚拟机:加载.class并运行.class JRE:java运行环境:包含JVM,还包含运行java程序所必须的环境(JRE=JVM+java系统类库)

    java8集合源码分析-Awesome-Java:真棒-Java

    Java虚拟机相关,内存模型,类加载机制,JVM性能解析等 零散的文章 数据结构与算法 算法的度量,基础数据结构,链表,二叉树,B树,图论,深度和广度优先算法,排序,查找等 设计模式 常用设计模式的Java语言描述 ...

    c#学习笔记.txt

    c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...

    J2SE技术总结-Java学习精华教程-电子书

    本书内容非常全面,涵盖了《Java编程思想》、《Java学习笔记》等书籍所有知识要点,并结合作者自己经验总结而编写,内容丰富程度胜过一切书籍 众所周知,一般书籍为了销售需要,往往很少的知识点,却需要添加大量的...

    笔记 — JVM内存结构

    Java虚拟机(Java Virtual Machine,简称JVM),Java的“一处编译,处处运行”,就是因为Java程序编译成字节码文件后可以在任何计算机的JVM上执行,所以JVM是我们学习Java的重点之一。 JVM = 类加载器(classloader) + ...

    2021-DIP-environment-configuration

    1个Anaconda安装Anaconda经常在机器学习中使用,Anaconda是一个包含180+的科学包及其依赖项的发行版本。包含的科学包包括:conda,numpy,scipy,ipython笔记本等。的管理工具,适用的语言包括:Python,R,Ruby,...

Global site tag (gtag.js) - Google Analytics