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

Java加载-加载

什么是加载 虚拟机把描述数据从Class(Class文件或者网络或者其他地方,其实都是一串二进制流)加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用Java类型。...使用java.lang.reflect包方法进行反射调用时候,如果类没有初始化,则必须先初始化 初始化一个时候,如果父没有被初始化(只有,接口不会),则需要先初始化父 JVM启动时首先初始化主...java.lang.Class对象,作为方法区(元数据区)这个各种数据访问入口 二进制字节流来源可以是(但不仅仅是): Class文件 Zip包(也就是我们经常使用JAR包、WAR包) 网络...非数组加载需要通过加载器实现,既可以使用系统提供引导加载,也可以使用用户自定义加载器去完成,关于加载器后续我会单独写一篇文章来介绍,并且实现我们自己一个加载器。...对于数组来说,数组是由Java虚拟机直接创建,但是数组中元素类型需要通过加载加载。数组可见性与数组中元素可见性一致,如果元素不是引用类型,数组可见性将默认为public。

1.3K40

java加载

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

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

java 加载

2.为静态[变量]赋值,访问静态变量 3.调用静态方法 4.使用反射方法创建某个或接口反射方法java.lang.Class 5.初始化某子类...6.通过java.exe调用方法时 加载器 根加载器 扩展加载器 系统加载 其他加载方式都是属于被动加载...加载器之间严格遵守父委托机制 Bootsrap 根加载器 主要负责核心加载,例如java.lang 包加载 扩展加载器 扩展加载是根加载器,主要用于加载java_home 下jre...\lib\ext里面的库,java实现,可以将自己实现打包放到下面加载....系统加载器 负责加载classpath下库资源 双亲委托机制 当一个加载器调用loadclass之后,它并不会直接将其进行加载,而是先交给当前加载加载器尝试加载直到最顶层加载器,然后再依次向下进行加载

73810

JAVA加载

一、什么是加载 在介绍加载机制之前,先来看看,加载机制在整个 java 程序运行期间处于一个什么环节,下面使用一张图来表示: 从上图可以看,java 文件通过编译器变成了.class 文件,...有了这个印象之后我们再来看加载概念: 其实可以一句话来解释: **加载指的是将.class 文件中二进制数据读入到内存中,将其放在运行时数据区方法区内,然后在堆区创建一个 java.lang.Class...,则其父 也 会 被 初 始 化 Java 虚 拟 机 启 动 时 被 标 明 为 启 动 ( JavaTest),直接使用 java.exe 命令来运行某个主好了,到目前为止就是加载机制整个过程...我们看到 java为我们提供了三个加载器,应用程序都是由这三种加载器互相配合进行加载,如果有必要,我们还可以加入自定义加载器。这三种加载加载顺序是什么呢?...** 4、自定义加载器 在这一部分第一小节中,我们提到了 java 系统为我们提供三种加载器,还给出了他们层次关系图,最下面就是自定义加载器,那么我们如何自己定义 加载器呢?

1.1K75

java加载机制

一、什么是加载 加载指的是将.class文件中二进制数据读入到内存中,将其放在运行时数据区方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装在方法区内数据结构...加载:将.class文件中二进制数据读入到内存中,生成java.lang.Class对象。Class对象用来封装方法区内数据结构。JVM规范允许加载器预先加载。...也就是说,在JAVA同一个,如果用不同加载加载,则生成class对象认为是不同。...其次是考虑到安全因素,java核心api中定义类型不会被随意替换,假设通过网络传递一个名为java.lang.Integer,通过双亲委托模式传递到启动加载器,而启动加载器在核心Java API...发现这个名字,发现该类已被加载,并不会重新加载网络传递过来java.lang.Integer,而直接返回已加载Integer.class,这样便可以防止核心API库被随意篡改。

35420

Java加载过程

加载过程 加载过程又分为三个步骤: 过程1:装载(Loading) 将class文件读入内存,并为之创建一个java.lang.Class实例对象,此过程由加载器(负责加载,对应一个...过程2:链接(Linking) 验证(Verify):确保加载信息符合JVM规范,例如:每一个class文件都以cafebabe开头,没有安全方面的问题。...准备(Prepare):正式为(static)静态变量分配内存,并设置默认初始化值阶段。这些内存都在方法区中进行分配。...解析(Resolve):虚拟机常量池内得符号引用(常量名)替换为直接引用(地址)过程。 过程3:初始化(initialization) 执行构造器方法过程。...执行所有中(static)静态变量和(static)静态代码块中语句赋值动作,这些操作都在方法中进行。 因为加载过程中还没有对象存在,因而赋值操作也只能是对静态变量进行。

27520

Java加载机制

ClassLoader提供了一系列方法,比较重要方法如: JVM中加载树状层次结构 引导加载器(bootstrap class loader): 它用来加载 Java 核心库(jre/...加载扩展和应用程序加载器,并指定他们加载器,在java中获取不到。...该类加载器在此目录里面查找并加载 Java 。 (jar包用) 系统加载器(system class loader): 它根据 Java 应用路径(CLASSPATH)来加载 Java 。...(我们写代码用) 自定义加载器(custom class loader): 除了系统提供加载器以外,开发人员可以通过继承 java.lang.ClassLoader方式实现自己加载器,...双亲委派机制好处:   保证java核心库安全性(例如:如果用户自己写了一个java.lang.String就会因为双亲委派机制不能被加载,不会破坏原生String加载) 代理模式

19720

Java加载

分类 系统自带加载器 启动加载器(BootStrap) c++编写 加载核心库 java.* 3.拓展加载器 (Extension) java编写 加载拓展库 javax.* 4.应用程序加载...(AppClassLoader)java编写 加载程序所在目录 5.用户自定义加载器 自定义加载java编写 定制化加载 我们先了解2个方法 第一个方法 findClass /**...我们通过加载器去加载这个文件!我们通过加载器创建该实例!他就会打印构造函数中一句话!废话不多说我们直接上图吧!...然后开始编写我们自己加载器!...在测试之前回顾一下java一个基础!在被加载时候,会自动调用空构造函数!所以我们外部类,一旦被加载就会打印 HelloClasssLoader!!!来吧,试一下吧!

34020

java加载机制

1、什么是加载 加载指的是将.class文件中二进制数据读入到内存中,将其放在运行时数据区方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装在方法区内数据结构...加载最终产品是位于堆区中 Class对象, Class对象封装了在方法区内数据结构,并且向Java程序员提供了访问方法区内数据结构接口。...加载阶段完成后,虚拟机外部二进制字节流就按照虚拟机所需格式存储在方法区之中,而且在Java堆中也创建一个 java.lang.Class对象,这样便可以通过该对象访问方法区中这些数据。...,有很多其他虚拟机是用Java语言实现),是虚拟机自身一部分;所有其它加载器:这些加载器都由Java语言实现,独立于虚拟机之外,并且全部继承自抽象 java.lang.ClassLoader...启动加载器是无法被Java程序直接引用

56931

java加载过程和加载分析

那JVM是如何来让我们写java文件运行呢?    这个问题通常问法好像是:是如何被加载。   ...记得第一次遇见这个问题时候,同学给我回答是: 1.虚拟机会加载JDK里核心包 2.虚拟机会加载JDK里扩展包 3.虚拟机会加载JDK里系统包 4.虚拟机再会加载我们写好java。...最近在浏览一些博客时看到一些更为详细讲解,如java加载全过程,该博文有一万多点击,但感觉还是讲得不够详细,说了加载过程有哪些,但没有详细展开,说了一些初始化细节。  ...希望大家看了之后更能理解JVM工作原理和java生产过程(加载过程); 从被加载到虚拟机存中开始,到被卸载出内存为止,它整个生命周期包括 加载 → 验证 → 准备 → 解析 → 初始化 ...5.初始化 初始化阶段是加载过程中最后一步,这才是执行中定义java程序代码(也可以说是字节码)。

1.5K80

java加载过程 父_加载机制原理

; 程序所在平台强制结束了JVM进程; 加载器就是寻找或接口字节码文件进行解析并构造JVM内部对象表示组件,在java装载器把一个装入JVM,经过以下步骤: 1、加载:查找和导入Class文件...加载过程 当Java程序需要使用某个时,如果该类还未被加载到内存中,JVM会通过加载、连接(验证、准备和解析)、初始化三个步骤来对该类进行初始化。...当Java程序需要使用某个时,如果该类还未被加载到内存中,Java虚拟机会通过加载、连接和初始化一个Java, 使该类可以被正在运行Java程序所使用。...初始化时机 在和接口被加载和连接时机上, Java虚拟机规范给实现提供了一定灵活性 。但是它严格地定义了初始化时机 。所有的Java虚拟机实现必须在每个或接口首次主动使用时初始化 。...通过使用不同加载器,可以从不同来源加载二进制数据,通常有如下几种来源: 从本地文件系统加载class文件; 从一个ZIP、 JAR、 CAB或者其他某种归档文件中提取Java class文件,JDBC

66720

java加载过程和加载分析

那JVM是如何来让我们写java文件运行呢?    这个问题通常问法好像是:是如何被加载。   ...记得第一次遇见这个问题时候,同学给我回答是: 1.虚拟机会加载JDK里核心包 2.虚拟机会加载JDK里扩展包 3.虚拟机会加载JDK里系统包 4.虚拟机再会加载我们写好java。...最近在浏览一些博客时看到一些更为详细讲解,如java加载全过程,该博文有一万多点击,但感觉还是讲得不够详细,说了加载过程有哪些,但没有详细展开,说了一些初始化细节。  ...希望大家看了之后更能理解JVM工作原理和java生产过程(加载过程); 从被加载到虚拟机存中开始,到被卸载出内存为止,它整个生命周期包括 加载 → 验证 → 准备 → 解析 → 初始化 ...5.初始化 初始化阶段是加载过程中最后一步,这才是执行中定义java程序代码(也可以说是字节码)。

58050

Java加载顺序

前言 那一年,呼延十又回想起被加载顺序支配恐惧,笔试题上,好几个,几个方法,几个输出语句,让你按照顺序写出输出.我真的是有一句…. 但是呢,我们还是有了解一下必要,在编码过程中有许多应用....由于B有父,因此先加载A. 加载A静态代码块,输出A-----static. 加载B静态变量,调用了方法,输出B----- static func....加载B静态代码块,输出B----- static. 加载A普通变量,private int i = aFunc();由于调用了方法,因此输出A----- default....加载A构造方法,输出A----- constructor. 加载B普通变量,调用了方法,输出B----- default. 加载B构造方法,输出了B----- constructor....在这期间,发现一些小知识点,也记录一下. 静态变量,静态代码块加载顺序只和代码编写顺序有关. 普通变量及构造方法,顺序一定是先普通变量,再构造方法.

1.2K20

java加载常见几种问题理解加载机制

加载过程中相关概念详见- http://m.myexception.cn/program/1602930.html http://www.codeceo.com/article/java-class-loader-learn.html...Java编译器会在编译时直接把这个变量出现地方替换成它值,因此即使程序使用该静态变量,也不会导致该类初始化。...这要从java加载时机说起。 2 加载时机 从被加载到虚拟机内存中开始,直到卸载出内存为止,它整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载这7个阶段。...3 何时开始初始化 什么情况下需要开始加载过程第一个阶段:”加载”。...2、 将这个字节流所代表静态存储结构转化为方法区运行时数据结构。 3、 在Java堆中生成一个代表这个java.lang.Class对象,作为方法区这些数据访问入口。

40330

java加载加载机制

在沙箱组件中包括装载器结构,加载器体系结构也是java沙箱第一道防线,因为程序都是通过加载器才能够加载到JVM中。   加载器有三方面的作用: 1. 它防止了恶意代码去干涉善意代码 2....用一个图形表示就是:  引导加载器(bootstrap class loader):它用来加载 Java 核心库,是用原生代码来实现,并不继承自java.lang.ClassLoader。... 扩展加载器(extensions class loader):它用来加载 Java 扩展库。Java 虚拟机实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 。... 系统加载器(system class loader):它根据 Java 应用路径(CLASSPATH)来加载 Java 。一般来说,Java 应用都是由它来完成加载。...关于java加载机制推荐大家看这篇文章《深入探讨 Java 加载器》,IBM文档,写很详细。

97310

加载Java加载机制解析

本文选自《揭秘Java虚拟机:JVM设计原理与实现》 加载——镜像与静态字段 加载最终结果便是在JVM方法区创建一个与Java对等instanceKlass实例对象,但是在JVM创建完instanceKlass...以上便是一个Java加载核心流程。了解了加载核心流程之后,也许聪明你会忍不住想,Java加载到底何时才会被触发呢?...Java加载触发条件比较多,其中比较特殊便是Java程序中包含main()主函数——这种类一般也被称作Java程序。...Java加载由JVM自动触发——JVM执行完自身若干初始化逻辑之后,第一个加载便是Java程序。总体上而言,Java加载链路如下: ?...Java程序主加载器默认是系统加载器,该加载器是JDK库中定义sun.misc.AppClassLoader,关于该加载细节会在后文详述。JVM体系中加载继承关系如下图所示。 ?

82810

JAVA加载过程

一、什么是加载 在介绍加载机制之前,先来看看,加载机制在整个 java 程序运行期间处于一个什么环节,下面使用一张图来表示: 1.png 从上图可以看,java 文件通过编译器变成了.class...有了这个印象之后我们再来看加载概念: 其实可以一句话来解释: **加载指的是将.class 文件中二进制数据读入到内存中,将其放在运行时数据区方法区内,然后在堆区创建一个 java.lang.Class...,则其父 也 会 被 初 始 化 Java 虚 拟 机 启 动 时 被 标 明 为 启 动 ( JavaTest),直接使用 java.exe 命令来运行某个主好了,到目前为止就是加载机制整个过程...我们看到 java为我们提供了三个加载器,应用程序都是由这三种加载器互相配合进行加载,如果有必要,我们还可以加入自定义加载器。这三种加载加载顺序是什么呢?...** 4、自定义加载器 在这一部分第一小节中,我们提到了 java 系统为我们提供三种加载器,还给出了他们层次关系图,最下面就是自定义加载器,那么我们如何自己定义 加载器呢?

56474

Java 加载过程

以下哪项不属于java加载过程?...A.生成java.lang.Class对象 B.int类型对象成员变量赋予默认值 C.执行static块代码 D.方法解析 从被加载到虚拟机内存中开始,到卸载出内存为止,它整个生命周期包括:加载...加载、验证、准备、初始化和卸载这5个阶段顺序是确定加载过程必须按照这种顺序按部就班地开始,而解析阶段则不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言运行时绑定(也称为动态绑定或晚期绑定...加载加载阶段(可以参考java.lang.ClassLoaderloadClass()方法),虚拟机需要完成以下3件事情: 通过一个全限定名来获取定义此类二进制字节流(并没有指明要从一个Class...初始化 初始化阶段是加载过程最后一步,到了初始化阶段,才真正开始执行中定义java程序代码。

65020

Java加载机制

1、描述加载过程及各个步骤主要工作? 答: 加载过程可以大体分为三个大阶段:加载、连接、初始化。其中,连接阶段又可以细分为:验证、准备、解析这三个阶段。...各个步骤主要工作如下: 加载:一个规则,就是需要把.java文件如何变成.class文件。...这个规则就是在Java堆中生成一个代表这个java.lang.Class对象,作为方法区访问这些数据访问入口。 验证:验证字节流是否符合Class文件格式规范。...答:当某个加载器在接到加载请求时,会将加载任务委托给父加载器,依次递归,父加载器可以完成加载任务,就成功返回;不能加载则子类加载器自己完成加载。...意义:双亲委派避免重复加载问题,以及避免Java核心API被篡改,保证了代码安全。

64431
领券