jvmclass被加载到了那里(Java类加载机制)

2025-06-30 08:15:01 0

jvmclass被加载到了那里(Java类加载机制)

其实jvmclass被加载到了那里的问题并不复杂,但是又很多的朋友都不太了解Java类加载机制,因此呢,今天小编就来为大家分享jvmclass被加载到了那里的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

本文目录

Java类加载机制

每个开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这背后就涉及到了java技术体系中的类加载。Java的类加载机制是技术体系中比较核心的部分,虽然和大部分开发人员直接打交道不多,但是对其背后的机理有一定理解有助于排查程序中出现的类加载失败等技术问题,对理解java虚拟机的连接模型和java语言的动态性都有很大帮助。电脑培训就得好好的为大家介绍一下。

那么什么是类的加载?

类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。

Java类加载机制

类加载器是Java语言的一个创新,也是Java语言流行的重要原因之一。它使得Java类可以被动态加载到Java虚拟机中并执行。类加载器从JDK1.0就出现了,最初是为了满足JavaApplet的需要而开发出来的。JavaApplet需要从远程下载Java类文件到浏览器中并执行。现在类加载器在Web容器和OSGi中得到了广泛的使用,而类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class文件缺失或存在错误,类加载器必须在程序首次主动使用该类时才报告错误(LinkageError错误)如果这个类一直没有被程序主动使用,那么类加载器就不会报告错误。

类的生命周期

类加载的过程中包括有加载,验证,准备,解析,初始化五个阶段。而需要注意的是在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为动态绑定或晚期绑定)。另外注意这里的几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶段通常都是互相交叉地混合进行的,通常在一个阶段执行的过程中调用或激活另一个阶段。

Java中的“类”是什么时候被加载到虚拟机

1、编译和运行概念要搞清:编译即javac的过程,负责将.java文件compile成.class文件,主要是类型、格式检查与编译成字节码文件,而加载是指java *的过程,将.class文件加载到内存中去解释执行,即运行的时候才会有加载一说。

2、类的加载时机,肯定是在运行时,但并不是一次性全部加载,而是按需动态,依靠反射来实现动态加载,一般来说一个class只会被加载一次,之后就会从jvm的class实例的缓存中获取,谁用谁取就可以了,不会再去文件系统中加载.class文件了。

Java

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

请描述一下JVM加载class文件的原理机制

原理:Java中的所有类,都需要由类加载器装载到JVM中才能运行。类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中。

在写程序的时候,我们几乎不需要关心类的加载,因为这些都是隐式装载的,除非我们有特殊的用法,像是反射,就需要显式的加载所需要的类。

类装载方式,有两种 :

1、隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。

2、显式装载, 通过class.forname()等方法,显式加载需要的类

Java类的加载是动态的,它并不会一次性将所有类全部加载后再运行,而是保证程序运行的基础类(像是基类)完全加载到jvm中,至于其他类,则在需要的时候才加载。这当然就是为了节省内存开销。

扩展资料:

Java的类加载器有三个,对应Java的三种类:

Bootstrap Loader  :启动类加载器,是虚拟机自身的一部分。负责将存放在\lib目录中的类库加载到虚拟机中。其无法被Java程序直接引用。 负责加载系统类 (指的是内置类,像是String,对应于C#中的System类和C/C++标准库中的类)。

ExtClassLoader   : 负责加载扩展类(就是继承类和实现类)。

AppClassLoader   :负责加载用户类路径(ClassPath)上所指定的类库(程序员自定义的类)。

JVM中类的加载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。

由于Java的跨平台性,经过编译的Java源程序并不是一个可执行程序,而是一个或多个类文件。当Java程序需要使用某个类时,JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化。

类的加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象。加载完成后,Class对象还不完整,所以此时的类还不可用。

当类被加载后就进入连接阶段,这一阶段包括

验证:为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。

什么是类的加载何时加载

当程序主动使用某个类时,如果该类还未被加载到内存中,系统会通过加载,连接,初始化三个步骤来对该类进行初始化,JVM将会连续完成这三个步骤,也把这三个步骤统称为类加载或类初始化。

类加载指的是将类Class文件读入内存,并为之创建一个java.lang.Class对象,也就是说程序使用任何类时,系统都会为之建立一个java.lang.Class对象。

类是某一类对象的抽象,类是概念层次的东西,但类也是一种对象,每个类是一批具有相同特征的对象的抽象,而系统中所有类,它们实际上也是对象,都是java.lang.Class的实例。

类的加载由类加载器完成,类加载器通常由JVM提供,这些类加载器也是所有程序运行的基础,JVM提供的这些类加载器通常被称为系统类加载器,开发者也可以通过继承ClassLoader基类来创建自己的类加载器。

通过使用不同的类加载器,可以从不同来源加载类的二进制数据,通常有如下几种来源:1.从本地文件系统来加载Class文件,这是大部分实例程序的类加载方式。

2从jar包中加载class文件,如JDBC编程时用到的数据库驱动类就是放在jar文件中,JVM可以从jar文件中直接加载该Class文件。

3.通过网络加载class文件。

4.把一个java源文件动态编译,并执行加载。

加载,汉语词语,字面意思是增加装载量。现多用于计算机相关领域,表示启动程序时文件或信息的载入。

描述一下JVM加载class文件的原理

Java语言是一种具有动态性的解释型语言,类(class)只有被加载到JVM中后才能运行。当运行指定程序时,JVM会将编译生成的.class文件按照需求和一定的规则加载到内存中,并组织成为一个完整的Java应用程序。这个加载过程是由类加载器来完成的,具体来说,就是由ClassLoader和它的子类来实现的。类加载器本身也是一个类,其实质是把类文件从硬盘读取到内存中。
类的加载方式分为隐式加载与显式加载两种。隐式加载指的是程序在使用new等方法创建对象时,会隐式地调用类的加载器把对应的类加载到JVM中。显式加载指的是通过直接调用class.forName()方法来把所需要的类加载到JVM中。
任何一个工程项目都是由许多个类组成的,当程序启动时,只把需要加载的类加载到JVM中,其他类只有被使用到的时候才会被加载,采用这种方法,一方面可以加快加载速度,另外一方面可以节约程序运行过程中对内存的开销。此外,在Java语言中,每个类或接口都对应一个.class文件,这些文件可以被看成一个个可以被动态加载的单元,因此当只有部分类被修改时,只需要重新编译变化的类即可,而不需要重新编译所有文件,因此加快了编译速度。

jvm java.lang.class的实例存在哪

运用.class的方式来获取Class实例。对于基本数据类型的封装类,还可以采用.TYPE来获取相对应的基本数据类型的Class实例。例如,Integer.TYPE 与 int.class是等效的,都是int。
利用对象调用getClass()方法获取该对象的Class实例;
使用Class类的静态方法forName(),用类的名字获取一个Class实例(static Class forName(String className) ),这种方式灵活性最高,根据类的字符串全名即可获取Class实例,可以动态加载类,框架设计经常用到;
Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的defineClass方法自动构造的,因此不能显式地声明一个Class对象。
虚拟机为每种类型管理一个独一无二的Class对象。也就是说,每个类(型)都有一个Class对象。运行程序时,Java虚拟机(JVM)首先检查是否所要加载的类对应的Class对象是否已经加载。如果没有加载,JVM就会根据类名查找.class文件,并将其Class对象载入。

文章分享结束,jvmclass被加载到了那里和Java类加载机制的答案你都知道了吗?欢迎再次光临本站哦!

jvmclass被加载到了那里(Java类加载机制)

本文编辑:admin

更多文章:


恢复删除的网站(恢复删除的网站)

恢复删除的网站(恢复删除的网站)

今天给各位分享恢复删除的网站的知识,其中也会对恢复删除的网站进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录恢复删除的网站怎么找回删除的网页历史记录如何找回删掉的网站记录网站历史记录删了怎么恢复删除的网页历史记

2025年11月6日 10:30

软件测试流程分几个阶段(软件开发过程一般有几个阶段)

软件测试流程分几个阶段(软件开发过程一般有几个阶段)

本篇文章给大家谈谈软件测试流程分几个阶段,以及软件开发过程一般有几个阶段对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录软件开发过程一般有几

2025年12月5日 23:30

简易w3school教程网页面代码(想记一下网页制作的常用代码,不知道有哪些)

简易w3school教程网页面代码(想记一下网页制作的常用代码,不知道有哪些)

各位老铁们好,相信很多人对简易w3school教程网页面代码都不是特别的了解,因此呢,今天就来为大家分享下关于简易w3school教程网页面代码以及想记一下网页制作的常用代码,不知道有哪些的问题知识,还望可以帮助大家,解决大家的一些困惑,下

2025年12月2日 14:45

正则表达式匹配换行符和空格(为什么这个正则表达式不能匹配空格和换行)

正则表达式匹配换行符和空格(为什么这个正则表达式不能匹配空格和换行)

这篇文章给大家聊聊关于正则表达式匹配换行符和空格,以及为什么这个正则表达式不能匹配空格和换行对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录为什么这个正则表达式不能匹配空格和换行用正则表达式,清除文章中多余的换行和空白字符为什

2026年4月22日 13:30

permission怎么读音发音(准许的拼音)

permission怎么读音发音(准许的拼音)

大家好,关于permission怎么读音发音很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于准许的拼音的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录准

2025年9月1日 19:30

数组array的长度为(获取数组长度)

数组array的长度为(获取数组长度)

本篇文章给大家谈谈数组array的长度为,以及获取数组长度对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录获取数组长度c语言array占几个

2026年3月14日 12:30

js图片无缝滚动的原理(请问一下滚动的原理是什么,我有点晕乎乎的谁能给我解释详细一点感激不尽)

js图片无缝滚动的原理(请问一下滚动的原理是什么,我有点晕乎乎的谁能给我解释详细一点感激不尽)

各位老铁们好,相信很多人对js图片无缝滚动的原理都不是特别的了解,因此呢,今天就来为大家分享下关于js图片无缝滚动的原理以及请问一下滚动的原理是什么,我有点晕乎乎的谁能给我解释详细一点感激不尽的问题知识,还望可以帮助大家,解决大家的一些困惑

2026年4月24日 09:00

notnull参数的作用(SpringMVC注解中的这个@Resource和@Notnull各有什么用处啊能讲详细点么)

notnull参数的作用(SpringMVC注解中的这个@Resource和@Notnull各有什么用处啊能讲详细点么)

各位老铁们好,相信很多人对notnull参数的作用都不是特别的了解,因此呢,今天就来为大家分享下关于notnull参数的作用以及SpringMVC注解中的这个@Resource和@Notnull各有什么用处啊能讲详细点么的问题知识,还望可以

2026年1月12日 23:15

商城网站建设多少钱(做一个网上商城网站要多少钱)

商城网站建设多少钱(做一个网上商城网站要多少钱)

大家好,今天小编来为大家解答以下的问题,关于商城网站建设多少钱,做一个网上商城网站要多少钱这个很多人还不知道,现在让我们一起来看看吧!本文目录做一个网上商城网站要多少钱建一个大型商城网站要多少钱建一个电子商务网站多少钱电商网站的建设需要多少

2025年5月30日 19:00

插入语句命令(VF中如果要在第3条记录之前插入新的记录,应怎样编写insert语句)

插入语句命令(VF中如果要在第3条记录之前插入新的记录,应怎样编写insert语句)

“插入语句命令”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看插入语句命令(VF中如果要在第3条记录之前插入新的记录,应怎样编写insert语句)!本文目录VF中如果要在第3条记录之前插入新的记录,应怎样编写insert语句

2026年8月24日 18:15

请问什么是专四跟专八?英语 专四 听力

请问什么是专四跟专八?英语 专四 听力

大家好,今天小编来为大家解答以下的问题,关于专四,请问什么是专四跟专八这个很多人还不知道,现在让我们一起来看看吧!本文目录请问什么是专四跟专八英语 专四 听力专四听力dictation评分标准英语专四听力dictation提高篇专四听写ex

2025年9月11日 23:15

memcached性能(PHP中4个加速,缓存扩展的区别和选用建议)

memcached性能(PHP中4个加速,缓存扩展的区别和选用建议)

大家好,关于memcached性能很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于PHP中4个加速,缓存扩展的区别和选用建议的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各

2025年9月8日 08:45

national geographic(national geographic什么意思)

national geographic(national geographic什么意思)

大家好,如果您还对national geographic不太了解,没有关系,今天就由本站为大家分享national geographic的知识,包括national geographic什么意思的问题都会给大家分析到,还望可以解决大家的问题

2026年1月16日 18:15

文本框形状样式在哪里设置(请问一下设置形状格式在哪里)

文本框形状样式在哪里设置(请问一下设置形状格式在哪里)

“文本框形状样式在哪里设置”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看文本框形状样式在哪里设置(请问一下设置形状格式在哪里)!本文目录请问一下设置形状格式在哪里PPT如何设置环形文本框Word如何对文本框的轮廓和填充效果

2025年11月19日 20:30

澳洲银行account(澳大利亚有什么银行)

澳洲银行account(澳大利亚有什么银行)

本篇文章给大家谈谈澳洲银行account,以及澳大利亚有什么银行对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录澳大利亚有什么银行澳洲留学银行开户见证申请办理流程澳大利亚银行账户号长度澳洲汇款银行省市州怎么填悉尼澳洲联邦银行高

2026年8月12日 19:00

daverage函数用法(excel数据库函数怎么用)

daverage函数用法(excel数据库函数怎么用)

本篇文章给大家谈谈daverage函数用法,以及excel数据库函数怎么用对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录excel数据库函

2025年8月11日 07:15

自学汇编语言(自学王爽的汇编语言,需要多少时间)

自学汇编语言(自学王爽的汇编语言,需要多少时间)

大家好,今天小编来为大家解答以下的问题,关于自学汇编语言,自学王爽的汇编语言,需要多少时间这个很多人还不知道,现在让我们一起来看看吧!本文目录自学王爽的汇编语言,需要多少时间想学习单片机汇编语言,怎样学入门比较快呢自学汇编语言需要什么先导课

2025年9月25日 17:00

datasource文件夹(mybatis基本配置详解)

datasource文件夹(mybatis基本配置详解)

大家好,datasource文件夹相信很多的网友都不是很明白,包括mybatis基本配置详解也是一样,不过没有关系,接下来就来为大家分享关于datasource文件夹和mybatis基本配置详解的一些知识点,大家可以关注收藏,免得下次来找不

2025年9月30日 20:15

车上rear按键是什么意思?rear是什么意思中文

车上rear按键是什么意思?rear是什么意思中文

这篇文章给大家聊聊关于rear,以及车上rear按键是什么意思对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录车上rear按键是什么意思rear是什么意思中文rear是什么意思rear是什么意思 详解rear的含义与用法rea

2025年8月2日 18:15

取字符串的某一部分(C语言如何实现取字符串的一部分)

取字符串的某一部分(C语言如何实现取字符串的一部分)

大家好,关于取字符串的某一部分很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于C语言如何实现取字符串的一部分的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文

2025年10月3日 14:15

近期文章

本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索