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

Java加载-加载

什么是类加载 虚拟机把描述类数据从Class(Class文件或者网络或者其他地方,其实都是一串二进制流)加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用Java类型。...使用java.lang.reflect包方法进行反射调用时候,如果类没有初始化,则必须先初始化 初始化一个类时候,如果父类没有被初始化(只有类父类,接口父类不会),则需要先初始化父类 JVM启动时首先初始化主类...如果一个java.lang.invoke.MethodHandle实例最后解析结果是REF_getStatic、REF_putStatic、REF_invokeStatic方法句柄,如果方法句柄所对应类没有进行过初始化...java.lang.Class对象,作为方法区(元数据区)这个类各种数据访问入口 二进制字节流来源可以是(但不仅仅是): Class文件 Zip包(也就是我们经常使用JAR包、WAR包) 网络...对于数组类来说,数组类是由Java虚拟机直接创建,但是数组中元素类型需要通过类加载加载。数组类可见性与数组中元素可见性一致,如果元素不是引用类型,数组类可见性将默认为public。

1.3K40

java加载

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

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

java加载

2.为静态[变量]赋值,访问静态变量 3.调用静态方法 4.使用反射方法创建某个类或接口反射方法java.lang.Class 5.初始化某子类...6.通过java.exe调用类方法时 类加载器 根类加载器 扩展类加载器 系统类加载 其他加载方式都是属于被动加载...类加载器之间严格遵守父委托机制 Bootsrap 根加载器 主要负责核心类库加载,例如java.lang 包加载 扩展类加载器 扩展类加载父类是根加载器,主要用于加载java_home 下jre...\lib\ext里面的类库,java实现,可以将自己实现类打包放到下面加载....线程上下文类加载器 JVM类加载器双亲委托机制自身缺陷,JDK提供了很多SPI,例如JDBC,JNDI接口,具体实现有各个不同厂家进行提供,想要更换连接器,只需要切换即可,但是例如JDBC接口是由根加载器进行加载

73710

Java-JDK

它是整个java实现跨平台最核心部分,负责解释执行字节码文件,是可运行java字节码文件虚拟计算机。...Java JRE,是JDK一部分 JDK JDK(Java开发工具包),JDK是整个JAVA核心。 包括了Java运行环境(JRE),可以看出来JDK包含JRE,而JRE包含JVM。...image.png 最主流JDK是Sun公司发布JDK,除了Sun之外,还有很多公司和组织都开发了属于自己JDK。...例如:国外IBM公司开发了属于自己JDK, 国内淘宝也开发了属于自己JDK, 各个组织开发自己JDK都是为了在某些方面得到一些提高,以适应自己需求。...比如IBMJDK据说运行效率就比SUNJDK多。 JDKjava开发工具包,在其安装目录下面有六个文件夹: 一些描述文件 一个src压缩文件。

43630

java-jdk

Java后端面试知识点汇总✈ 为了不侵犯作者版权,选择了转载,我补充了很多自己理解。...JDK目录 JDK&JRE JavaLongAdder和AtomicLong有什么区别 JDK&JRE Java运行时环境(JRE)是将要执行Java程序Java虚拟机。...Java开发工具包(JDK)是完整Java软件开发包,包含了JRE,编译器和其他工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。...JavaLongAdder和AtomicLong有什么区别 不理解回答:JDK1.8引入了LongAdder类。CAS机制就是,在一个死循环内,不断尝试修改目标值,直到修改成功。...AtomicLong 包含有原子性读、写结合api;LongAdder 没有原子性读、写结合api,能保证结果最终一致性。

29720

Java_JDK

JDK简介   JDK全称Java SE Development kit(JDK),即java标准版开发包,是Oracle提供一套用于开发java应用程序开发包,它提供编译,运行java程序所需要各种工具和资源...,包括java编译器,java运行时环境,以及常用java类库等 推荐使用jdk1.8版本 优点:   1)jdk中最稳定版本   2)企业工作和高校学习都推荐使用版本 JDK安装 安装教程一...JDK8、Windows10为例   1.运行安装程序:jdk-8u152-windows-x64.exe;   2.尽量更改默认安装目录(可选择默认路径),方便以后管理   3.JDK安装完成后...,系统会弹出一个安装JRE提示窗口,因为JDK已经包含了JRE,我们可以直接关闭窗口,当然你也可以选择安装   这样Java_JDK就安装完成了 bin文件夹:全都是工具 include文件夹...:包含了其他语言写程序 jre文件夹:Java运行环境 lib文件夹:包含了人家写好所有Java类 src.zip压缩文件:Java源代码 JDK下载地址   1.Oracle官网:立即下载   2

34930

JDK21更新内容:动态加载禁用

代理是一种能够修改或监视应用程序行为机制,它可以通过字节码注入来实现。 2. 为什么需要动态加载代理禁用准备? 动态加载代理允许开发人员在运行时修改和监视Java应用程序行为。...因此,为了加强Java应用程序安全性,限制动态加载代理使用是很有必要。 3....动态加载代理禁用准备实现原理 动态加载代理禁用准备实现涉及到以下几个方面: 3.1 修改ClassLoader 该提案建议修改Java虚拟机加载器,以阻止动态加载代理。...动态加载代理禁用准备优点 提高Java应用程序安全性:禁止动态加载代理可以防止恶意代码利用其功能执行潜在危险操作。...总结 动态加载代理禁用准备是一个Java增强提案,旨在禁止动态加载代理以提高应用程序安全性。它通过修改类加载器、Instrumentation API和安全管理器来实现禁止动态加载代理功能。

67630

Java加载机制

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

19620

Java加载与执行

1996年:JDK1.0诞生 什么是JDK? Java开发工具包 做Java开发必须安装一个工具包,该工具包需要从官网下载。...Java语言运行过程中产生垃圾是自动回收,不需要程序员关心。 6. 安全性 3. Java加载与执行 Java程序运行包括两个非常重要阶段 编译阶段 运行阶段 1....而这个源程序是不能随意编写,必须符合Java语法规则 Java程序员需要使用JDK当中自带javac.exe命令进行Java程序编译。 javac怎么用呢?...运行阶段【可以在其它操作系统当中,跨平台】 JDK安装之后,除了自带一个javac.exe之外,还有另一个工具/命令,叫做java.exe, java.exe命令主要负责运行阶段。...会启动类加载器classLoader ClassLoader会去硬盘上搜索A.class文件,找到该文件则将该字节码文件装载到JVM当中。

51910

Java加载

作用 编译器先把java文件编译成class字节码文件 ClassLoad会把字节码文件转换成jvm中Class对象 jvm再把class对象转成实例对象 ClassLoad在java 中有着非常重要作用...它是java核心组件,所有的class都是通过ClassLoad进行加载,ClassLoad负责将class文件里二进制流输入到系统中交给jvm进行连接,初始化操作。...分类 系统自带加载器 启动类加载器(BootStrap) c++编写 加载核心库 java.* 3.拓展类加载器 (Extension) java编写 加载拓展库 javax.* 4.应用程序加载类...(AppClassLoader)java编写 加载程序所在目录 5.用户自定义加载器 自定义类加载java编写 定制化加载 我们先了解2个方法 第一个方法 findClass /**...在测试之前回顾一下java一个基础!类在被加载时候,会自动调用空构造函数!所以我们外部类,一旦被加载就会打印 HelloClasssLoader!!!来吧,试一下吧!

33920

java加载机制

这几种类加载层次关系如下图所示: image.png 站在Java虚拟机角度来讲,只存在两种不同加载器:启动类加载器:它使用C++实现(这里仅限于Hotspot,也就是JDK1.5之后默认虚拟机...,有很多其他虚拟机是用Java语言实现),是虚拟机自身一部分;所有其它加载器:这些类加载器都由Java语言实现,独立于虚拟机之外,并且全部继承自抽象类 java.lang.ClassLoader...站在Java开发人员角度来看,类加载器可以大致划分为以下三类: 启动类加载器: BootstrapClassLoader,负责加载存放在 JDK\jre\lib(JDK代表JDK安装目录,下同)下,...启动类加载器是无法被Java程序直接引用。...扩展类加载器: ExtensionClassLoader,该加载器由 sun.misc.Launcher$ExtClassLoader实现,它负责加载 JDK\jre\lib\ext目录中,或者由 java.ext.dirs

56631

Java】类加载过程

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

27420

java加载机制

一、什么是类加载加载指的是将类.class文件中二进制数据读入到内存中,将其放在运行时数据区方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装类在方法区内数据结构...加载阶段完成后,虚拟机外部二进制字节流就按照虚拟机所需格式存储在方法区之中,而且在Java堆中也创建一个 java.lang.Class类对象,这样便可以通过该对象访问方法区中这些数据。...也就是说,在JAVA同一个类,如果用不同加载加载,则生成class对象认为是不同。...,主要加载JAVA_HOME/lib/ext目录中类库。...其次是考虑到安全因素,java核心api中定义类型不会被随意替换,假设通过网络传递一个名为java.lang.Integer类,通过双亲委托模式传递到启动类加载器,而启动类加载器在核心Java API

35120

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 JDK 环境搭建

当我们没有配置 jdk 环境变量时,在 jdk/bin 目录外是运行不了 javac.exe (java 编译器) 和 java.exe (java 解释器) 。...电脑如果装了多个版本 jdk,我们只需要在 JAVA_HOME 中把需要 jdk 目录添加进去,而不用在 path 里面加 bin 目录路径,这样可以防止多个版本调用时版本不确定性。...在 JDK1.5 之后版本,配置 Java 环境变量时候我们不再需要配置 classpath,只需要配置 JAVA_HOME 以及 path 即可!...在 JDK1.5 以后,CLASSPATH 并不是必须配置了,在 JDK1.5 之前,是没有办法在当前目录下加载(找不到 JDK 目录下 lib 文件夹中 .jar 文件),所以我们需要通过配置...CLASSPATH,但 JDK1.5 之后,JRE 能自动搜索目录下类文件,并且加载 dt.jar 和 tool.jar 类。

42120
领券