专栏首页kk大数据Java虚拟机:我们写的java代码究竟是如何运行起来的

Java虚拟机:我们写的java代码究竟是如何运行起来的

点击上方蓝字关注我,让我成为你的专属小太阳

首先假设咱们写好了一份Java代码,那这份Java代码中,是不是会包含很多的“.java”为后缀的代码文件?

比如User.java,OrderService.java,CustomerService.java

平时在Eclipse、Intellij Idea等开发工具中,就有很多类似这样的Java源代码文件。

现在思考一下,当写好这些“.java”后缀的代码文件之后,接下来你要部署到线上的机器去运行,你会怎么做?

一般来说,都是把代码打成“.jar”后缀的jar包,或者是“.war”后缀的war包

然后,就是把打好的包放到机器上去部署

像下图这样:

实际上这里有一个非常关键的步骤,就是“编译”

也就是说,在我们写好的“.java”代码打包的过程中,一般就会把代码编译成“.class”后缀的字节码文件,比如 User.class,Hello.class,Customer.class

然后这个 class 后缀的字节码文件,他也是可以被运行起来的

就是下图的过程:

接着就要思考下一个问题:

对于编译好的这些 .class 字节码,是怎么让他们运行起来的呢?

这个时候就需要诸如 java -jar 之类的命令来运行我们写好的代码了

此时一旦你采用 java 命令,实际上此时就会启动一个JVM进程

这个 JVM 就会来负责运行这些 .class 字节码文件,也就相当于是负责预先我们写好的系统

下一步,JVM 要运行这些 “.class” 字节码文件中的代码,首先得把这些“.class”文件中包含的各种类给加载进来

此时就会有一个“类加载器”的概念

此时会采用类加载器把编译好的那些“.class”字节码文件给加载到JVM中,然后供后续代码运行来使用

最后一步,JVM 就会基于自己的字节码执行引擎,来执行加载到内存里我们写好的那些类了

比如你的代码有一个 main 方法,那么 JVM 就会从这个 main 方法开始执行里面的代码

它需要哪个类的时候,就会使用类加载器来加载对应的类,反正对应的类就在 class 文件中

最后,整体的过程就是这样的:

这就是通俗的java代码执行的过程

本文分享自微信公众号 - kk大数据(kkbigdata)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Flink DataStream 内置数据源和外部数据源

    在 StreamExecutionEnvironment 中,可以使用 readTextFile 方法直接读取文本文件,也可以使用 readFile 方法通过指...

    kk大数据
  • Flink 16种数据转换操作,满足所有数据处理场景

    数据转换(Transformation),即通过从一个或多个 DataStream 生成新的DataStream 的过程,是主要的数据处理的手段。Flink 提...

    kk大数据
  • Flink 程序结构 下篇

    Flink 的某些转换算子,如 join、coGroup、groupBy 算子,需要先将 DataStream 或 DataSet 数据集转换成对应的 Keye...

    kk大数据
  • 使用命令行来运行Java程序

    注意事项:将文件名存为.java格式即可,并且不需要改变编码类型,为默认的ANSI即可,否则会报错:错误: 需要class, interface或enum

    Fisherman渔夫
  • Java基础-HelloWorld

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • Python使用标准库urllib模拟浏览器爬取网页内容

    爬取网页内容的第一步是分析目标网站源代码结构,确定自己要爬取的内容在哪里,这要求对HTML代码有一定了解,对于某些网站内容的爬取还需要具有一定的Javascri...

    Python小屋屋主
  • DGL中文文档

    地址:https://github.com/taishan1994/DGL_Chinese_Manual

    绝命生
  • JITWatch查看字节码被JIT编译后的汇编代码

    最近看书看到关于volitale关键字与jmm内存模型的介绍,这个知识点似乎看了好多次,背都能背下来了。但理论性的东西真的很容易忘记,看不到摸不着。于是乎,我上...

    wujiuye
  • 代码质量与技术债

    我们可以通过各种类型的检测手段来给出其质量高低的度量。但是,如果直接拿出一段源代码放在我们面前,问这段代码的质量好坏时,我们又该如何作答呢?

    腾讯移动品质中心TMQ
  • Java微服务架构

    传统的整体式架构 传统的整体式架构都是模块化的设计逻辑,如展示(Views)、应用程序逻辑(Controller)、业务逻辑(Service)和数据访问对象(...

    公众号php_pachong

扫码关注云+社区

领取腾讯云代金券