`
zyslovely
  • 浏览: 227749 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jvm 从.java到.class

 
阅读更多
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,则会去除

分享到:
评论

相关推荐

    JVM基础.doc

    学习关于JVM基础,java内模型的全面透析,Jar hell问题以及解决办法,Class文件格式 • Java编译执行流程 • ClassFile的格式介绍 • ClassFile中FieldInfo和MethodInfo介绍 • 类型描述Descriptor介绍 • ClassFile...

    动态编译字符串成java,并且添加class到jvm

    动态编译字符串成java,并且添加class到jvm

    小白自己学习Java,记录Java基础.rar

    - 运行期:JVM加载.class并运行.class(0和1) > 特点:跨平台、一次编译到处运行 - 名词解释: - JVM:java虚拟机 - 加载.class并运行.class - JRE:java运行环境 - 除了包含JVM以外还包含了运行java...

    这些不可不知的JVM知识.pdf

    当然,严格来说JVM也是虚拟机规范,有很多不同的实现,Sun/OracleJDK和OpenJDK中的默认Java虚拟机是HotSpot虚拟机,是目前使用范围最广的Java虚拟机,一般讲到的JVM默认指的就是HotSpot虚拟机。 1.2、Java程序运行...

    JVM之用Java解析class文件共10页.pdf.zi

    JVM之用Java解析class文件共10页.pdf.zip

    Cpp运行Java的class文件.zip

    Cpp运行Java的class文件,可以编译... options[0].optionString = "-Djava.class.path=./"; args.options = options; args.ignoreUnrecognized = JNI_FALSE; return JNI_CreateJavaVM(jvm, (void **)env, &args); }

    javajvm:用Java编写的玩具JVM

    Java JVM 使用Java 8来实现一个纯解释执行的Java虚拟机。 代码偏向于可读性,忽略性能。 项目的目的在于更加深入的学习和理解Java虚拟机。...现在,将HelloWorld.java编译成HelloWorld.class,然后用JVM运行。

    大白话带你认识JVM.pdf

    如果 JVM 想要执行这个 .class 文件,我们需要将其装进一个 类加载器 中,它就像一个搬运工一样,会把所有的 .class 文件全部搬进JVM里面来。 ② 方法区 方法区 是用于存放类似于元数据信息方面的数据的,比如类...

    Java英语单词.pdf

    Java单词,Java英语单词 Unit 1 1. JDK abbr. Java 开发工具包(Java Development Kit) (abbr.缩写) 2. JRE abbr. Java 运行环境(Java Runtime Environment) 3. JVM abbr. Java 虚拟机(Java Virtual ...

    Java进阶教程解密JVM视频教程

    3. Java 程序从编译为字节码到加载到运行的全流程,各个阶段的优化处理;4. 了解 Java 内存模型相关知识,见识多线程并发读写共享数据时的问题和 Java 的解决方案。 适应人群 有一定的Java基础,希望提升 Java 内功...

    java jdk8 学习笔记

    5.从大到小,包含与被包含:java se:java 语言、jdk(jre(jvm,java se api))。jdk包含了java程序语言、工具程序与jre,jre包括了部署技术、java se api与jvm。 6. 7.Web容器是Servlet/JSP唯一认识的HTTP服务器,...

    全面理解JVM虚拟机.rar

    全面理解JVM虚拟机 内容简介: 1、JVM主要学些什么 2、CLASS文件规范 3、类加载 4、执行引擎 5、GC垃圾回收 6、GC情况分析实例

    深入学习JVM(Java虚拟机)内核教程

    2.JVM运行机制.mp4 3.常用JVM配置参数.mp4 4.GC算法与种类.mp4 5.GC参数.mp4 6.类装载器.mp4 7.性能监控工具,mp4 8.Java堆分析.mp4 9.锁.mp4 10.Class文件结构.mp4 11.字节码执行.mp4

    JAVA核心知识点整理(有效)

    1:eden、servicorFrom 复制到 ServicorTo,年龄+1................................................................................... 25 2:清空 eden、servicorFrom.............................................

    node-jvm, 在纯 node.js 中,java虚拟机.zip

    node-jvm, 在纯 node.js 中,java虚拟机 节点 jvm 概述节点 jvm - 纯 node.js 中的jvm示例 javapublic class Main { public static long fib(int n) { if (n <= 1

    mini-jvm:使用 JDK8 实现 JVM(Java Virtual Machine)

    使用 Java 8 实现 JVM 特性 元循环(Metacircular) mini-jvm on mini-jvm on hotspot. 可以在 mini-jvm 里运行 mini-jvm . $ java -jar jvm-core/target/mini-jvm.jar -jar jvm-core/target/mini-jvm.jar -jar test....

    jvm虚拟机原理.ppt

    经典JVM PPT,可以直接讲课的 java虚拟机原理介绍 Java虚拟机生命周期 Java虚拟机体系结构 Java 的class文件

    php5-java扩展dll, php_java.dll,php_java.jar

    php5的java扩展资源.加入到ext中更改ini文件: [java] java.home=D:/Java/jdk1.5.0_09/jre java.library=D:/Java/jdk1.5.0_09/jre/bin/server/jvm.dll ...java.class.path="D:/php/ext/php_java.jar;C:/myclasses

    java核心知识点整理.pdf

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

Global site tag (gtag.js) - Google Analytics