JVM笔记11-类加载器和OSGI】的更多相关文章

Java虚拟机JVM学习05 类加载器的父委托机制 类加载器 类加载器用来把类加载到Java虚拟机中. 类加载器的类型 有两种类型的类加载器: 1.JVM自带的加载器: 根类加载器(Bootstrap) 扩展类加载器(Extension) 系统类加载器(System) 2.用户自定义的类加载器: java.lang.ClassLoader的子类,用户可以定制类的加载方式. JVM自带的加载器 Java虚拟机自带了以下几种加载器. 1.根(Bootstrap)类加载器: 该加载器没有父加载器. 它…
分享是价值的传递,喜欢就点个赞 引言 今天我们继续来深入的剖析类加载器的内容.上节课我们讲了类加载器的基本内容,没看过的小伙伴请加关注.今天我们继续. 什么是定义类加载器和初始化类加载器? 定义类加载器:假设我们的某一个类是由ExtClassLoader加载的,那么ExtClassLoader称为该类的定义类加载器 初始化加载器:能够返回Class对象引用的都叫做该类的初始类加载器,比如类A是由我们的ExtClassLoader加载,那么 ExtClassLoader是该类的定义类加载器,也是该…
JVM的艺术-类加载器篇(三) 引言 今天我们继续来深入的剖析类加载器的内容.上篇文章我们讲解了类加载器的双亲委托模型.全盘委托机制.以及类加载器双亲委托模型的优点.缺点等内容,没看过的小伙伴请加关注.在公众号内可以找到,jvm的艺术连载篇.欢迎各位小伙伴儿的持续关注,同时也感谢各位读者一直以来的支持,本人会一直坚持原创.独立创作,给各位读者带来真正的.实用的干货.也会把文章写的通俗易懂,从人的思维.从程序员的思维中,不断的改善写作技巧.争取让每个人都能花最少的学习成本,读懂最好的文章.谢谢.…
概述 类加载器用来把类加载到Java虚拟机中.从JDK1.2版本开始,类的加载过程采用父委托机制,这种机制能更好地保证Java平台的安全.在此委托机制中,除了Java虚拟机自带的根类加载器以外,其余的类加载器都有且只有一个父加载器.当Java程序请求加载器loader1加载sample类时,loader1首先委托自己的父加载器去加载Sample类,若父加载器能加载,则由父加载器完成加载任务,否则才由加载器loader1本身加载sample类. 加载器的分类 Java虚拟机自带了以下几种加载器:…
1.用户自定义的类加载器: 要创建用户自己的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的findClass(String name)方法即可,该方法根据参数指定类的名字,返回对应的Class对象的引用. findClass protected Class<?> findClass(String name) throws ClassNotFoundException 使用指定的二进制名称查找类.此方法应该被类加载器的实现重写,该实现按照委托模型来加载类.在通过父…
我们知道我们编写的java代码,会经过编译器编译成字节码文件(class文件),再把字节码文件装载到JVM中,映射到各个内存区域中,我们的程序就可以在内存中运行了.那么字节码文件是怎样装载到JVM中的呢?中间经过了哪些步骤?常说的双亲委派模式又是怎么回事?本文主要搞清楚这些问题. 类装载流程 1.加载 加载是类装载的第一步,首先通过class文件的路径读取到二进制流,并解析二进制流将里面的元数据(类型.常量等)载入到方法区,在java堆中生成对应的java.lang.Class对象. 2.连接…
下图来自:http://blog.csdn.net/jiangwei0910410003/article/details/17733153 package com.test.jvm.common; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; /**…
一.回顾一下jdk自带的类加载器: 1.java虚拟机自带的加载器     根类加载器(Bootstrap,c++实现)     扩展类加载器(Extension,java实现)     应用类加载器(App,java实现) 2.用户自定义的类加载器     java.lang.ClassLoader的子类     用户可以定制类的加载方式 java的类加载机制默认情况下是采用委托模型:当加载某个类时JVM会首先尝试用当前类加载器的父类加载器加载该类,若父类加载器加载不到再由当前类加载器来加载,…
前言 JVM设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外面去实现,以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代码模块称为“类加载器”. 类与类加载器 类加载器虽然只用户实现类的加载动作,但它在Java程序中起到的作用却远远不限于类加载阶段.每个类都有一个独立的类名称空间,在比较两个类是否“相等”,只有两个类是由同一个类加载器加载的前提下才有意义,否则即使两个类来源于同一个Class文件,被同一个虚拟机加载,只要加载它们的…
—————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 1,类加载器.2,代理. 1,类加载器. Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader,AppClassLoader 类加载器也是Java类,因为其他是java类的类加载器本身也要被类加载器加载,显然必须有第一个类加载器不是java类,这正是BootStrap. Java虚拟机中的所有…
类加载器 加载类的开放性 类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因.在类加载的第一阶段“加载”过程中,需要通过一个类的全限定名来获取定义此类的二进制字节流,完成这个动作的代码块就是类加载器.这一动作是放在Java虚拟机外部去实现的,以便让应用程序自己决定如何获取所需的类. 虚拟机规范并没有指明二进制字节流要从一个Class文件获取,或者说根本没有指明从哪里获取.怎样获取.这种开放使得Java在很多领域得到充分运用,例如: 从ZIP包中读取,这很常…
JVM概述 1.Java虚拟机所管理的内存包括以下几个运行时数据区域:   ①.程序计数器     程序计数器是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器,字节码解释器工作时就是通过改变这个计数器的值来选取下一个要执行的字节码指令,分支.循环.跳转.异常处理都需要依赖于这个计数器来完成:     Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来来实现,在任何一个时刻.一个处理器都只会执行一条线程中的指令.因此,为了线程切换后能恢复到正确的执行位置,每个线…
虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代码模块称为“类加载器”. 1. 类与类加载器 类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远远不限于类加载阶段.对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间. JVM 中内置了三个重要的 ClassLoade…
一.类加载的机制的层次结构 每个编写的".java"拓展名类文件都存储着需要执行的程序逻辑,这些".java"文件经过Java编译器编译成拓展名为".class"的文件,".class"文件中保存着Java代码经转换后的虚拟机指令,当需要使用某个类时,虚拟机将会加载它的".class"文件,并创建对应的class对象,将class文件加载到虚拟机的内存,这个过程称为类加载,这里我们需要了解一下类加载的过程,…
当前类加载器(Current ClassLoader) 每个类都会使用自己的类加载器(即加载自身的类加载器)来去加载其他类(指所依赖的类) 如果ClassX引用了ClassY,那么ClassX的类加载器就会去加载ClassY(前提是ClassY尚未被加载) 线程上下文加载器(Context Classloader) 线程上下文加载器是从JDK1.2开始引入,类Thread中的getContextLoader() 与setContextClassLoader(ClassLoader cl) 分别用…
垃圾收集器2:收集算法 主要通过阅读<深入了解Java虚拟机>(周志明 著)和网络资源汇集而成,为本人学习JVM的笔记.同时,本文理论基于JDK 1.7版本,暂不考虑 1.8和1.9 的新特性,但可能初略提到. 垃圾收集算法主要有以下几种: 标记-清除算法(Mark-Sweep).复制算法(Copying) 和 标记-整理算法(Mark-Compact). 标记-清除算法(Mark-Sweep) 首先标记出所有需要回收的对象,标记完成后统一回收所有被标记对象. 主要不足之处: 效率问题 标记和…
垃圾收集器 主要通过阅读<深入了解Java虚拟机>(周志明 著)和网络资源汇集而成,为本人学习JVM的笔记.同时,本文理论基于JDK 1.7版本,暂不考虑 1.8和1.9 的新特性,但可能初略提到. 一.GC概念 垃圾收集(GC,Garbage Collection),就是在动态分配内存后对内存进行自动回收. 哪些内存需要回收? 已死对象所占的内存需要回收 . 什么时候回收? 当内存不够用时执行垃圾回收,主要分为 Minor GC(新生代垃圾回收) 和 Major GC(又称 Full GC,…
一个经典的延伸问题 我们来看一个经典的延伸问题,准备阶段谈到静态变量,那么对于常量和不同静态变量有什么区别? 需要明确的是,没有人能够精确的理解和记忆所有信息,如果碰到这种问题,有直接答案当然最好:没有的话,就说说自己的思路. 我们定义下面这样的类型,分别提供了普通静态变量.静态常量,常量又考虑到原始类型和引用类型可能有区别. public class CLPreparation { public static int a = 100; public static final int INT_C…
1.类加载的生命周期 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括: (1)加载 (2)验证 (3)准备 (4)解析 (5)初始化 (6)使用 (7)卸载 一共7个阶段.其中验证.准备.解析这3个阶段统称为连接.    这类加载的7个阶段顺序流程: 加载.验证.准备.初始化和卸载这5个阶段的顺序是确定的.类的加载过程中必须按照这种顺序按部就班地开始,而解析阶段则是不一定的,它在某些情况下可以在初始化阶段之后再开始,这是为了支持JAVA语言的运行时绑定(也称为动态绑定和晚期…
在views.py创建 一般用来cookies的装饰器 def auth(func): def inner(request, *args, **kwargs): v = request.COOKIES.get('username123') if not v: return redirect('/login') return func(request, *args, **kwargs) return inner @auth def index(request): return render(req…
类加载 在Java代码中,类型的加载.连接与初始化过程都是在程序运行期间完成的. 类型可以是Class,Interface, 枚举等. Java虚拟机与程序的生命周期 在如下几种情况下,Java虚拟机将结束生命周期 1)执行了System.exit() 方法 2)程序正常执行结束 3)程序在执行过程中遇到了异常或者错误而异常终止. 4) 由于操作系统出现错误导致Java虚拟机进程终止. 1.JVM运行流程,JVM基本结构 2.类加载器双亲委派模型 3.ClassLoader源码解析 4.从源码分…
在Java代码中,类型的加载.连接与初始化过程都是在程序运行期间完成的:提供了更大的灵活性,增加了更多的可能性 JVM启动过程包括:加载.连接.初始化 加载:就是将class文件加载到内存.详细的说是,将class文件加载到运行时数据区的方法区内(JDK7是方法区,JDK8对应的是Metaspace),然后创建一个java.lang.Class对象,用来封装类在方法区类的数据结构.JVM规范并未说明Class对象位于何处,Hotspot虚拟机将其放在了方法区.JVM规范允许类加载器在预料某个类将…
类的加载.连接与初始化                  • 1. 加载:查找并加载类的二进制数据         • 2. 连接             – 2.1 验证:确保被加载的类的正确性             – 2.2 准备:为类的静态变量分配内存,并将其初始化为默认值              – 2.3 解析:把类中的符号引用转换为直接引用         • 3. 初始化:为类的静态变量赋予正确的初始值         以下代码执行结果可以更清楚的理解上面的过程 1 2 3…
[深入Java虚拟机]之四:类加载机制 1,从Java虚拟机的角度,只存在两种不同的类加载器: 1,启动类加载器:它使用C++实现(这里仅限于Hotspot,也就是JDK1.5之后默认的虚拟机,有其他的虚拟机是用Java语言实现的),是虚拟机自身的一部分. 2,其他的类加载器:这些类加载器都由Java语言实现,独立于虚拟机之外,并且全部继承自抽象类java.lang.ClassLoader, 这些类加载器需要由启动类加载器加载到内存中之后才能去加载其他的类. 2,从Java开发人员的角度来看,类…
本文阅读时间大约9分钟. 写在前面 在Java面试中,在考察完项目经验.基础技术后,我会根据候选人的特点进行知识深度的考察,如果候选人简历上有写JVM(Java虚拟机)相关的东西,那么我常常会问一些JVM的问题.JVM的类加载机制是一个很经典的知识点,围绕这个知识点可以有下面这些难度不同的问题. 简单讲下JVM中的类加载过程 JVM中的类加载和卸载的时机? 如何理解JVM中不同类加载器的概念和作用? 简单讲下JVM中的双亲委派模型? 什么情况下会破坏双亲委派模型?为什么?可否举个例子? Tomc…
Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的findClass(String name)方法即可,该方法根据参数指定的类的名字,返回对应的Class对象的引用. 自定义类加载器的例子 代码: package com.mengdd.classloader; import java.io.ByteArrayOutputStream; import…
18年转眼就3月份都快结束了,也就是说一个季度就结束了:而我也因为年前笔记本坏了,今天刚修好了,那么也应该继续学习和博客之旅了.今年的博客之旅,从JVM开始学起,下面我们就言归正传,进入正题. 一.Java虚拟机与程序的生命周期 一个运行时的Java虚拟机(JVM)负责运行一个Java程序.当启动一个Java程序时,一个虚拟机实例诞生:当程序关闭退出,这个虚拟机实例也就随之消亡.如果在同一台计算机上同时运行多个Java程序,将得到多个Java虚拟机实例,每个Java程序都运行于它自己的Java虚…
一.JVM中的类加载器类型 从Java虚拟机的角度讲,只有两种不同的类加载器:启动类加载器和其他类加载器. 1.启动类加载器(Boostrap ClassLoader):这个是由c++实现的,主要负责JAVA_HOME/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作. 2.其他类加载器:由java实现,可以在方法区找到其Class对象.这里又细分为几个加载器 a).扩展类加载器(Extension ClassLoader):负责用于加载JAVA_HOM…
1.类加载流程图 从磁盘加载到销毁的完整过程. 2.类加载流程图2 1.加载: 就是把二进制形式的java类型读入java虚拟机中 2.连接: 验证.准备.解析. 连接就是将已经读入到内存的类的二进制数据和合并到虚拟机的运行时环境中 验证: 类文件的结构检查 语义检查 字节码验证 二进制兼容性验证 准备: 为类分配内存,设置默认值.但是在到达初始化之前,类变量都没有初始化为真正的初始值. 解析:解析过程就是在类型的常量池中寻找类.接口.字段和方法的符号引用,把这些符号引用替换为直接引用的过程.…
1,ClassLoader类加载器简介 在Java里面提供一个系统的环境变量:ClassPath,这个属性的作用主要是在JVM进程启动的时候进行类加载路径的定义,在JVM里面可以根据类加载器而后进行指定路径中类的加载,也就是说找到了类的加载器就意味着找到了类的来源. 系统类的加载器 如果说现在要想获得类的加载器,那么一定要通过ClassLoader来获取,而要想获取ClassLoader类的对象,则必须利用class类[反射的根源]实现,方法:public ClassLoader getClas…