java性能优化 类加载,编译器,字节码

在这里插入图片描述来源《java性能优化实践》

	/**
     * Java 性能优化 2
     *   JVM 概述
     *      @解释和类加载
     *          基于栈的解释性机器
     *          没有寄存器——通过使用一个包含部分结果的栈,执行栈顶的一个或多个值完成计算
     *          java解释器——包含在while中的switch语句 (switch-inside-while)
     *          当使用java 执行应用程序时,操作系统会启动java虚拟机进程,该进程会设置java虚拟环境 并初始化这一栈式机器,
     *              这一机器真正执行应用程序中的类文件用户代码
     *          程序的入口是main,虚拟机执行前必须加载这个类,然后才能将控制权交给
     *          实现这一点需要java的类加载机制,当启动一个程序时,会使用一个加载器链
     *              初始的加载器就是所谓的启动类加载器(bootstrap,classloader),它包含核心java运行时中所需的类
     *              启动类加载器的要点是获得一个类运行时最小集合,以允许其他类加载启动系统的其他部分
     *                  这里注意类加载器顺序,避免循环
     *
     *              扩展类加载器
     *                  负责从指定的类路径中加载用户类,当程序在执行的过程中遇到对新的类产生依赖时,java就会加载他们
     *                  如果一个类加载器没有找到某个类,则加载行为将被委托其父加载器,如果链式查找已经到了启动类加载器,还是没有找到。则抛出异常
     *          正常情况类只会被加载一次,并在运行时环境创建一个Class对象来表示,但是同一个类可能被不同的类加载器加载两次
     *          类在系统中通过加载它的类加载器名称以及全限定类名表示
     *
     *      @执行字节码
     *          java源代码在执行之前需要经历一系列的变换,
     *              javac进行源代码编译阶段,通常作为更上层构建流程的一部分调用
     *              将.java文件转换为.class文件
     *              对源代码做了非常直接的变换,很少在编译期间进行优化
     *          字节码是一种中间表示没有底层机器进行绑定。
     *              和机器架构的好处
     *                  提供了可移植,这意味着已经开发好或者编译完的软件可以在JVM支持的任何平台上运行
     *                  提供了对java语言的抽象
     *              现在JVM和java语言在一定程度上是独立
     *                  因为JVM可以执行任何能生成合法类文件的JVM语言。
     *           不管使用的是何种代码编译器,生成的类文件都具备虚拟机规范所制定的结构。
     *           JVM对于任何要加载的类,都要先验证他们符合指定格式,然后才允许其执行。
     *
     *           @类文件解释
     *             魔数
     *                  前四位十六进制 = 符合类文件形式
     *                  后四位十六进制 = 主版本和此版本号
     *                  检查这些自己取保JVM的版本不低于编译该类版本
     *                  类加载检查版本号确保兼容-如果不兼容则不支持异常
     *             类文件格式版本
     *                  主版本和次版本
     *             常量池
     *                  保存代码中常量,类,接口和字段的名字
     *                  当JVM执行代码时,会使用常量池来查找值而不依赖于运行时的内存布局
     *             访问标志
     *                  用于确定应用于该类的修饰符
     *                      标志的对部分判断是否public
     *                      随后部分判断是否final 这个标志还能判断是接口还是抽象类
     *                      最后的标志标识这个类文件是标识源代码中没有出现的合成类,注解类型,枚举
     *             当前类
     *             超类
     *             接口
     *                  都是指向常量池的索引,用于识别该类相关的类型层次
     *             字段
     *             方法
     *                  定义了一个类似签名的结构,包括应用于字段或方法的修饰符
     *             属性
     *                  使用一组属性,用于标识更复杂,大小不固定的结构中的结构化条目
     */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

P("Struggler") ?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值