大家好,今天小编关注到一个比较有意思的话题,就是关于把java改成c语言的问题,于是小编就整理了2个相关介绍把j***a改成c语言的解答,让我们一起看看吧。

  1. 安卓系统为什么要用java语言写?可以用C语言写程序吗?
  2. Java能不能像C语言不通过JVM虚拟机直接编译成二进制机器码,让计算机直接运行?

安卓系统为什么要用j***a语言写?可以用C语言写程序吗?

这就要看安卓的系统体系结构了,安卓系统内核是基于Linux kernel上,中间层是多以J***a 实现,并且***用特殊的Dalvik 虚拟机,Dalvik虚拟机是一种“暂存器型态”的J***a虚拟机。所以应用程序是j***a语言编写的。任何语言都有优缺点,j***a适合网络编程和应用层程序编写,C语言适合底层硬件控制。

把java改成c语言-java转换成c语言
(图片来源网络,侵删)

J***a能不能像C语言不通过JVM虚拟机直接编译成二进制机器码,让计算机直接运行?

C语言的编译过程如下:

C源程序-->预编译处理(.c)-->编译、优化程序(.s、.a***)-->汇编程序(.obj、.o、.a、.ko)-->链接程序(.exe、.elf、.axf等),如图1所示。其实编译里面还包括词法分析、语法分析、语义分析,就不展开说了。

把java改成c语言-java转换成c语言
(图片来源网络,侵删)

而J***a的执行可以分为两大步骤,如图2所示,第一是编译,这一过程就是调用的j***ac命令,编译成对应的.class文件。第二是解释执行,这一过程是调用的j***a命令,其实我理解的是调用了J***a里的jvm,即j***a虚拟机。JVM其实计算机把高级语言解析成机器码都会存在一个类似这样的中间件。在c#中,我知道先编译成CIL托管代码,然后Jit编译器在CLR(公共语言运行时)这样一个库下把托管代码解释成可执行文件.exe或者dll。现在我就把JVM看作是JIT编译器。把要执行的代码翻译给计算机听,然后机器执行,大致也就是这么个道理。当然了J***a程序还是通过解释器进行解释执行时,当JVM发现某个方法或代码块运行特别频繁的时候,就会认为这是“热点代码”(Hot Spot Code)。然后JIT会把部分“热点代码”翻译成本地机器相关的机器码,并进行优化,然后再把翻译后的机器码缓存起来,以备下次使用。总的来说还是需要JVM。

如果你想把J***a编译成二进制机器码,那要重新开发一个编译器,将J***a源代码通过编译(包括词法分析、语法分析、语义分析,中间代码,优化等)生成汇编语言,然后再转化成机器码。这样以来,每个平台(X86,ARM,MIPS,PowerPC等)都需要重新编译生成相应平台的机器码,而且如果没有JVM,就没有GC(垃圾自动回收)功能了。

把java改成c语言-java转换成c语言
(图片来源网络,侵删)

各有各的优缺点,J***a目前很多人使用,就在于它的通用性好,可以跨平台直接移植,只要编译一次,不管你是什么操作系统,windows,mac,linux等等,只要有安装J***a虚拟机(JVM)就可以了。而且目前J***A整个生态圈比较完备,JDK和开发平台和工具也很多,开发的效率高,但是成也萧何败萧何,正因为JVM的存在,生成的机器码效率没有汇编和C的高。再说说C语言,本人上大学其实接触最早的就是C语言,目前的嵌入式系统中,C语言仍然是使用最广泛的语言。后来C语言发展而来的C++,目前也有大热的趋势,比如现在大热的深度学习开发平台tensorflow和pytorch,底层就是用C++开发的,因为C/C++的运行效率确实很高。给你张配图。


肯定是可以的,而且目前就有成熟的解决方案,不过,在回答这个问题之前,需要先明确一点,就是为什么J***a 需要JVM虚拟机?然后再来讨论可行的实现方案。

J***a 为什么需要JVM

众所知周,J***a 是跨平台的,能够实现程序代码的“一次编译,到处运行”,无论在哪个操作系统上,J***a 代码都会被编译为统一的J***a 字节码文件,然后再交由JVM虚拟机来运行;J***a 程序员只要编写一套程序,便同时能在Linux,Windows和Mac x等不同操作系统上运行,JVM在其中扮演了一个不可或缺的重要角色。

不同操作系统的实现方式不一,各个操作操作都有自己的一套处理方式和规范,J***a 的跨平台功能就是基于不同操作系统实现不同JVM,在哪个操作系统上运行就调用哪个操作系统的JVM来运行J***a 程序。

正式由于JVM虚拟机的存在,J***a 跨平台才得以实现,也才会有那么多的企业、组织和开发者青睐J***a 语言,让J***a 语言二十多年来长盛不衰,更是有衍生了不少除J***a 之外的,基于JVM运行的优秀编程语言,比如:Kotlin、Scala、Groovy、Clojure、Ceylon等。

GCJ

GCJ 是GNU Compiler for the J***a Programing Language 的简称,翻译过来就是“为J***a 语言实现的GNU编译器”,GCJ编译工具就包含在包含在GCC中,只要下载了GCC,就能使用GCJ。

使用GCJ编译工具可以把J***a 源程序编译为字节码文件,也能将J***a 字节码文件编译为本地机器码,更是能实现J***a 源程序直接编译为本机可运行的本地机器码。而本地机器码就可在本机直接运行。

GraalVM

GraalVM 是甲骨文公司开发的一个基于JVM的、支持多语言的高性能虚拟机,GraalVM中提供的native-image组件就能实现将J***a 源程序直接编译为本机可运行的本地机器码,就可以在本机直接运行。

不仅是J***a,GraalVM支持的语言还有C/C++、Rust、JS、Python、R、Ruby等语言,可谓是一个全栈语言虚拟机。

方舟编译器

最后一个是华为的方舟编译器,华为开发方舟编译器的目的就是为了解决JVM虚拟机性能较低的问题方舟编译器支持J***a、Kotlin、C/C++、JS等语言,目前方舟编译器实现了部分开源,代码托管在Gitee、华为官方代码库。

方舟编译器前端接收J***a、Kotlin、C/C++、JS的语言的源程序,然后将其转换为中间语言IR,然后再交给后端,最终生成本机可运行的二进制文件。

完结,希望以上回答对你能有所帮助。

到此,以上就是小编对于把j***a改成c语言的问题就介绍到这了,希望介绍关于把j***a改成c语言的2点解答对大家有用。