小编典典

Java 6编译器将预验证信息添加到类文件中

如果Java虚拟机实现曾经尝试对50.0版类文件执行通过类型推断的验证,则在通过类型检查的验证失败的所有情况下都必须这样做。

这意味着Java虚拟机实现无法选择在一种情况下而不是在另一种情况下求助于类型推断。它必须拒绝未通过类型检查进行验证的类文件,或者必须在类型检查失败时始终将故障转移到类型推断验证程序。

对于每个具有Code属性的方法,类型检查器都需要一个堆栈映射框架列表。类型检查器为每种此类方法读取堆栈映射框架,并使用这些映射生成Code属性中指令的类型安全性证明。

从Java

6,类文件50.0及更高版本开始,JVM可以在类文件验证期间使用类型检查或类型推断。在试图了解性能优势之前,什么是类型检查和类型推断?本文面向对象的编程语言的类型检查和类型推断指出:

类型系统是编程语言的重要组成部分。完全依赖于运行时类型检查的语言提供了高度的灵活性,但通常必须为此牺牲性能。

并从维基百科上进行类型推断:

类型推断是在编译时自动部分或完全推断表达式类型的能力。[…]

为了获得推断表达式类型所需的信息,编译器要么以汇总形式收集此信息,然后对为其子表达式指定的类型注释进行缩减,要么通过对各种原子值的类型的隐式理解[…

]。

当前有两种分析字节码以确定每种指令将出现的操作数的类型和数量的方法。传统方法称为“类型推断”,它通过对每个字节码执行抽象解释并在分支目标或异常句柄处合并类型状态来进行操作。分析遍历字节码,直到找到类型的稳定状态为止。如果找不到稳定状态,或者生成的类型违反某些字节码约束,则将引发VerifyError。[…]

JDK6中的新增功能是第二种验证方法,称为“类型验证”。在这种方法中,Java编译器通过代码属性StackMapTable为每个分支或异常目标提供稳态类型信息。StackMapTable由许多堆栈映射框架组成,每个框架映射框架指示表达式堆栈上以及方法中某些偏移处的局部变量中的项目类型。然后,JVM只需要对字节码执行一次遍历,即可验证类型的正确性,从而验证字节码。[…]

类型检查意味着JVM可以一次遍历类文件来验证类型系统。类型推断需要多次通过。这是否可以节省大量的性能?这可能与应用程序中类的总数以及小于50.0(Java

6)且大于50.0的类文件的数量有关。如果您的应用程序不是性能至关重要的应用程序,那么我就不必担心。如果是这样,则可以在将应用程序编译为Java

5和Java 6类文件时运行一些基准测试,以比较性能差异。

2020-12-03

java 加载中_Java 6类加载中更快的是什么?相关推荐

  1. java加载配置文件_Java 读取配置文件的五种方式

    方式一:采用ServletContext读取,读取配置文件的realpath,然后通过文件流读取出来. 因为是用ServletContext读取文件路径,所以配置文件可以放入在WEB-INF的clas ...

  2. java加载配置文件_java 读取和修改配置文件

    1.读取配置文件 try{ File f=new File("D:\\myfile.text"); Properties pp=new Properties(); FileInpu ...

  3. java虚拟机加载类_java虚拟机之类加载机制(一)

    一.首先先说一下java虚拟机的生命周期: 1.执行了system.exit(): 2.程序正常执行结束: 3.程序在执行过程中遇到了异常或错误而终止: 4.由于操作系统出现错误而导致java虚拟机进 ...

  4. java加载阶段内存分配_Java核心:类加载和JVM内存的分配

    类的加载: 指的是将class文件的二进制数据读入到运行时数据区(JVM在内存中划分的) 中,并在方法区内创建一个class对象. 类加载器: 负责加载编译后的class文件(字节码文件)到JVM(J ...

  5. java动态加载jar时,jar中还有第三方jar无法加载的解决方法

    java动态加载jar时,jar中还有第三方jar无法加载的解决方法 当java插件化开发时,即一个java程序在运行的情况下动态加载另一个jar,网上大多数的方法如下 public static v ...

  6. java懒加载注解_在springboot中实现个别bean懒加载的操作

    懒加载---就是我们在spring容器启动的是先不把所有的bean都加载到spring的容器中去,而是在当需要用的时候,才把这个对象实例化到容器中. @Lazy 在需要懒加载的bean上加上@Lazy ...

  7. java 加载类java_深入研究Java类加载机制

    深入研究Java类加载机制 类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行. 研究类加载机制的第二个目的是让程序能动态的控制类加载,比 ...

  8. java加载机制_详解Java类加载机制

    一:ClassLoader 从JVM结构图中可以看到,类加载器的作用是将Java类文件加载到Java虚拟机. HotSpot JVM结构,图片来自Java Garbage Collection Bas ...

  9. java 启动加载顺序_Java 程序的加载运行过程 | 学步园

    为了叙述方便,我写了个小例子 class Three{ private static int s3 = getS3(); private int y = getY(); public Three(){ ...

最新文章

  1. 知识产权一般都具有法定的保护期限,一旦保护期限届满,权利将自行终止,成为社会公众可以自由使用的知识。 (20答案:D
  2. [ucgui] 对话框7——按钮触发与模式窗口
  3. 为什么大多数IP地址通常以192.168开头?
  4. 关于Task类处理多线程简单示例
  5. Window系统下C/C++程序毫秒和微秒级程序运行时间的获取方法
  6. pdf python 位置_如何使用PDFMiner获取PDF中文本的位置?
  7. LSGO软件技术团队2015~2016学年第四周(0921~0927)总结
  8. 在Window下编译OpenH323
  9. 【例8】合唱队形(《信息学奥赛一本通第五版》)
  10. 2 CO配置-企业结构-定义-维护成本控制范围(Controlling Area)
  11. 【Java】Arrays.asList 有坑
  12. 360浏览器清除缓存_手机中的缓存是什么?
  13. golden gate 加initial load 在rac 上的配置
  14. 002-用python设计的第一个游戏
  15. 物联网规划元旦前后出台 定十领域
  16. java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener解决方案
  17. 高效建站(华为云服务器速成篇)
  18. 如何修改win服务器默认路由,服务器win默认路由设置方法
  19. Java设计一个测桃花模块_20145209刘一阳《JAVA程序设计》第一周课堂测试
  20. [CF1603D]Artistic Partition

热门文章

  1. 微型计算机重点,微型计算机理期末重点.doc
  2. 为什么 在内存中为什么 0xffff 是 -1
  3. js寻找两个数组的差集_js求两个数组的交集|并集|差集|去重
  4. Python应用实战案例-Python协程管理精讲万字长文(建议收藏)
  5. Flink从入门到精通100篇(二十三)-基于Apache Flink的爱奇艺实时计算平台建设实践
  6. MATLAB句柄相关函数和代码示例(设置美化图表属性)
  7. mysql 数据库表被锁住了_mysql数据库锁的产生原因及解决办法
  8. Python入门100题 | 第021题
  9. 【图像处理opencv】_Jupyter基本操作
  10. QT中在label中插入图片自适应label大小等比缩放