java跨平台的实现

本文探讨了如何实现编程语言在不同平台上的兼容性。首先,通过在不同系统安装特定的编译器,如C语言在Linux和Windows平台上的线程创建,来解释平台相关API的重要性。然后,介绍了通过中间语言,如Java字节码,实现跨平台的原理,JVM作为例子展示了如何通过统一规范使得程序能在不同平台运行。这种方式避开了直接依赖于系统API的问题,实现了代码的‘一次编写,到处运行’目标。
摘要由CSDN通过智能技术生成

write once ,run anyWhere:一处编写,到处运行。

由于计算器只认识机器语言,所有的编程语言都需要经过这一步:“翻译”,将编程语言翻译成机器语言,机器语言只与硬件有关,与平台无关(平台一般指操作系统,如Linux、Windows)。
如果想要在不同的平台运行同一份源代码,应该如何兼容不同的平台?

1.通过编译器实现兼容。

 第一种方式可以通过**在不同的系统安装特定的编译器**,编译器能够将同样一段的程序翻译成机器指令,从而实现编程语言的兼容性。例如,C语言是一门移植性强的高级语言,但并不是跨平台,因为对于一些跟系统相关的API,不同的系统平台是无法兼容,对于C语言的一些标准库等,只要不涉及到系统调度,就可以不修改程序而直接放在其他平台运行,这也是C语言移植性强的原因。

实例:
在linux平台上使用C语言创建线程

#include <stdio.h> 
#include <pthread.h>
//子线程函数
void threadCallBack (void)
{
    int i;
    printf ("This is a pthread.\n");
}

int main (void)
{
    pthread_t id;
    int i, ret;
    //创建线程,注意对比不同平台相同功能的API
    ret=pthread_create(&id, NULL, (void *) threadCallBack, NULL) ;
    if (ret !=0)
     {
     printf ("Create pthread error!\n");
     exit (1);
     printf ("This is the main process.\n");
     pthread join (id, NULL);
     return (0); 
     }
 }

在windows平台上使用C语言创建线程

#include <stdio.h>
#include <windows.h>
//子线程函数
DWORD WINAPI ThreadFun (LPVOID pM)
{
    printf ("This is a pthread\n");
    return 0;
}
int main (){
    printf ("This is the main process.\n");
    //创建线程
    HANDLE handle = createThread (NULL, 0, ThreadFun, NULL, 0, NULL);
    WaitForSingleObject (handle, INFINITE);
    return 0; 
}

可以看到,在Linux平台上,开发者需要知道Linux平台所提供的创建线程的接口是pthread create();而在Windows平台上,开发者需要知道Windows平台所提供的创建线程的接口是CreateThread)。另外,在Linux和Windows平台上, C程序需要引用不同的头文件,并且所调用的创建线程的两种API的入参和返回值也不相同。所以当你想把一份在Windows环境下运行成功的C程序移植到Linux平台运行,就需要去修改一些与平台相关API的引用。

2.通过中间语言实现兼容

通过编译器的方式由于跟系统相关的API与平台有关,如果能定义一套规范去限定调用的方式,统一规范,我们就可以实现编程语言的跨平台性。但是类似C语言这种语法性强,是更加贴近人的思维,与机器思维偏差太远,做不到这一点。
设想一下,如果能在软件层级上去模拟机器指令的执行逻辑以及机器内存的寻址方式,是不是就可以实现编程语言的跨平台?JVM就是这么做,JVM定义了一套字节码规范,对所有平台开放。JVM只认识字节码文件,而字节码指令已经不是原本的编程语言了,而是由编程语言编译而来的中间语言,只要遵循这一套标准,就可以顺利将程序在不同的平台跑起来。
   如图,当我们在IDEA编写Studen.java并达成jar包,就可以将jar包放在linux上跑。在跑起来之前我们会安装jdk环境,而jdk是分平台的,其中jdk就包含了jvm。也就是说除了安装jdk,我们并不需要去修改源码,就可以实现跨平台。

在这里插入图片描述
参考书籍:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cai_beyond

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

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

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

打赏作者

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

抵扣说明:

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

余额充值