为什么Java虚拟机可以帮助您的代码更好地运行

您当前是否正在辩论是将Java用于下一个应用程序,还是使用本机工具箱和框架?您是否想知道Java相对于应用程序的本机编程提供了哪些优势?请继续阅读!

什么是本机应用程序?

本机应用程序是专门为操作系统(OS)编写的程序,可能是为运行该程序的特定硬件编写的程序。操作系统。它主要用C / C ++之类的语言编写。使用编译器将C / C ++源代码编译为对象形式,然后通过链接所需的库将其组装为可执行文件。以此方式构建的程序将在为其构建的特定硬件和操作系统上运行,但可能无法在其他系统上正常运行。

为什么本机应用程序不可移植?

C / C ++等语言的编译器将源代码语句转换为目标CPU的机器语言。当您尝试在其他CPU上运行此代码时,该程序可能无法正常运行(或根本无法运行),因为此CPU可能不支持编译后代码中的机器语言指令。

,新的操作系统可能与原始操作系统不同,甚至可能无法将程序文件识别为可执行文件。这是由于用于不同操作系统(例如Windows,Linux,MacOS等)上的可执行文件的文件格式不同。

可移植性是本机应用程序的一个大问题,仅将编译器升级到下一版本可能会引入重大更改。您的代码可能需要修复才能与较新的编译器一起使用。因此,通常使用称为 ifdef 语句的源代码来隔离硬件,操作系统或编译器特定的解决方法。

以下是一小段代码BZLib压缩库中的片段,说明了如何使用 ifdef 隔离平台特性:

#ifdef _WIN32# include <windows.h># ifdef small /* windows.h define small to char */# undef small# endif# ifdef BZ_EXPORT# define BZ_API(func) WINAPI func# define BZ_EXTERN extern# else /* import windows dll dynamically */# define BZ_API(func) (WINAPI * func)# define BZ_EXTERN# endif#else# define BZ_API(func) func# define BZ_EXTERN extern#endif

跨操作系统的源代码可移植性

通过在某种程度上将C / C ++源代码重新编译到新的CPU中。但是,新CPU的操作系统可能不同。而且,无论是主要的还是次要的,源代码都可能在没有更改的情况下编译。即使对操作系统版本进行很小的更改,也可能需要对源代码进行某些更改。

并且当您考虑使用诸如Windows和Linux / UNIX之类的不同操作系统时,可移植性便是全新的游戏。除非您使用将您与操作系统完全隔离的工具包或框架,否则无法移植源代码。这是因为这些系统之间的操作系统界面完全不同。如果您在代码的最远端直接使用任何操作系统原语,那么您的代码将无法在这些不同的操作系统之间移植。

Java有何不同?

正是在这种情况下,java提供了一种新的范例,一种构建软件的新方式。使用Java进行编程时,您将目标定位为虚拟机。这样的机器作为一个概念存在,并且Java语言提供了针对该机器进行编程的接口。例如,您可以查询虚拟机的可用内存量,CPU数量,网络接口等。

如何构建Java应用程序?

java该语言提供了Java编译器,可将源代码转换为目标代码。然后,目标代码由 java虚拟机执行,这是与编译器分开的程序。操作系统依次将Java虚拟机视为在该OS上运行的另一个程序。

可移植性的负担现在已从应用程序程序员转移到Java虚拟机供应商。应用程序员使用Java语言的原语编写软件,而Java虚拟机负责将这些原语转换为主机操作系统功能。发行新版本的OS时,供应商有责任更新Java虚拟机,使其在新OS上正常工作。

Java虚拟机的优点是什么?

如前所述,java虚拟机为应用程序程序员提供了操作系统和硬件的虚拟视图。该虚拟视图采用各种接口和方法的形式,用于将应用程序程序员与主机OS和基础硬件的差异区分开。因此,应用程序程序员可以访问诸如Windowing Toolkit,网络,3D图形,多个CPU等功能,而不必诉诸于低级调用,这些调用最终导致程序不可移植。

编写一个Java程序,并使用Java编译器对其进行编译。生成的目标代码(称为字节码)可以传输到在不同硬件上运行的其他主机操作系统,并且应该可以正常运行。

JIT编译器

java虚拟机使用 JIT编译器专门针对目标CPU优化字节码。 JIT代表 Just-in-Time (即时),是指JVM将运行时优化应用于字节码以使其在当前CPU上更好地运行。

JIT的另一个优势使用Java虚拟机的原因是,它可以针对不同的用例应用不同的优化,所有优化都使用相同的字节码。例如,Oracle JVM提供了两个用于运行字节码的选项:服务器模式和客户端模式。服务器模式针对长时间运行的服务器程序进行了优化,而客户端JVM模式针对可能在交互模式下使用而进行了优化,从而缩短了响应时间。

总而言之,本机应用程序是为特定硬件和操作系统构建的。操作系统。另一方面,Java应用程序通过让JVM运行编译后的字节码指令来遵循在任何地方运行一次构建的哲学。传统上,本机应用程序被认为比Java应用程序性能更高,但由于JVM使用JIT编译器,因此不一定总是正确的。

您是否开发了本机应用程序并拥有由于可移植性而转换为java?还是由于性能问题而相反?在下面的评论中让我们知道。

标签: