首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java加载-加载

什么是加载 虚拟机把描述的数据从Class(Class文件或者网络或者其他地方,其实都是一串二进制流)加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以虚拟机直接使用的Java类型。...JVM并没有对什么时候开启加载阶段进行强制约束,但是对于初始化阶段严格规定了有且只有5种情况必须立即对进行初始化: 遇到new(new关键字实例化对象)、getstatic(读取一个的静态字段(final...使用java.lang.reflect包的方法进行反射调用的时候,如果类没有初始化,则必须先初始化 初始化一个的时候,如果父没有初始化(只有的父,接口的父不会),则需要先初始化父 JVM启动时首先初始化主...java.lang.Class对象,作为方法区(元数据区)这个的各种数据的访问入口 二进制字节流的来源可以是(但不仅仅是): Class文件 Zip包(也就是我们经常使用的JAR包、WAR包) 网络...对于数组来说,数组是由Java虚拟机直接创建的,但是数组中的元素类型需要通过加载加载。数组的可见性与数组中元素的可见性一致,如果元素不是引用类型,数组的可见性将默认为public。

1.3K40
您找到你想要的搜索结果了吗?
是的
没有找到

你知道 Java 是如何加载的吗?

所以为了理解双亲委派,最好的方式,就是先了解下 ClassLoader 的加载流程。 Java 是如何加载的 2.1:何时加载 我们首先要清楚的是,Java 何时会被加载?...2.3:JVM 是怎么加载的 JVM 默认用于加载用户程序的 ClassLoader 为 AppClassLoader,不过无论是什么ClassLoader,它的根父都是 java.lang.ClassLoader...return result; } Java_java_lang_ClassLoader_defineClass1 主要是调用了JVM_DefineClassWithSource()加载,跟着源码往下走...这些信息本来记录在 Class 文件中,所以说,InstanceKlass 就是一个 Java Class 文件加载到内存后的形式。...请问,为何这里会重新加载 Student.Class?jvm 是不是有自己的 class 加载链路,然后系统循着链路去查找 class 是否已经加载

1K20

何时(不)使用Java抽象

来源:SpringForAll社区 抽象是许多面向对象语言的核心特性,例如Java。也许是因为这个原因,他们往往过度使用,实际上误用了。...在本文中,我们将使用一些模式和反模式的示例来说明何时使用抽象方法,何时不使用。 虽然本文从Java的角度介绍了该主题,但它也与大多数其他面向对象的语言相关,即使那些没有抽象概念的语言也是如此。...现在,有一组实用方法可以任何可能需要它们的重用。此外,我们可以将这些方法分解为相关的组。上图描绘了一个名为的 UrlUtility, 它可能只包含与创建和解析URL相关的方法。...实际上,我发现抽象的大多数典型用法都可以认为是反模式,抽象有一些很好的用法。 模板方法 话虽如此,让我们看一下模板方法 设计模式描述的最佳用途之一 。...原文链接:https://dzone.com/articles/when-to-use-java-abstract-classes 作者:Dave Taubler 译者:xuli

1.1K30

JAVA加载

一、什么是加载 在介绍加载机制之前,先来看看,加载机制在整个 java 程序运行期间处于一个什么环节,下面使用一张图来表示: 从上图可以看,java 文件通过编译器变成了.class 文件,...(LinkageError 错误)如果这个一直没有程序主动使用,那么加载器就不会报告错误。...首先看的就是加载机制的过程。 二、加载的过程 加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。...在 Java 中对变量进行初始值设定有两种方式: ①声明变量是指定初始值 ②使用静态代码块为变量指定初始值 JVM 初始化步骤 1、假如这个还没有加载和连接,则程序先加载并连接该类...,则其父 也 会 初 始 化 Java 虚 拟 机 启 动 时 标 明 为 启 动 ( JavaTest),直接使用 java.exe 命令来运行某个主好了,到目前为止就是加载机制的整个过程

1.1K75

你知道 Java 是如何加载的吗?

所以为了理解双亲委派,最好的方式,就是先了解下 ClassLoader 的加载流程。 Java 是如何加载的 2.1:何时加载 我们首先要清楚的是,Java 何时会被加载?...2.3:JVM 是怎么加载的 JVM 默认用于加载用户程序的 ClassLoader 为 AppClassLoader,不过无论是什么ClassLoader,它的根父都是 java.lang.ClassLoader...return result; } Java_java_lang_ClassLoader_defineClass1 主要是调用了JVM_DefineClassWithSource()加载,跟着源码往下走...这些信息本来记录在 Class 文件中,所以说,InstanceKlass 就是一个 Java Class 文件加载到内存后的形式。...请问,为何这里会重新加载 Student.Class?jvm 是不是有自己的 class 加载链路,然后系统循着链路去查找 class 是否已经加载

76830

java加载加载机制

在沙箱组件中包括装载器结构,加载器体系结构也是java沙箱的第一道防线,因为程序都是通过加载器才能够加载到JVM中的。   加载器有三方面的作用: 1. 它防止了恶意代码去干涉善意代码 2....它守护了信任的库边界 3. 它将代码归入某类(成为保护域),该类确定了代码可以进行哪些操作。   ... 扩展加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 。... 系统加载器(system class loader):它根据 Java 应用的路径(CLASSPATH)来加载 Java 。一般来说,Java 应用的都是由它来完成加载的。...关于java加载机制推荐大家看这篇文章《深入探讨 Java 加载器》,IBM文档,写的很详细。

98010

加载Java加载机制解析

在JDK 6中,创建镜像的逻辑包含在instanceKlassKlass::allocate_instance_klass()函数中,在该函数的末尾执行 java_lang_Class::create_mirror...JVM之所以在instanceKlass之外再创建一个mirror,是有用意的,总体而言,java.lang.Class是为了Java程序调用,而instanceKlass则是为了JVM内部访问。...如果思维再放得开阔一点,可以这样认为,即使JVM内部没有安排java.lang.Class这么一个媒介作为面向对象反射的基础,那么JVM也必然要定义另外,假设这个就叫作Reflection,这个能够直接...以上便是一个Java加载的核心流程。了解了加载的核心流程之后,也许聪明的你会忍不住想,Java加载到底何时才会被触发呢?...Java加载由JVM自动触发——JVM执行完自身的若干初始化逻辑之后,第一个加载的便是Java程序的主。总体上而言,Java加载的链路如下: ?

85410

JAVA加载过程

一、什么是加载 在介绍加载机制之前,先来看看,加载机制在整个 java 程序运行期间处于一个什么环节,下面使用一张图来表示: 1.png 从上图可以看,java 文件通过编译器变成了.class...(LinkageError 错误)如果这个一直没有程序主动使用,那么加载器就不会报告错误。...首先看的就是加载机制的过程。 二、加载的过程 加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。...在 Java 中对变量进行初始值设定有两种方式: ①声明变量是指定初始值 ②使用静态代码块为变量指定初始值 JVM 初始化步骤 1、假如这个还没有加载和连接,则程序先加载并连接该类...,则其父 也 会 初 始 化 Java 虚 拟 机 启 动 时 标 明 为 启 动 ( JavaTest),直接使用 java.exe 命令来运行某个主好了,到目前为止就是加载机制的整个过程

56574

Java 加载过程

以下哪项不属于java加载过程?...A.生成java.lang.Class对象 B.int类型对象成员变量赋予默认值 C.执行static块代码 D.方法解析 加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载...加载加载阶段(可以参考java.lang.ClassLoader的loadClass()方法),虚拟机需要完成以下3件事情: 通过一个的全限定名来获取定义此类的二进制字节流(并没有指明要从一个Class...java方法,而把value赋值为123的putstatic指令是程序编译后,存放于构造器()方法之中,所以把value赋值为123的动作将在初始化阶段才会执行。...初始化 初始化阶段是加载过程的最后一步,到了初始化阶段,才真正开始执行中定义的java程序代码。

65820

java加载

加载机制 JVM加载机制分为五个部分: 加载,验证,准备,解析,初始化 加载 加载加载过程中的一个阶段,会在内存中生成一个代表这个java.lang.Class 对象,作为方法区这个的各种数据的入口...初始化 初始化阶段是加载的最后一个阶段,前面的加载阶段之后,除了在加载阶段可以自定义加载器之外,其他操作都有JVM主导 到了初始化阶段,才开始真正执行中定义的java程序代码 初始化阶段是 执行构造器...什么时候触发加载 什么情况需要开始加载过程的第一阶段(加载)呢? Java虚拟机规范中并没有进行强制约束,这点可以交给虚拟机的具体实现来自由把握。...) 负责加载 JAVA_HOME\lib 目录中的,或通过-Xbootclasspath 参数指定路径中的,且 虚拟机认可(按文件名识别,如 rt.jar)的。...扩展加载器(Extension ClassLoader) 负责加载 JAVA_HOME\lib\ext 目录中的,或通过 java.ext.dirs 系统变量指定路径中的 库。

83420

Java加载机制

双亲委派 所谓的双亲委派,则是先让父加载器试图加载该Class,只有在父加载器无法加载该类时才尝试从自己的路径中加载该类。...双亲委派 双亲委派机制的优势:采用双亲委派模式的是好处是Java随着它的加载器一起具备了一种带有优先级的层次关系,通过这种层级关可以避免的重复加载,当父亲已经加载了该类时,就没有必要子ClassLoader...其次是考虑到安全因素,java核心api中定义类型不会被随意替换。...假设通过网络传递一个名为java.lang.Integer的,通过双亲委托模式传递到启动加载器,而启动加载器在核心Java API发现这个名字的,发现该类已被加载,并不会重新加载网络传递的过来的...java.lang.Integer,而直接返回已加载过的Integer.class,这样便可以防止核心API库随意篡改。

8710

Java加载机制

各个步骤的主要工作如下: 加载:一个规则,就是需要把.java文件如何变成.class文件。...这个规则就是在Java堆中生成一个代表这个java.lang.Class对象,作为方法区访问这些数据的访问入口。 验证:验证字节流是否符合Class文件格式的规范。...答:当某个加载器在接到加载的请求时,会将加载任务委托给父加载器,依次递归,父加载器可以完成加载任务,就成功返回;不能加载则子类加载器自己完成加载。...有3加载器: 启动加载器(Bootstrap ClassLoader) 扩展加载器(Extension ClassLoader) 应用程序加载器(Application ClassLoader...意义:双亲委派避免的重复加载问题,以及避免Java核心的API篡改,保证了代码安全。

65031

Java加载

参考链接: C++和Java中的Foreach 要想搞清楚这两个方法的区别,我们需要了解一下Class的加载过程。...Class的加载过程分为三步:  loading(装载)linking(链接)initializing(初始化)  大家可以通过这篇文章:Java魔法堂:加载机制入了个门来了解的详细加载过程。...  通过initialize参数我们可以发现,该参数控制了加载过程的第三步(初始化),该参数在’Class.forName(String className)方法中默认值为true`,因此在加载的过程中会初始化的相关信息...原因是加载过程中的缓存机制,由于方法1已经加载了该类,因此方法3不会再次加载该类,所以没有输出flag值,为了测试缓存的问题,我们将方法1与方法3的位置互换,程序的执行结果如下,可以看到方法3加载了该类...我们每次修改完代码都需要重启JVM来执行新的代码也是由加载的缓存机制造成的。

30530

Java加载,getClassLoader()

转自 【java 加载的深入研究1】loadClass()的研究,IBM深入探讨 Java 加载加载器基本概念 顾名思义,加载器(class loader)用来加载 Java Java...加载器负责读取 Java 字节代码,并转换成 java.lang.Class的一个实例。每个这样的实例用来表示一个 Java 。...加载时机 加载到虚拟机内存中开始,直到卸载出内存为止,它的整个生命周期包括了: 加载、验证、准备、解析、初始化、使用和卸载 这7个阶段。...被动引用例子 子类调用父的静态变量,子类不会被初始化。只有父初始化。 。 对于静态字段,只有直接定义这个字段的才会被初始化....只有两者都相同的情况,才认为两个是相同的。即便是同样的字节代码,不同的加载加载之后所得到的,也是不同的。

27320

Java面试-加载

文章目录 加载过程 加载(Load) 连接 初始化 加载器是如何定位到具体的文件并读取的?...在加载时,使用双亲委派模型(朔源委派加载模型) Java加载器是一个运行时核心基础设施模块,主要在启动之初进行的Load Link Init,即加载 连接 初始化 加载是一个将.class字节码文件实例化成...加载(Load) 第一步,Load阶段读取文件产生二进制流,并转化为特定的数据结构,初步校验cafe babe 魔法数,常量池,文件长度,是否有父等,然后创建对应java.lang.Class实例...Bootstrap ClassLoader 最高一层是家族中威望最高的Bootstrap,他是JVM启动时创建的,通常有与操作系统相关的本地代码实现,是最根基的加载器,负责装载最核心的Java,比如...第二,第三层加载器为Java语言实现,用户也可以自定义加载器。 加载规则 低层次的当前加载器,不能覆盖更高层加载器已经加载.

34420

Java加载

什么是加载器 通过一个的全限定名来获取描述此类的二进制字节流这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的。实现这个动作的代码模块称为“加载器”。...它负责将JRE/lib/ext或者由系统变量java.ext.dir指定位置中的加载到内存中。开发者可以直接使用标准扩展加载器。...Java虚拟机的第一个加载器是Bootstrap,这个加载器很特殊,它不是Java,因此它不需要被别人加载,它嵌套在Java虚拟机内核里面,也就是JVM启动的时候Bootstrap就已经启动,它是用...当Java虚拟机要加载一个时,到底派出哪个加载器去加载呢? 首先当前线程的加载器去加载线程中的第一个(假设为A)。 如果类A中引用了B,Java虚拟机将使用加载A的加载器去加载B。...比如String.class,每次加载都委托给父 加载器,最终都是BootstrapClassLoader,都保证java核心都是BootstrapClassLoader加载的,保证了java的安全与稳定性

77331

java加载过程

转载请注明出处:http://blog.csdn.net/ns_code/article/details/17881581 加载过程 加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括...所有其他的加载器:这些加载器都由Java语言实现,独立于虚拟机之外,并且全部继承自抽象java.lang.ClassLoader,这些加载器需要由启动加载加载到内存中之后才能去加载其他的。...它负责加载存放在JDK\jre\lib(JDK代表JDK的安装目录,下同)下,或-Xbootclasspath参数指定的路径中的,并且能虚拟机识别的库(如rt.jar,所有的java....*开头的均被Bootstrap ClassLoader加载)。启动加载器是无法Java程序直接引用的。...该模型在JDK1.2期间引入并广泛应用于之后几乎所有的Java程序中,但它并不是一个强制性的约束模型,而是Java设计者们推荐给开发者的一种加载器实现方式。

1.1K21

Java加载机制

Java加载到JVM内存开始,到卸载出内存为止,它的整个生命周期包括了:加载(Loading),验证(Verification),准备(Preparation),解析(Resolution),初始化...加载Java加载需要用到加载器。加载器负责装入,搜索网络,jar,zip,文件夹,二进制数据,内存等指定位置的资源。...一个Java程序运行,至少有3个不同的加载器实例,负责加载不同的。...双亲委派模型 Java中的并不会重复加载,同一加载器,同一名,代表的是同一个。而避免重复加载的主要原因在于JVM在加载时默认采用的是双亲委派模型。...在满足该Class的所有实例都已被垃圾回收,同时加载该类的ClassLoader实例也已经垃圾回收,那么这个会被JVM卸载掉。

56910
领券