文章目录

  • Java 语言的主要特点
  • Java 体系
  • 从源码到机器码的过程
  • JDK、JRE 与 JVM 是什么
  • 字节码解释过程
  • Java两大核心机制之JVM
  • Java两大核心机制之GC

Java 语言的主要特点

Java 语言是 高级语言
Java 语言是 简单的
Java 语言是 面向对象的
Java 语言是 分布式的
Java 语言是 健壮的
Java 语言是 安全的
Java 语言是 平台无关的
Java 语言是 可移植的
Java 语言是 解释型的
Java 语言是 高性能的
Java 语言是 多线程的
Java 语言是 动态的

Java 属于高级语言

相对于机器语言、汇编语言,Java 和 C++、C#、Python
等语言都被称之为高级语言,因为这些语言书写的代码越来越接近人类的自然语言。

面向对象

传统以 C
语言为代表的过程式编程语言以过程为中心,以算法为驱动(程序=算法+数据)。而面向对象编程语言则以对象为中心,以消息为驱动(程序=对象+消息)。Java
是典型的面向对象的语言,具体面向对象的概念和应用会在后面的课程中详细介绍。

平台无关
所谓 Java 语言是平台无关的语言,是指用 Java 编写的应用程序,编译成字节码文件(.class 后缀)后,不用修改就可在不同的软/硬件平台上运行。这得益于 Java 的虚拟机,这部分知识将在Java 程序的工作原理(点击跳转)详细介绍。

健壮性

Java 的健壮性有两个体现:

Java 丢弃了指针。这样可以杜绝内存的非法访问,虽然牺牲了程序员操作的灵活性,但对程序的健壮性而言,不无裨益。 Java的垃圾回收机制。Java 的垃圾回收机制是 Java虚拟机提供的管理内存的机制,用于在空闲时间以不定时的方式动态回收无任何引用的对象所占据的内存空间。

Java 体系

Java 从诞生至今,主要衍生出了三个体系,即 Java SE,Java EE,Java ME。

Java SE(Java Standard Edition)

Java SE 是 Java 的基础,也是 Java 的核心。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java
应用程序。Java SE 为 Java EE 提供了基础。

Java EE(Java Enterprise Edition)

Java EE 是在 Java SE 基础之上发展起来的 Java 企业版,包含了 Web 开发等企业级的开发技术,多用于 Web
系统的服务端开发。使用 Java EE 可以快速开发出安全、稳定、性能较高的大型系统。因此 Java EE
也是很多企业在技术选型阶段的一个重要考虑方向。

Java ME(Java Micro Edition)

在 Java 发展之初,Java 还有另一个分支 — Java ME。Java ME 可以用于一些嵌入式设备的 Java
程序开发。但随着时代的发展,Java ME 逐步走向没落,目前的应用范围也在逐步缩小。

从源码到机器码的过程

在整个 Java 程序的开发流程中,程序员最初是将代码写在后缀为 .java 的文件中,之后再通过编译工具将 .java 文件转换 .class 文件(也称为字节码文件)。这个“转换”过程中,又可以细分为以下四个阶段:

词汇和语法分析:分析源码的执行逻辑,并将其绘制成一个抽象的语法树。
填写符号表:复杂的程序之间会彼此引用,而此阶段就会对这些引用关系做一些预处理工作。可以理解为,在此阶段会用一些符号来表示各个程序之间的关系。

注释处理:几乎所有的编程语言都包含程序和注释两部分,此阶段会对注释进行分析和归类。

生成字节码:根据前三个阶段的结果,最终将 .java 文件转换为 .class 文件。

字节码 .class 文件会被解释为机器码,进而在具体的系统平台上执行。以上过程如下所示。


而Java之所以具有可以执行的特点就是因为JVM

JDK、JRE 与 JVM 是什么

JDK(Java Development Kit,Java 开发工具)是整个 Java 的核心。一个程序从源码到字节码需要编译,在 Java 中,这个编译动作由 JDK 提供的 javac 程序(或命令)来完成。JDK 还提供了执行程序 java、文档工具 javadoc 和反编译工具 javap 等使用工具。JDK 实际就是这些工具和 JRE 的合集。

JRE(Java Runtime Environment,Java 运行环境)是 JVM(Java Virtual Machine,Java 虚拟机)和一些常用 API(Application Programming Interface,应用程序接口)的合集。

JVM (Java Virtual Mathine,Java虚拟机)负责前文提到的解释并执行字节码。也正是有了他,Java才能在各个环境下都能运行,也就是平台移植性,我们在安装JDK时是不是要安装和自己电脑系统一样的?安装JDK的时候我们就有了自己电脑的JVM,具体内容看下文

API 可以将 API 理解为是一些已经写好的、可以供我们直接使用的代码。举个例子,如果要编写一个排序算法该怎么办?除了自己一行一行的编写代码以外,还可以直接使用 JDK 中已经提供好的排序 API,直接使用 API 里的某一行代码就能帮助我们实现排序功能,是不是很方便呢?并且为了归类,API 通常是以“包”的形式体现的,例如 java.io 就是一个汇集了很多文件操作的包,而 java.lang 是一个汇集了很多程序基础操作的包。

综上,可以发现 JDK 包含了开发工具和 JRE,而 JRE 又包含了 JVM 和常用 API,如下图所示。因此,对于开发者而言,就只需要下载并安装 JDK,然后就可以开发并运行 Java 程序了。

字节码解释过程

Java 的字节码是 Java 虚拟机执行的一种指令格式。

如下图所示,Java 字节码文件先后经过 JVM 的类装载器、字节码校验器和解释器,最终在操作系统平台上运行。具体各部分的主要功能描述如下。

类装载器。其主要功能是为执行程序寻找和装载所需要的类,就是把字节码文件装到 Java 虚拟机中。

字节码校验器。其功能是对字节码文件进行校验,保证代码的安全性。字节码校验器负责测试代码段格式并进行规则检查,检查伪造指针、违反对象访问权限或试图改变对象类型的非法代码。

解释器。具体的平台并不认识字节码文件,最终起作用的还是这个最重要的解释器,它将字节码文件翻译成所在平台能识别的东西。

Java两大核心机制之JVM

JVM 不是一台真实的机器,而是想象中的机器,通过模拟真实机器来运行 Java 程序。 既然是模拟出来的机器,JVM看起来同样有硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java 程序运行在这个抽象的 Java 虚拟机上,它是 Java 程序的运行环境,也是 Java 最具吸引力的特性之一。

前文提到过,Java 语言的一个重要特点就是平台无关性,接下来将从原理上进一步说明为什么 Java 语言具有这样的平台无关性。实现 Java “一次编译,处处运行” 的关键就是使用了 Java 虚拟机。

例如,使用 C 语言开发一个类似计算器的软件,如果想要使这个软件在Windows 平台上运行,则需要在 Windows平台下编译成目标代码,这个计算器的目标代码只能在 Windows 平台上运行。而如果想让这个计算器软件能在 Linux平台上运行,则必须在对应的平台下编译,产生针对该平台的目标代码,才可以运行。
但对于 Java 而言,则完全不是这样。用 Java 编写的计算器程序(.java 后缀)经过编译器编译成字节码文件,这个字节码文件不是针对具体平台的,而是针对抽象的 Java 虚拟机的,在 Java虚拟机上运行。而在不同的平台上,会安装不同的 Java 虚拟机,这些不同的 Java 虚拟机屏蔽了各个不同平台的差异,从而使 Java程序(字节码文件)具有平台无关性。也就是说,Java 虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行,具体原理如下图所示。

Java两大核心机制之GC

垃圾回收机制

在 C++ 中,程序结束运行之前,对象会一直占用内存,并在程序员明确释放之前不能将其所占内存分配给其他对象。

而 Java的处理方式不同,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。作为初学者,可以简单的理解为,当一个对象不再被其他对象使用时,该对象就会成为一个等待被回收的垃圾对象。

Java虚拟机提供了一个系统级线程(垃圾回收器线程),它自动跟踪每块被分配出去的内存空间,自动释放被定义成垃圾的内存。在一些书籍或文献中,垃圾回收器通常被称为 GC(Garbage Collection)。

垃圾回收机制能自动释放内存空间,减轻程序员编程的负担,这是 Java 虚拟机具有的一个显著优点。
我们会在后文详细介绍垃圾回收机制

Java 程序的工作原理相关推荐

  1. java gc的工作原理、如何优化GC的性能、如何和GC进行有效的交互

    java gc的工作原理.如何优化GC的性能.如何和GC进行有效的交互 一个优秀的Java 程序员必须了解GC 的工作原理.如何优化GC的性能.如何和GC进行有效的交互,因为有一些应用程序对性能要求较 ...

  2. Java执行引擎工作原理:方法调用

    Java执行引擎工作原理:方法调用 方法调用如何实现 函数指针和指针函数 CallStub源码详解 Git链接(有HotSpot源码) 1 方法调用如何实现 计算机核心三大功能:方法调用.取指.运算 ...

  3. 用影片《记忆碎片》解释Java注解的工作原理

    注解于我们而言并不陌生,遗憾的是,大多数人对于注解的认识,都只停留在使用的层面上,对其背后的原理则知之甚少. 在享受注解所带来的便利的同时,你是否也曾发出过这样的疑问,即: 小小的一个注解,是怎么帮我 ...

  4. Java程序的运行原理及JVM的启动是多线程的吗?

    Java程序的运行原理及JVM的启动是多线程的吗? A:Java程序的运行原理 Java通过java命令会启动java虚拟机.启动JVM,等于启动了一个应用程序,也就是启动了一个进程. 该进程会自动启 ...

  5. Java HashMap的工作原理 及各种Map区别

    2019独角兽企业重金招聘Python工程师标准>>> 一.Java HashMap的工作原理 jdk1.7下HashMap数据结构:数组加链表,链表长度没有8的限制: jdk1.8 ...

  6. 【源码阅读计划】浅析 Java 线程池工作原理及核心源码

    [源码阅读计划]浅析 Java 线程池工作原理及核心源码 为什么要用线程池? 线程池的设计 线程池如何维护自身状态? 线程池如何管理任务? execute函数执行过程(分配) getTask 函数(获 ...

  7. Java垃圾回收工作原理

    在C++中,在heap上分配对象比在stack上分配对象更加昂贵.程序需要找到合适的内存块,再返回内存的地址.但是在Java中垃圾回收器显著地提高了在heap上分配对象的速度.听起来会有些怪,但是这就 ...

  8. 【Java】Servlet 工作原理解析

    Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的 ...

  9. Java中AJAX工作原理是什么

    AJAX 指异步JavaScript 及XML(Asynchronous JavaScript And XML). 传统的Web应用允许用户填写表单(form),当提交表单时就向Web服务器发送一个请 ...

最新文章

  1. 已知等势面如何画电场线_线段的三等分点怎么画?有多少画法?
  2. MySQL下载以及安装【windows】
  3. CNN结构:用于检测的CNN结构进化-分离式方法
  4. 16进制的两位数转换不了 matlab_【大学生计算机基础】进制那些问题。小数或整数转换,各种进制间转换.........
  5. Docker镜像的目录存储讲解
  6. Java学习笔记_数组
  7. 限制RICHTEXTBOX的输入的范围
  8. 解析|不懂销售数据分析,就是一笔糊涂账!
  9. 图论 —— 环与块 —— 最小环
  10. 计算机网络 DNS协议 FTP DHCP
  11. java .insert_Java StringBuffer.insert 插入字符
  12. 家里蹲太孤单?用 Python 画一只单身狗 | 原力计划
  13. Noi2001 食物链(入门oj Problem 1706)
  14. 【3dmax千千问】初学3dmax插件神器第21课:3dmax渲染教程|疯狂模渲大师怎么深度讲解VRAY渲染器的用法呢?室内设计师怎么用VRAY渲染3dmax效果图的模型?
  15. windows快捷键之预览窗格
  16. 2020-11-30 网络爬虫
  17. 民办教育未来10年的发展趋势
  18. Java小白修炼手册--第三阶段--WebBasic( Web前端)--CSS
  19. require(‘inquirer‘)报错
  20. Python近期练习小案例

热门文章

  1. python图像倾斜校正_图像倾斜矫正
  2. 北极熊将在21世纪灭绝?真实数据情况让人心痛不已
  3. Istio服务网格进阶②:在Istio服务网格中部署Bookinfo在线书店微服务项目
  4. 三维叉乘怎么算_圆锥曲线第十四节:二次点乘与二次叉乘
  5. OpenGL.Shader:2-Android Cpp下加载assets图片资源 / 各种格式加载纹理 / 在线找AndroidNative源码
  6. 数据结构初阶——第三节-- 单链表
  7. Vincent的城堡
  8. 可见的自动售货机解决方案
  9. 【机器学习】贝叶斯分类原理+实战垃圾短信分类-SMSSpamCollection下载数据集
  10. 中国传统颜色安卓App