Java常见坑1-认识虚拟机和字节码

  前言:工作中常用到Java,但一些知识点虽然知道,但总是很模糊,所以,特写个《Java常见坑》系列供自己及他人查漏补缺。内容多来源于网上资料整理。

在这里插入图片描述

1、认识虚拟机(JVM)

  Java的一个非常重要的特点就是与平台的无关性。

  那么,Java是如何实现这一特点的呢?

  一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java虚拟机后,Java在不同平台上运行时不需要重新编译。Java使用虚拟机屏蔽了与具体平台相关的信息,使得Java编译程序只需生成在Java虚拟机上运行的字节码,就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

在这里插入图片描述

  实际上,JVM 并不是只有一种!只要满足 JVM 规范,每个公司、组织或者个人都可以开发自己的专属 JVM。 也就是说我们平时接触到的 HotSpot VM 仅仅是是 JVM 规范的一种实现而已。

2、字节码

1)什么是字节码?

  在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为.class的文件),它不面向任何特定的处理器,只面向虚拟机。

2)采用字节码的好处是什么?

   Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以, Java 程序运行时相对来说还是高效的(不过,和 C++,Rust,Go 等语言还是有一定差距的),而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。

在这里插入图片描述

3、为什么说 Java 语言“编译与解释并存”?

  我们可以将高级编程语言按照程序的执行方式分为两种:

  • 编译型编译型语言 会通过编译器将源代码一次性翻译成可被该平台执行的机器码。一般情况下,编译语言的执行速度比较快,开发效率比较低。常见的编译性语言有 C、C++、Go、Rust 等等。
  • 解释型解释型语言会通过解释器一句一句的将代码解释(interpret)为机器代码后再执行。解释型语言开发效率比较快,执行速度比较慢。常见的解释性语言有 Python、JavaScript、PHP 等等。

  Java 语言既具有编译型语言的特征,也具有解释型语言的特征。Java 程序要先编译生成字节码(.class 文件),然后由 Java 解释器来解释执行。

4、Java 和 C++的区别?

  1)都是面向对象的语言,都支持封装、继承和多态。

  2)Java 不提供指针来直接访问内存,程序内存更加安全。

  3)Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。

  4)Java 有自动内存管理垃圾回收机制(GC),不需要程序员手动释放无用内存。

  5)C ++同时支持方法重载和操作符重载,但是 Java 只支持方法重载(操作符重载增加了复杂性,这与 Java 最初的设计思想不符)。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值