阅读本文大概需要3分钟。
在Java中,字节码存放于以.class结尾的二进制文件。
字节码之于Java,类似于汇编语言之于C/C++。对于C/C++语言来说,不同的平台需要不同的编译器,以应对不同的操作系统和机器指令集;对于Java来说,只需要一个编译器(javac),编译形成的字节码是一种通用的代码,可以运行在任何安装了JVM的机器上,也就实现了所谓的“一次编写、到处运行”。
使用字节码和虚拟机的语言不只有Java一种,Java是现在最出名的语言,LISP是更古老的语言(该语言主要用于人工智能和科学计算);其他使用类似于字节码的语言有Icon和Prolog
JVM是运行Java应用的虚拟机,主要模块有:类加载子系统、运行时数据区、即时编译(JIT)子系统、垃圾收集子系统等;
JRE是Java运行时环境,主要包括Java SE API(基础类库和UI类库)和Java应用的部署套件。
JDK是最大的概念,包括:JVM + JRE + Java语言 + JDK辅助工具(javac、jmap等)
Java和C++的设计目标不同:(1)C++最初的设计目标是为了扩展C语言的能力,主要的应用场景是系统应用开发,跟C语言相比,C++增加了面向对象能力、异常处理、强大的资源管理能力、泛型编程、模板编程以及STL库等能力;(2)Java的设计目标是更加普遍,是纯粹的OOP语言、支持并发、更好的可移植性(跨平台能力),Java利用JVM实现了较高的安全性和可移植性。
我认为,C++和Java最主要的几个不同可以列举如下(其他语言特性的不同在此不做讨论):
C++ | Java | |
---|---|---|
平台独立性 | C++是平台相关性语言 | Java是平台无关性语言 |
指针 | C++支持指针变量,因此我们可以将任何变量的地址存放在一个指针变量中 | Java不支持指针变量 |
语言级别 | C++既可以当作是高级语言,也可以当作是机器级别的语言 | Java是纯粹的高级语言 |
内存管理 | C++需要程序员手动管理内存的分配和释放 | Java在大多数情况下不需要关心内存的分配和释放 |
bytecode (https://whatis.techtarget.com/definition/bytecode)