请教一个java编译问题。java语言是为了跨平台而生的…

请教一个java编译问题。java语言是为了跨平台而生的,不同的平台(操作系统)会有自己的JVM,只要编译器将java源码编译成class字节码,交给jvm执行引擎转换成机器码后就可以在不同的平台运行。但是对于android而言,操作系统不是只有一种吗?为什么不直接编译成机器码呢

加里顿科技有限公司员工说:机器码和硬件相关,不同CPU指令集不一样

简庸说:因为好推广,java语言难度相对较低。如果选择难度极高的cpp作为开发语言,那安卓只会步meego后尘。

楼主说:不是的 我意思是 还是用java语言开发 但是编译器直接转换成机器码

天曦网络科技(北京)有限公司员工说:没必要,根据28原则,jit只需要编译热点代码块就行了,一个热点代码块通过jit编译要不了多少时间,基本毫秒级别,但是一个安卓应用如果在安装的时候就全部jit编译为机器码可能需要几分钟,当初google搞过安装时全量jit,没多久就又改回混合编译

楼主说:我意思不是安装的时候转换成机器码 而是在IDE编译生成apk时就直接生成机器码

天曦网络科技(北京)有限公司员工说:你要考虑到机器码一般比字节码大很多

楼主说:这部分的空间增长我觉得不是重点 要不然最开始谷歌也不会推ART,AOT最终弃用是因为安装时间太长

天曦网络科技(北京)有限公司员工说:体积甚至能膨胀50%

程序猿.技术越来越牛说:就是因为安装时间过长超出了用户忍受的极限

楼主说:你是指apk大小吗

程序猿.青青子衿丶说:m

滴滴出行员工说:m

加里顿科技有限公司员工说:机器码和硬件相关,不同CPU指令集不一样

陈家洛说:直接编译成机器码那虚拟机做啥,还能不能跨平台,有没有想过

楼主说:现在基本都是arm了吧 我意思是 如果针对某个手机厂家 手机的操作系统 cpu肯定是一致的吧 这时候是不是就可以针对该系统编译出对应的机械码 很好奇华为的方舟编译器是不是这个原理

楼主说:我针对的是手机android应用 你需要跨哪些平台?

程序猿.刘封说:你是受华为的方舟的启发才想到这个了吧

加里顿科技有限公司员工说:arm也有指令集的更新啊,比如v2增加了什么指令提高了效率等

苏宁云商集团股份有限公司员工说:为什么不能编成apk时候转成机器码?

无可奉告股份有限公司员工说:好深奥,仰望[吃惊]

陈家洛说:Android也分arm,x86等,还没统一,像苹果就是统一的

黄盖说:m

蚂蚁融信员工说:只有一种系统,但是有很多种芯片啊

程序猿.云中鹤说:现在架构算是差不多统一了

程序猿.云中鹤说:[流泪]大佬 安卓现在工作不好找 怎么办啊

陈家洛说:硬件不统一,就没法这么做,除非Google出标准

程序猿.云中鹤说:以前开发时候要放好多个so包 现在差不多一个就够用了 已经强不少了

陈家洛说:嗯,现在主要是arm,其余的基本适配少了,主要是那些没发展起来

程序猿.带你看日出说:m

我要去头条说:m

360员工说:谁告诉你不是机器码了?安卓5.0 以上,谷歌就用了自己的虚拟机ART ,安装时直接是机器码了。

楼主说:现在基本都是arm了吧 我意思是 如果针对某个手机厂家 手机的操作系统 cpu肯定是一致的吧 这时候是不是就可以针对该系统编译出对应的机械码 很好奇华为的方舟编译器是不是这个原理

楼主说:纯粹的ART早已经废弃了好吗…现在是JIT+ART,但依然不是100%执行机器码 部分还是边解释边执行

楼主说:是的

楼主说:就算指令集更新后 那适配新的编译器就好了吧

苏星河说:大牛,可以详细展开说一说吗。之前也困惑这个问题,查网上资料是说为了解决二进制分发的问题,但是也没有特别理解应用场景

匿名区的韦小宝说:m