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

要知道为什么java虚拟机比应用程序的本机编程给java带来更多优势?继续读下去!...

您目前是否正在讨论是将java用于下一个应用程序,还是使用本机工具包和框架?您想知道java为应用程序提供了哪些优于本机编程的优势吗?继续读下去!

java-virtual-machine-featured

什么是本机应用程序(a native application)?

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

Preparing a Native Executable

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

一个用于编译的语言,如C/C++,将源代码语句翻译成目标语言的机器语言。当您尝试在不同的CPU上运行此代码时,程序可能无**常工作(或根本无法工作),因为编译代码中的机器语言指令可能不受此CPU支持。

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

可移植性是本机应用程序的一个大问题,仅仅将编译器升级到下一个版本可能会带来重大变化。您的代码可能需要修复才能使用较新的编译器。因此,用ifdef语句来分离特定于硬件、操作系统或编译器的解决方法来分散源代码是很常见的。

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

#ifdef _WIN32# include <windows.h># ifdef **all /* windows.h define **all to char */# undef **all# 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数量、网络接口等。

Virtual Machine Executing Code

java应用程序是如何构建的?

java语言提供了一个java编译器,可以将源代码转换为目标代码。然后目标代码由java虚拟机执行,java虚拟机是一个独立于编译器的程序。而操作系统则将java虚拟机视为在该操作系统上运行的另一个程序。

可移植性的负担现在已经从应用程序程序员转移到java虚拟机供应商身上。应用程序程序员使用java语言的原语编写软件,java虚拟机负责将这些原语翻译到主机操作系统设施。当新版本的操作系统出现时,供应商有责任更新java虚拟机,使其在新操作系统上正常工作。

Building Java Programs

什么是java虚拟机的优点(the advantages of the java virtual machine)?

如前所述,java虚拟机为应用程序程序员提供了操作系统和硬件的虚拟视图。这个虚拟视图以各种接口和方法的形式出现,用于将应用程序程序员与主机操作系统和底层硬件的差异隔离开来。因此,应用程序程序员可以访问诸如窗口工具箱、网络、3D图形、多cpu等设施,而不必求助于最终使程序不可移植的低级调用。

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

jit编译器

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

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

总而言之,本机应用程序是为特定的硬件和操作系统构建的。另一方面,java应用程序遵循一个Build-Once-Run-Anywhere原理,让JVM运行编译的字节码指令。虽然本机应用程序传统上被认为比java应用程序性能更高,但由于JVM使用了JIT编译器,这一点可能并不总是正确的。

您是否开发了本机应用程序,并且由于可移植性而不得不转换为java?反之亦然,因为性能问题?请在下面的评论中告诉我们。

图片来源:图片来源Shutterstock.com网站

  • 发表于 2021-03-13 07:13
  • 阅读 ( 248 )
  • 分类:编程

你可能感兴趣的文章

源代码(source code)和字节码(bytecode)的区别

...程语言编写的计算机指令的集合,而字节码是源代码和由虚拟机执行的机器代码之间的中间代码。 目录 1. 概述和主要区别 2. 什么是源代码 3. 什么是字节码 4. 源代码和字节码的相似性 5. 并行比较-源代码与表格式的字节码 6. 摘...

  • 发布于 2020-10-19 15:49
  • 阅读 ( 638 )

这就是ios设备比android设备使用更少ram的原因

...们已经探讨了一些问题,比如哪个移动操作系统更安全,为什么iOS应用程序通常比Android应用程序更好。但有一点你可能没有注意到:iOS设备的RAM通常只有Android设备的一半(或更少)。为什么会这样? ...

  • 发布于 2021-03-11 20:01
  • 阅读 ( 485 )

如何使旧程序在windows10上工作

...ws10向后兼容您现有的软件吗? 以管理员身份运行 相关:为什么不应该在Windows中禁用用户帐户控制(UAC) 许多为windowsxp开发的应用程序可以在现代版本的Windows上正常工作,除了一个小问题。在windowsxp时代,普通Windows用户通常...

  • 发布于 2021-04-07 23:40
  • 阅读 ( 186 )

虚拟机(jvm)和jre公司(jre)的区别

...。要运行应用程序,需要一个JRE,它包含JVM。 JVM代表Java虚拟机,它创建了一个虚拟计算机,可以理解编写Java程序的代码。Java程序不是以特定于操作系统的方式编写的。这使它能够在任何平台上运行,但需要使用JVM将命令从Java...

  • 发布于 2021-06-23 18:18
  • 阅读 ( 213 )

应用(application)和小程序(applet)的区别

...程序,应该包含在HTML web文档中。 简单来说,应用程序在虚拟机的帮助下运行,不受任何安全限制,而applet在没有浏览器的帮助下无法运行,并且在网络访问方面受到更严格的安全限制。可以说,applet是一种不需要任何部署过程...

  • 发布于 2021-06-25 03:53
  • 阅读 ( 215 )

java(java)和java核心技术(core java)的区别

...被编译成字节码,包含Java字节码的类文件可以在运行Java虚拟机(JVM)的任何平台上执行,而不管计算机体系结构如何。它完全独立于平台,这意味着它可以在任何平台上运行任何编译过的代码。信息的丰富和它的迅速普及是程...

  • 发布于 2021-06-25 05:49
  • 阅读 ( 302 )

java(java)和j2ee架构(j2ee)的区别

...成标准字节码,可以在所有设备上运行,并预先构建Java虚拟机(JVM),因此“写一次,运行到任何地方”。由于代码的可移植性和易用性,它能够在所有与JVM兼容的机器上运行。字节码不是特定于平台的,因此在JVM的帮助下,...

  • 发布于 2021-06-25 07:07
  • 阅读 ( 340 )

jdk公司(jdk)和jre公司(jre)的区别

...区别–主要区别比较 关键术语 Java、JDK、JRE、JVM 什么是虚拟机(jvm)? Java程序是用Java编程语言编写的一组指令,用于指导计算机执行特定任务。它也被称为源代码。当程序员编写并编译Java程序时,Java编译器会将Java程序转换为...

  • 发布于 2021-07-01 00:02
  • 阅读 ( 190 )

虚拟机(jvm)和清除(clr)的区别

JVM和CLR的主要区别在于JVM是一个用于执行Java字节码的虚拟机,而CLR是一个管理.NET程序执行的虚拟机。 JVM或Java虚拟机允许执行字节码,字节码是通过编译Java源代码生成的。它可以在许多硬件和软件平台上使用。换句话说,JVM依...

  • 发布于 2021-07-01 03:02
  • 阅读 ( 274 )

机器代码(machine code)和字节码(bytecode)的区别

...接执行,而字节码是编译源代码生成的中间代码,可以由虚拟机执行。 计算机程序是执行特定任务的指令集合。一种特殊的软件,如编译器或解释器,将程序转换成机器可读的机器代码。另一方面,字节码不是本机机器码;这...

  • 发布于 2021-07-01 03:23
  • 阅读 ( 665 )
l3811714255
l3811714255

0 篇文章

相关推荐