1.分析和输入到符号表
将符号输入到符号表,通常包括确定类的超类型和接口、根据需要添加默认构造器、将类中出现的符号输入类自身的符号表中。
2.注解处理 annotation processing
该步骤主要用于处理用户自定义的annotation,可能带来的好处是基于annotation来生成附加的代码或进行一些特殊的检查,从而节省一些共用的代码的编写。
3语义分析和生成class文件
analyse步骤基于抽象语法树进行一系列的语义分析,包括将语法树中的名字、表达式等元素与变量、方法、类型等联系起来。检查变量使用前是否已声明;推导泛型方法的类型参数;检查类型匹配性,进行常量折叠,检查所有语句都可到达;检查所有checked exception都被捕获或抛出;检查变量确定性赋值
类加载机制是指.class文件加载到jvm,并形成class对象的机制,之后应用就可对class对象进行实例化并调用,类加载机制可再运行时动态加载外部的类、远程网络下载过来的class文件
jvm将类加载过程划分位三步:装载、链接和初始化。装载和链接过程完成后,即将二进制的字节码转换位class对象;初始化过程不是加载类时必须触发的,但最迟必须再初次主动使用对象前执行,其所作的动作为给静态变量赋值
1。装载
负责找到二进制字节码并加载到jvm。
2.链接
负责对二进制字节码的格式进行校验、初始化装载类中的静态变量及解析类中调用的接口、类。
3。初始化
执行类中的静态初始化代码、构造器代码及静态属性的初始化。
jvm 抛出的常见一场
1。.classnotfoundException 产生这个异常的原因再当前的classloader中加载类时未找到类文件
2. noclassdeffoundError 造成此异常的主要原因时加载的类中引用到的另外的类不存在
3. linkageError 此类已经再classloader加载过了,重复地加载会造成该异常。
4. classcastException 合理使用泛型可相对减少此异常的触发。两个A对象由不同的classloader加载的情况,这时如果将其中A对象造型成另外一个A对象,就会报。
类加载机制:
1.栈顶缓存:再方法的执行过程中,可以看到由很多操作要将值放入操作树栈,这导致了寄存器和内存要不断地交换数据,栈顶缓存将本来位于操作树栈顶的值直接缓存再寄存器中,这对于大部分只需要一个值的操作而言,无须将数据放入操作数栈,可直接再寄存器计算,然后放回操作数栈。
2.部分栈楨共享
当一个方法调用另外一个方法时,通常传入另一个方法的参数为已存放再操作数栈的数据。该优化就是当调用方法时,后一方法可将前一方法的操作数栈作为当前方法的拘捕变量,节省copy带来的消耗
编译执行:
1.方法内联:java通常要调用多个方法完成功能。执行时,要经理多次参数传递,返回值等,方法内联能够直接将调用到的方法的指令植入当前方法
2.去虚拟化:再装载class文件后,进行类层次分析。如发现类中的方法只提供一个实现类,那会进行方法内联,提高性能
3.冗余消除:对于一些判断,如果时false,则会去除
分享到:
相关推荐
3. **加载.class文件**:在jd-gui的界面中,点击“File”菜单,选择“Open Class...”选项,然后在弹出的对话框中选择需要反编译的.class文件。 4. **查看源代码**:jd-gui会自动反编译选定的.class文件,并在右侧...
《Java实现的JVM——深入...总结,"jvmjava"项目是一个极好的学习资源,它使开发者有机会亲手构建一个JVM,从底层理解Java应用程序的运行机制。无论是初学者还是经验丰富的开发者,都能从中受益,提升自己的技术水平。
**ClassLoader** 负责加载ClassFile到JVM中,它遵循双亲委派模型。常见的ClassLoader包括Bootstrap ClassLoader、Extension ClassLoader和App ClassLoader。 #### 四、内存模型、锁与同步 **Java内存模型** 主要...
类加载机制是Java语言中的一个核心概念,它负责将.class文件加载到内存中,创建对应的java.lang.Class对象。JVM将类加载过程分为加载、链接(验证、准备、解析)、初始化三个阶段。这个过程是动态的,它允许程序在...
Java源代码(.java文件)通过Java编译器(javac)被编译成字节码(.class文件),这是一种中间表示,可以在任何支持JVM的平台上运行。这是因为JVM负责将字节码解释为特定平台的机器指令。 JVM的主要组件包括类装载...
在Java编程中,动态编译字符串成Java代码并将其加载到JVM(Java虚拟机)是一种高级技巧,常用于运行时代码生成、元编程或插件系统等场景。这一技术的核心在于利用Java的反射API和Java Compiler API。下面将详细阐述...
《深入理解JVM工具——开启Java世界探索之旅》 在Java开发领域,JVM(Java Virtual Machine)扮演着至关重要的角色。它不仅是Java程序运行的基础,更是优化代码、解决性能问题的关键所在。为了更好地理解和利用JVM...
《深入解析NeatJVM:Java中的JVM实现》 在Java编程领域,JVM(Java虚拟机)是每一个开发者必须了解的关键组成部分。NeatJVM是一个开源项目,旨在为开发者提供一个清晰、简洁的Java虚拟机实现,帮助我们更好地理解和...
在使用Eclipse进行开发的过程中,有时可能会遇到JVM(Java虚拟机)错误的问题。这类问题通常表现为启动Eclipse时出现错误提示,例如“jvm terminated. Exit code=-1”。本文将详细介绍这一问题的原因以及具体的解决...
JVM类加载机制是Java虚拟机中的一种机制,它负责加载Java类文件到内存中,以便执行Java程序。类加载机制分为五个阶段:加载、验证、准备、解析和初始化。 加载 加载是类加载过程中的一个阶段,这个阶段会在内存中...
1. 类装载器(ClassLoader):负责加载.class文件,将字节码内容解析并存储到内存中,同时根据双亲委派模型进行类的加载。类装载器分为启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader...
总结起来,"JVM之用Java解析class文件"这一主题涵盖了从class文件的结构到JVM加载机制的多个层面。通过学习这一领域,开发者可以更好地理解Java程序的生命周期,提高问题诊断能力,并能利用字节码技术实现高级编程...
Java虚拟机(JVM)是Java程序运行的基础,它负责解析和执行编译后的.class文件。这个过程涉及多个阶段,包括加载、验证、准备、解析和初始化。在本篇文章中,我们将深入探讨JVM如何解析并执行这些编译过的类文件。 ...
JVM的主要任务包括:将.java文件编译成.class文件、加载已有.class文件、执行.class文件以及管理内存分配和回收。JVM还通过与操作系统交互来实现多线程和并发。内存主要分为四个区域:方法区、堆区、栈区和本地方法...
1. **类装载器(ClassLoader)**:负责加载.class文件到内存。类加载器按照双亲委派模型工作,即先由父类加载器尝试加载,只有当父类加载器无法找到或加载指定类时,才会由子类加载器进行加载。这保证了Java的安全性...
Java虚拟机(JVM)是Java程序运行的核心组件,它为Java代码提供了平台无关的运行环境。本篇文章将深入探讨JVM的生命周期、体系结构、类加载机制、内存区域以及垃圾收集。 首先,JVM的生命周期与Java程序紧密关联。...
JVM通过解析CLASS文件来创建并执行Java类。了解CLASS文件格式能帮助开发者更好地理解代码在JVM中的表现。 3. 类加载 类加载机制包括加载、验证、准备、解析和初始化五个阶段。JVM使用类加载器(ClassLoader)来...
通过对JVM的理解,我们可以了解到Java程序是如何在JVM中运行的,以及JVM如何管理内存和执行字节码。这对于优化Java程序性能、解决内存泄漏等问题至关重要。掌握JVM的核心概念及其内部工作原理,对于提高Java开发者的...
Java源代码(.java文件)通过Java编译器(javac)被编译成Java字节码(.class文件),这些字节码可以在任何安装了JVM的平台上运行,实现了“一次编写,到处运行”的目标。 JVM的主要组件包括类加载器、运行时数据区...