java源文件就是源代码文件,是指我们编写好的代码文件,即

当我们开始运行的时候系统会执行javac命令先把java源文件编译成字节码文件即:

这里科普一下java为什么会有字节码文件。

字节码产生的背景:

Java最初诞生的目的就是为了在不依赖于特定的物理硬件和操作系统环境下运行,那么也就是说Java程序实现跨平台特性的基石其实就是字节码。Java之所以能够解决程序的安全性问题、跨平台移植性等问题,最主要的原因就是Java源代码的编译结果并非是本地机器指令,而是字节码。当Java源代码成功编译成字节码后,如果想在不同的平台上面运行,则无须再次编译,也就是说Java源码只需一次编译就可处处运行,这就是“Write Once,Run Anywhere”的思想。所以注定了Java程序在任何物理硬件和操作系统环境下都能够顺利运行,只要对应的平台装有特定的Java运行环境,Java程序都可以运行,虽然各个平台的Java虚拟机内部实现细节不尽相同,但是它们共同执行的字节码内容却是一样的。

什么是字节码?

参考《Java虚拟机规范Java SE7版》的描述来看,任何编程语言的编译结果满足并包含Java虚拟机的内部指令集、符号表以及一些其他辅助信息,它就是一个有效的字节码文件,就能够被虚拟机所识别并装载运行。在大部分情况下,字节码更多是存储在本地磁盘文件中,比如后缀名为“.class”的文件。每一个字节码文件都对应着全局唯一的一个类或者接口的定义信息,但这也并非绝对,类和接口并不一定都只能存储在文件里,它还可以通过类装载器直接在运行时生成。

知道了什么是字节码文件之后,我们来了解一下一个java源代码是怎么运行的:
1.通过编译器将源代码文件编译为字节码文件(字节码文件可以在任何一台机器的jvm上面运行)。
2.到当前机器所装jvm中运行字节码文件。

以我们的角度看编译运行过程就如下图所示

运行时jvm会根据当前操作系统选择jvm for linux,jvm for Windows 还是 jvm for Mac。

什么是java源码文件,什么是字节码文件,初程序的编译和运行相关推荐

  1. Java指令全集_Java的JVM字节码指令集详解

    本文详细介绍了如何使用javap查看java方法中的字节码.以及各种字节码的含义,并且配以完善的案例,一步步,从头到尾带领大家翻译javap的输出.在文末还附有JVM字节码指令集表. 本文不适合没有J ...

  2. 第 1 章 一 JVM 和 Java 体系架构 (虚拟机介绍、字节码、Java跨平台性)

    第 1 章 JVM 和 Java 体系架构 1.JVM 前言 作为Java工程师, 你是否也遇到过这些问题? 运行着的线上系统突然卡死,系统无法访问,甚至直接OOM! 想解决线上JVM GC问题,但却 ...

  3. aop 获取方法入参出参_ASM字节码编程 | JavaAgent+ASM字节码插桩采集方法名称及入参和出参结果并记录方法耗时...

    作者:小傅哥 博客:bugstack.cn ❝ 沉淀.分享.成长,让自己和他人都能有所收获! ❞ 一.前言 在我们实际的业务开发到上线的过程中,中间都会经过测试.那么怎么来保证测试质量呢?比如:提交了 ...

  4. ASM字节码编程 | JavaAgent+ASM字节码插桩采集方法名称以及入参和出参结果并记录方法耗时

    作者:小傅哥 博客:bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 在我们实际的业务开发到上线的过程中,中间都会经过测试.那么怎么来保证测试质量呢?比如:提交了多少代码 ...

  5. 字节码基础:JVM字节码初探

    本文的主要内容有:字节码所操作的原始类型.类型转换的字节码,以及操作JVM栈的字节码. 转载自码农合作社 字节码格式 字节码是JVM的机器语言.JVM加载类文件时,对类中的每个方法,它都会得到一个字节 ...

  6. java字节码和机器码_字节码和机器码

    字节码 字节码是一种中间码 字节码通常指的是已经经过编译,但与特定机器码无关,需要直译器转译后才能成为机器码的中间代码.字节码通常不像源码一样可以让人阅读,而是编码后的数值常量.引用.指令等构成的序列 ...

  7. Java 基础巩固:内部类的字节码学习和实战使用场景

    文章出自:安卓进阶学习指南 主要贡献者: Cloud9527 Alex_赵 Struggle shixinzhang 读完本文你将了解: 背景介绍 四种内部类介绍 成员内部类 静态内部类 局部内部类 ...

  8. java字节码常量池_java字节码常量池处理说明

    1. 根据java的字节码格式说明,常量池中每一项的大小不一样的.运行时,若要通过数组索引获取具体的一项时, 必须要经过一定的处理才能根据数组下标进行处理,具体的实现原理实际上就是空间换时间,可以参考 ...

  9. 大多数程序员都懂的java虚拟机:C1编译器从字节码到HIR

    从字节码到HIR 正如之前看到的,C1的HIR是一个基于静态单赋值的图IR,由基本块构成控制流图,由静态单赋值指令构成基本块,如图8-1所示. 所有的指令都派生自Instruction类,其中,Blo ...

最新文章

  1. android 代码设置inputtype,android – 如何正确设置EditText的InputType?
  2. 06:甲流疫情死亡率
  3. 使用 LxRunOffine 迁移 WSL Ubuntu安装目录
  4. POJ 3164 Command Network
  5. [树套树] 网络管理
  6. Python 操作 redis
  7. iOS:NAV+TABLE结合
  8. 计算机语言的比较英文论文,科学网—撰写高质量英文科技论文的心态、布局、程序和方法 - 岳中琦的博文...
  9. python统计数据库中每个数的个数,如何统计每个数据库中每个集合中的文档数?...
  10. matlab学习笔记1
  11. 內嵌html字符串顯示
  12. WIFI篇(1.windows下的CMD命令)
  13. 挑战全网目前最全python例子(附源码),独此一家,经典值得收藏!!!(五):Python绘图,Python实战
  14. AIOT在数字化转型中的机遇和挑战
  15. Excel 2010 VBA 入门 091 数据处理之利用数据透视表汇总数据
  16. CRISPR-Cas9实验常见问题及解决方案
  17. 这18个网站能让你的页面背景炫酷起来
  18. 多测师肖sir_高级金牌讲师_项目数据
  19. USB转串口驱动分析(一)
  20. 离谱的布斯法(补码一位乘)

热门文章

  1. LPTHW 笨办法学python 37章 python关键字/关键词介绍
  2. apache将请求转发到到tomcat应用
  3. 《汇编语言》课程设计
  4. Ext.Ajax.request
  5. Vue2.x总结(1)
  6. jQuery——入门(二)动画
  7. [HTTP] Nginx代理以及面向未来的HTTP
  8. [Node.js] mySQL数据库 -- 数据库的基本操作
  9. HTML-列表、表格、表单
  10. php下载当前页面,php实现当前页面点击下载文件的简单方法