Java 程序员面试笔试宝典 第 4 章 Java 基础知识:4.8 Java 平台与内存管理

本文深入探讨了 Java 的平台独立性,解释了 JVM 如何通过中间码和类装载器确保 Java 程序跨平台运行。同时,讲解了 Java 平台与 C/C++ 平台的区别,以及 JVM 加载 class 文件的原理。文章还讨论了 Java 中的垃圾回收(GC)机制,包括引用计数、追踪回收等多种算法,并分析了 Java 是否存在内存泄露问题以及堆和栈的区别。
摘要由CSDN通过智能技术生成

4.8.1 为什么说 Java 是平台独立性语言

平台独立性是指可以在一个平台上编写和编译程序,而在其他平台上运行。保证 Java 具有平台独立性的机制为「中间码」和「Java 虚拟机(Java Virtual Machine,JVM)」。Java 程序被编译后不是生成能在硬件平台上可执行的代码,而是生成了一个「中间码」。不同的硬件平台上会安装有不同的 JVM,由 JVM 来负责把「中间码」翻译成硬件平台能执行的代码。由此可以看出 JVM 不具有平台独立性,而是与硬件平台相关的。

解释执行过程分三步进行:代码的装入、代码的校验和代码的执行。装入代码的工作由「类装载器」完成。被装入的代码由字节码校验器进行检查。

Java 字节码的执行也分为两种方式:即时编译方式与解释执行方式,即时编译方式指的是解释器先将字节码编译成机器码,然后再执行该机器码。解释执行方式指的是解释器通过每次解释并执行一小段代码来完成 Java 字节码程序的所有操作。通常采用的是解释执行方式。

而在 C/C++ 语言中,编译后的代码只能在特定的硬件上执行,换个硬件平台这些代码就无法执行了,从而也导致了 C/C++ 没有跨平台的特性。但 C/C++ 有更高的执行效率。

常见笔试题:

1.一个 Java 程序运行从上到下的环境次序是( )。

A.操作系统、Java 程序、JRE/JVM、硬件 B.JRE/JVM、Java 程序、硬件、操作系统

C.Java 程序、JRE/JVM、操作系统、硬件 D.Java 程序、操作系统、JRE/JVM、硬件

答案:C。见上面讲解。

2.下列说法中,正确的是( )。

A.Java 程序经编译后会产生机器码  B.Java 程序经编译后会产生字节码

C.Java 程序经编译后会产生 DLL     D.以上都不正确

答案:B。.java 文件被 javac 指令编译为.class 后缀的字节码文件,再由 JVM 执行。


4.8.2 Java 平台与其他语言平台有哪些区别

Java 平台是一个纯软件的平台,这个平台可以运行在一些基于硬件的平台(例如 Linux、Windows 等)之上。Java 平台主要包含两个模块:JVM 与 Java API(Application Program Inter-face,应用程序接口)。

JVM 是一个虚构出来的计算机,用来把 Java 编译生成的中间代码转换为机器可以识别的编码并运行。它有自己完善的硬件架构,例如处理器、堆栈、寄存器等,还具有相应的指令系统,它屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(即字节码),就可以在多种平台上不加修改地顺利运行。每当一个 Java 程序运行时,都会有一个对应的 JVM 实例,只有当程序运行结束后,这个 JVM 才会退出。JVM 实例通过调用类的 main()方法来启动一个 Java 程序,而这个 main()方法必须是公有的、静态的且返回值为 void 的方法,该方法接受一个字符串数组的参数,只有同时满足这些条件才可以作为程序的入口方法。

Java API 是 Java 为了方便开发人员进行开发而设计的,它提供了许多非常有用的接口,这些接口也是用 Java 语言编写的,并且运行在 JVM 上。


4.8.3 JVM 加载 class 文件的原理机制是什么

Java 语言是一种具有动态性的解释型语言,类(class)只有被加载到 JVM 中后才能运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

康冕峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值