当前位置: 首页 > news >正文

大同做网站多元网站

大同做网站,多元网站,wordpress piklist,微信公众号红包网站开发Java类加载过程 加载#xff08;Loading#xff09; 这是类加载过程的第一个阶段。在这个阶段#xff0c;Java虚拟机#xff08;JVM#xff09;主要完成三件事#xff1a; 通过类的全限定名来获取定义此类的二进制字节流。这可以从多种来源获取#xff0c;如本地文件系…Java类加载过程 加载Loading 这是类加载过程的第一个阶段。在这个阶段Java虚拟机JVM主要完成三件事 通过类的全限定名来获取定义此类的二进制字节流。这可以从多种来源获取如本地文件系统.class文件、网络如从远程服务器下载字节码、动态生成字节码如使用字节码生成库等。 将字节流所代表的静态存储结构转换为方法区在JDK 1.8之后元数据存储在本地内存的元空间Metaspace中中的运行时数据结构。 在内存中生成一个代表这个类的 java.lang.Class 对象作为方法区这个类的各种数据的访问入口。这个 Class 对象在堆内存中它就像是一面镜子反射出类在方法区中的结构。 验证Verification 目的是确保被加载的类的字节码是合法的、符合Java虚拟机规范的。它主要包括四个验证阶段 文件格式验证验证字节流是否符合Class文件格式的规范例如是否以魔数 0xCAFEBABE 开头主次版本号是否在当前JVM支持的范围内等。 元数据验证对字节码描述的信息进行语义分析以保证其符合Java语言规范例如检查这个类是否有父类除了 java.lang.Object 是否继承了不允许继承的类如 final 类等。 字节码验证通过数据流和控制流分析确定程序语义是合法的、符合逻辑的。例如检查操作数栈的数据类型是否和指令的操作码相匹配跳转指令是否会跳转到方法体以外的字节码指令上。 符号引用验证在解析阶段将符号引用转换为直接引用的时候对符号引用进行验证。这个阶段主要是确保解析行为能正常执行比如检查符号引用中的类、字段、方法是否确实存在等。 准备Preparation 这一阶段是为类的静态变量被 static 修饰的变量分配内存并设置默认初始值。例如对于 public static int value 123; 在准备阶段 value 会被初始化为0基本数据类型的默认值而不是123。这里需要注意的是这一阶段不会执行任何Java代码仅仅是为变量分配内存和设置默认值。 解析Resolution 这是虚拟机将常量池内的符号引用替换为直接引用的过程。符号引用是一种对目标的描述例如一个类的全限定名、方法的名称和描述符等。直接引用是指向目标的指针、相对偏移量或者能间接定位到目标的句柄。例如在调用一个方法时需要将方法的符号引用解析为实际内存中的方法入口地址直接引用。这个过程主要针对类或接口、字段、类方法、接口方法等符号引用进行解析。 初始化Initialization 这是类加载过程的最后一步也是真正开始执行类中定义的Java程序代码的阶段。这个阶段主要是执行类构造器 clinit() 方法。 clinit() 方法是由编译器自动收集类中的所有类变量静态变量的赋值动作和静态语句块 static{} 中的语句合并产生的。JVM会保证这个方法在多线程环境下被正确地加锁和同步即只有一个线程能够执行这个类的 clinit() 方法。 Java类加载机制 双亲委派模型Parents Delegation Model 工作原理当一个类加载器收到类加载请求时它首先不会自己去尝试加载这个类而是把这个请求委派给父类加载器去完成。只有当父类加载器反馈自己无法完成这个加载请求它的搜索范围中没有找到对应的类时子加载器才会尝试自己去加载。这种层次结构就像一个树状结构最顶层是启动类加载器Bootstrap ClassLoader它主要负责加载 JAVA_HOME/lib 目录下的类库如 rt.jar 等核心库然后是扩展类加载器Extension ClassLoader负责加载 JAVA_HOME/lib/ext 目录下的类库最后是应用程序类加载器Application ClassLoader负责加载用户类路径 classpath 下的类。 优势 避免类的重复加载。因为父加载器已经加载过的类子加载器就不需要再次加载了。 保证了Java核心库的安全性。例如用户自定义了一个 java.lang.String 类由于双亲委派模型这个类不会被加载因为启动类加载器会首先加载Java核心库中的 java.lang.String 类这样就防止了用户恶意篡改核心类库的行为。 自定义类加载器Custom Class Loader 在某些情况下我们可能需要自定义类加载器。例如从加密的字节码文件中加载类或者从非标准的位置如数据库加载类。要实现自定义类加载器需要继承 java.lang.ClassLoader 类并重写 findClass 方法。在 findClass 方法中需要实现从自定义的源获取字节码数据然后调用 defineClass 方法将字节码转换为 Class 对象。通过自定义类加载器我们可以更加灵活地控制类的加载过程满足特殊的应用需求。
http://www.hkea.cn/news/14429184/

相关文章:

  • 河北省建设项目信息网站咸阳学校网站建设公司
  • seo优化网站优化电子商务主要是做什么的
  • 网站网页制作及优化微信公众平台小程序申请
  • 绿色网站风格淘宝网网站建设
  • 罗湖商城网站设计推荐wordpress文章批量替换
  • php和什么语言做网站怎么建设网站商城
  • 百度搜一下合肥seo推广百家号
  • 做网站购买模板墨鱼网站建设
  • 公司网站主页怎么做wordpress 会员分值
  • 菏泽网站建设谁最出名鄂州网站建设网络公司
  • 网页设计与制作 培训昆明做整站优化
  • 莒县建设局门户网站html网页制作期末大作业成品
  • 做网站的内容资源iis7.5配置网站
  • 知乎 拒绝 朋友 做网站做淘宝客网站一定要备案吗
  • 宜阳建站如何建设网站的外链
  • 与恶魔做交易的网站网站开发包含的项目和分工
  • 凡客建站登陆企业网站访问对象有哪些
  • 电商网站成功的营销策略网站正在建设中9797
  • 网站建设毕业设计报告书.net 大型网站开发
  • 阿里云 外贸网站网站模板兼容手机端
  • 作文网站投稿长春网站排名优化
  • 品牌网站有哪些内容网站设计 中高端
  • 免费网站建设app深圳建设项目信息网
  • 做网站开发很赚钱吗wordpress 中文cms主题
  • 动漫做a视频网站阜阳网站建设云平台
  • 昆山建设工程招标网站重庆好的seo平台
  • 做网站需要电脑吗36kr wordpress主题
  • 做图必备素材网站深圳模板网站建设公司
  • 招商网站建设哪家好网站源码下载免费源码
  • 响应式旅游网站模板网站建设维护是做什么的