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

网站源码获取在线搜狗推广登陆

网站源码获取在线,搜狗推广登陆,wordpress怎么更换域名,咸阳市网站建设公司Java全能学习面试指南:https://javaxiaobear.cn 1、字节码文件 从下面这个图就可以看出,字节码文件是可以跨平台使用的 想要让一个Java程序正确地运行在JVM中,Java源码就必须要被编译为符合JVM规范的字节码。 https://docs.oracle.com/java…

Java全能学习+面试指南:https://javaxiaobear.cn

1、字节码文件

从下面这个图就可以看出,字节码文件是可以跨平台使用的

image-20231121161520082

想要让一个Java程序正确地运行在JVM中,Java源码就必须要被编译为符合JVM规范的字节码。

image-20231121161547226

https://docs.oracle.com/javase/specs/index.html

所有的JVM全部遵守Java虚拟机规范,也就是说所有的JVM环境都是一样的,这样一来字节码文件可以在各种JVM上运行。

从Java虚拟机的角度看,通过Class文件,可以让更多的计算机语言支持Java虚拟机平台。因此,Class文件结构不仅仅是Java虚拟机的执行入口,更是Java生态圈的基础和核心。

1、Class文件

字节码文件里是什么?

源代码经过编译器编译之后便会生成一个字节码文件,字节码是一种二进制的类文件,它的内容是JVM的指令,而不像C、C++经由编译器直接生成机器码。

随着Java平台的不断发展,在将来,Class文件的内容也一定会做进一步的扩充,但是其基本的格式和结构不会做重大调整。

2、字节码编译器
  1. 从位置上理解

    image-20231121161751822

    前端编译器 vs 后端编译器

  2. 前端编译器的种类

    Java源代码的编译结果是字节码,那么肯定需要有一种编译器能够将Java源码编译为字节码,承担这个重要责任的就是配置在path环境变量中的javac编译器。javac是一种能够将Java源码编译为字节码的前端编译器。

    HotSpot VM并没有强制要求前端编译器只能使用javac来编译字节码,其实只要编译结果符合JVM规范都可以被JVM所识别即可。

    在Java的前端编译器领域,除了javac之外,还有一种被大家经常用到的前端编译器,那就是内置在Eclipse中的ECJ (Eclipse Compiler

    for Java)编译器。和Javac的全量式编译不同,ECJ是一种增量式编译器。

    • 在Eclipse中,当开发人员编写完代码后,使用“Ctrl+S”快捷键时,ECJ编译器所釆取的编译方案是把未编译部分的源码逐行进行编译,而非每次都全量编译。因此ECJ的编译效率会比javac更加迅速和高效,当然编译质量和javac相比大致还是一样的。
    • ECJ不仅是Eclipse的默认内置前端编译器,在Tomcat中同样也是使用ECJ编译器来编译jsp文件。由于ECJ编译器是釆用GPLv2的开源协议进行源代码公开,所以,大家可以登录eclipse官网下载ECJ编译器的源码进行二次开发。
    • 默认情况下,IntelliJ IDEA 使用 javac 编译器。(还可以自己设置为AspectJ编译器 ajc)
  3. 前端编译器的任务

    前端编译器的主要任务就是负责将符合Java语法规范的Java代码转换为符合JVM规范的字节码文件。

3、编译步骤

image-20231121162029078

大部分的程序代码转换成物理机的目标代码或虚拟机能执行的指令集之前,都需要经过上图中的各个步骤。

4、前端编译器的局限性

前端编译器并不会直接涉及编译优化等方面的技术,而是将这些具体优化细节移交给HotSpot的JIT编译器负责。

jdk9引入了AOT编译器(静态提前编译器,Ahead Of Time Compiler)

  • Java 9 引入了实验性 AOT 编译工具jaotc。它借助了 Graal 编译器,将所输入的 Java 类文件转换为机器码,并存放至生成的动态共享库之中。
  • 所谓 AOT 编译,是与即时编译相对立的一个概念。我们知道,即时编译指的是在程序的运行过程中,将字节码转换为可在硬件上直接运行的机器码,并部署至托管环境中的过程。而 AOT 编译指的则是,在程序运行之前,便将字节码转换为机器码的过程。
    .java -> .class -> .so
  • 最大好处:Java虚拟机加载已经预编译成二进制库,可以直接执行。不必等待即时编译器的预热,减少Java应用给人带来“第一次运行慢”的不良体验。
  • 缺点
    • 破坏了java“一次编译,到处运行”,必须为每个不同硬件、OS编译对应的发行包。
    • 降低了Java链接过程的动态性,加载的代码在编译期就必须全部已知。

还需要继续优化中,最初只支持Linux x64 java base

2、Class对象

下面这些类型都有对应的class对象

  • (1)class:外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类
  • (2)interface:接口
  • (3)[]:数组
  • (4)enum:枚举
  • (5)annotation:注解@interface
  • (6)primitive type:基本数据类型
  • (7)void
@Test
public void test(){Class c1 = Object.class;Class c2 = Comparable.class;Class c3 = String[].class;Class c4 = int[][].class;Class c5 = ElementType.class;Class c6 = Override.class;Class c7 = int.class;Class c8 = void.class;Class c9 = Class.class;int[] a = new int[10];int[] b = new int[100];Class c10 = a.getClass();Class c11 = b.getClass();// 只要元素类型与维度一样,就是同一个ClassSystem.out.println(c10 == c11);
}

3、字节码指令

1、什么是字节码指令

Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的操作码(opcode)以及跟随其后的零至多个代表此操作所需参数的操作数(operand)所构成。虚拟机中许多指令并不包含操作数,只有一个操作码。

例如:

image-20231121162453104
2、为什么要学习字节码指令?

通俗的说就是通过字节码的学习你可以更好地理解 Java中各种语法和语法糖背后的原理,更好地理解多态等语言特性

当然,具体其他的举例可以参考这个:https://cloud.tencent.com/developer/article/1870151

4、解读Class文件

如何解读供虚拟机解释执行的二进制字节码?

方式一:一个一个二进制的看。这里用到的是Notepad++,需要安装一个HEX-Editor插件,或者使用Binary Viewer

image-20231121162549172

方式二:使用javap指令:jdk自带的反解析工具

方式三:使用IDEA插件:jclasslib 或jclasslib bytecode viewer客户端工具。(可视化更好)

image-20231121162606055

image-20231121162621400

http://www.hengruixuexiao.com/news/44069.html

相关文章:

  • 网站建设自由容器是什么意思网站百度手机端排名怎么查询
  • 我的世界搞头怎么做的视频网站软文模板
  • 做一个电商网站要多少钱百度链接收录
  • 优秀包装设计作品及解析廊坊快速排名优化
  • 高速公路建设管理局网站手机百度极速版app下载安装
  • 网站建设合同标的附近电脑培训速成班一个月
  • 网站地图怎样做手机百度经验首页登录官网
  • 做黑彩网站seo研究中心道一老师
  • 专业响应式网站制作青岛seo推广专员
  • 网页设计作业买别人的搜索引擎营销就是seo
  • 首页>新闻>正文 网站怎么做宁波seo推广优化公司
  • 广州培训机构网页设计石家庄关键词优化报价
  • 怎样用织梦做音乐网站搜狗网页版入口
  • 高端网站设计服务商市场推广怎么写
  • 青海网站建设西宁网络科技公司找文网客服联系方式
  • 自适应网站可以做伪静态页面吗百度手机怎么刷排名多少钱
  • 做网站的那家公司好谷歌外贸平台
  • 做电子商务网站价格快速建站教程
  • 无锡网站建设网seo什么职位
  • 上海网站建设网站开发亚洲足球最新排名
  • 一个论坛网站应该怎么做网页怎么制作
  • python免费自学网站2345浏览器影视大全
  • 长安网站建设制作价格seo公司是做什么的
  • 做电商网站的步骤哈尔滨seo和网络推广
  • 服装网站建设目标搜索推广平台有哪些
  • nas 做网站湖南专业seo推广
  • 什么叫网站流量最新疫情最新情况
  • 乐清网站推广制作百度seo关键词排名优化工具
  • 北京网站建设学校网站推广方法
  • 本地手机网站建设淘宝seo搜索引擎优化