首页
学习
活动
专区
工具
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 类的加载

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的接口是由根加载器进行加载

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

    java的类加载

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

    85520

    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都是为了在某些方面得到一些提高,以适应自己的需求。...比如IBM的JDK据说运行效率就比SUN的JDK高的多。 JDK是java开发工具包,在其安装目录下面有六个文件夹: 一些描述文件 一个src压缩文件。

    47330

    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

    37730

    java-jdk

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

    32420

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

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

    1K30

    Windows部署Java JDK的方法

    本文介绍在Windows电脑中,安装JDK(Java Development Kit),也就是Java开发工具包的详细方法。...JDK是Java软件开发的基础,由Oracle公司提供,用于构建在Java平台上运行的应用程序与组件等;其已经包括Java编译器(也就是javac)、Java运行时环境(Java Runtime Environment...如果希望在电脑中编辑并运行Java代码,那么JDK就是必不可少的。   ...在我这里,因为需要配置JDK 8,是一个相对非常老的版本,所以就需要在“Java archive”一栏中,选择对应的JDK版本;如下图所示。   随后,选择需要下载的具体版本。...接下来,变量名设置为Java_Home,变量值则设置为前述安装路径中,带有jdk字样的那个文件夹的路径——在本文中,这里的路径就是C:\Program Files\Java\jdk1.8.0_301。

    33410

    java类的加载机制

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

    41120

    Java Map的演进历史:从JDK 1.7到JDK 21

    Boot启动过程功能 Java 中的Map接口是集合框架中一个非常重要的组成部分,它用于存储键值对。...JDK 9 至 JDK 21 中 Map 的发展 从 JDK 9 开始直到最新的 JDK 21,虽然没有像 JDK 8 那样大规模地扩展Map接口的功能,但是仍然有一些细微但实用的内部优化被引入进来。...它在需要创建固定内容的Map时非常有用,比如配置信息、常量Map等场景 JDK 10 - JDK 21 的改动和新增方法(相对稳定阶段) 在这期间Map接口本身没有太多大规模的改动,但 Java 整体的性能优化和内部实现的调整可能会间接地影响...Eclipse 的 Collections 库 其实 Eclipse 基金会也创建一个开源的 Java 集合框架库叫 eclipse-collections。...总结 本文给大家介绍了关于 Java 中 Map 接口在 JDK1.7 到 JDk21 中演进以及新增方法,还介绍了一些 Guava、Commons Collections、Eclipse Collections

    10010

    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类的加载) 代理模式

    21920

    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

    60931

    【Java】类的加载过程

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

    29820

    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!!!来吧,试一下吧!

    36720

    Java的加载与执行

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

    54810

    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.3K20

    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 的类。

    47520

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券