Java程序运行机制
计算机高级编程语言类型有:编译型和解释型
Java是两种语言的结合(编译命令:javac.exe 解释命令:java.exe)
javac:负责的是编译的部分,当执行javac时,会启动java的编译器程序。对指定扩展名的.java文件进行编译。 生成了jvm可以识别的字节码文件,也就是class文件,也就是java的运行程序。
java:负责运行的部分,会启动jvm,加载运行时所需的类库,并对class文件进行执行。
一个文件要被执行,必须要有一个执行的起始点,这个起始点就是main函数。
Java程序组成:Java源文件、字节码文件、机器码指令。
Java 源程序与编译型运行区别:
两种核心机制
Java虚拟机(Java Virtal Machine)
JVM是一个可以执行 Java 字节码的虚拟机进程,或者可以说是一个虚拟的计算机,具有指令集并使用不同的存储区域,负责执行指令,管理数据、内存、寄存器。
Java 源文件被编译成能被Java 虚拟机执行的字节码文件。
Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”。
Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java 虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。
Java编译器针对Java虚拟机产生class文件,因此是独立于平台的。 Java虚拟机是能移植到不同硬件平台上的软件系统。对于不同的平台,有不同的虚拟机。Java解释器负责将Java虚拟机的代码在特定的平台上运行。
垃圾收集机制(Garbage Collection, GC)
GC(Gabage Collection)是垃圾收集的意思,它提供一种系统级线程跟踪存储空间的分配情况。
在C/C++等语言中,由程序员负责回收无用内存。
Java 语言消除了程序员回收无用内存空间的责任:它提供一种系统级线程跟踪存储空间的分配情况。并在JVM空闲时,检查并释放那些可被释放的存储空间。
垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。
程序员可以手动执行System.gc(),通知GC进行垃圾回收,但是Java语言规范并不保证GC一定会执行。
为什么要有GC?
内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃。Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
垃圾回收器的基本原理:
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。
JDK&JRE
JDK(Java Development Kit):java的开发和运行环境,java的开发工具和jre。
JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用再单独安装JRE了。
其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等
JRE(Java Runtime Environment):java程序的运行环境,java运行的所需的类库+JVM(java虚拟机)。
包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
JDK和JRE的区别:
JDK(Java 开发工具包)是完整的Java 软件开发包,其中包含java的开发工具(javac.exe、jar.exe、javadoc.ext等),也包括了JRE。可以让开发者开发、编译、执行 Java 应用程序。
JRE(Java 运行时环境)包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等。它同时也包含了执行 applet 需要的浏览器插件。如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。