`
ictch
  • 浏览: 131486 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JAVA效率真的很低吗?Android为什么要采用它?

    博客分类:
  • Java
阅读更多

在hiapk网看到一个帖子,引发了很精彩大讨论

 

原帖地址在http://www.hiapk.com/bbs/thread-155312-1-2.html 

 

原楼主标题:《今天突然知道了一件事,让我彻彻底底的否定了milestone和android的前途!》

 

1楼 lz 
今天突然知道了一件事,让我彻彻底底的否定了milestone和android的前途!》 
那就是android软件竟然用java开发,这不是自寻死路吗。不知道android开发者是怎么想的,java那个垃圾得,脑残了,竟然不用C++,java写的烂东西怎么能和NOKIA的C++的QT相比呢。唉,就此一点就彻底否定了android,失败是迟早的事。

在众多无知的,自娱自乐的安饭的攻击下,我回去恶补了一下android的知识,结果发现google自己搞了一套什么所谓的Dalvik virtual machine。那个设计垃圾得。绝对不是吹,我拍脑袋都能想出来。唉,就那个架构,还开发3D游戏,还开发桌面级的应用,歇吧,等NOKIA的symbian3, MS的WP7出来了,让你Android看看什么叫应用,倒时候可把你的眼睛睁大了! 

9楼 lz 
java的效率很低啊。而且现在程序高手一般都讨厌java,其实他们看不起java也是有道理的,java真的很垃圾。相信我,希望MOTO早点醒悟吧,不要在android上投入太大,还是多在WP7和SB3上下点功能吧。 

android的SDK是java开发的,这个没有错啊。我今天刚看了andorid的开发方式,唉,都看不下去了,一看到eclipse,java就伤心啊,google那帮人怎么会想到用java呢。天啊,这不是自掘坟墓吗,多好的linux内核,就被遭塌了。 

12楼 flf07  
技术先进的不一定有市场。 

想当初比windows系统技术先进的多了,可现在呢。 

市场决定一切。 

纯语言而言,JAVA的执行效率确实不如C++。 
但这只是一方面,现今的硬件资源已经很充裕了, 
牺牲一点资源消耗,从而获得架构、安全、扩展、健壮等方面的优势难道不更好么? 
更何况如果runtime做得好的话,除了资源占用大点,效率方面基本没什么损失。 
.net不就是这样么,加载的时候慢点,运行的时候并不慢。 
而且android应用运行环境并不是Sun Java。 
所以楼主说法是没有根据的,如果有请拿出数据来。 

另外,再复制一大堆东西给LZ看看.. 
虽然现在NDK不是很完善,但难保以后会怎么样. 
JAVA和C/C++同时开发三方应用?呵呵 

1、前言 
        6月26日,Google Android发布了NDK,引起了很多发人员的兴趣。NDK全称:Native Development Kit。下载地址为:http://developer.android.com/sdk/ndk/1.5_r1/index.html。 

2、误解 
        新出生的事物,除了惊喜外,也会给我们带来一定的迷惑、误解。 

2.1、误解一:NDK发布之前,Android不支持进行C开发 
        在Google中搜索“NDK”,很多“Android终于可以使用C++开发”之类的标题,这是一种对Android平台编程方式的误解。其实,Android平台从诞生起,就已经支持C、C++开发。众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言。但这并不等同于“第三方应用只能使用Java”。在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,“Java+C”的编程方式是一直都可以实现的。 

        当然这种误解的产生是有根源的:在Android SDK文档里,找不到任何JNI方面的帮助。即使第三方应用开发者使用JNI完成了自己的C动态链接库(so)开发,但是so如何和应用程序一起打包成apk并发布?这里面也存在技术障碍。我曾经花了不少时间,安装交叉编译器创建so,并通过asset(资源)方式,实现捆绑so发布。但这种方式只能属于取巧的方式,并非官方支持。所以,在NDK出来之前,我们将“Java+C”的开发模式称之为灰色模式,即官方既不声明“支持这种方式”,也不声明“不支持这种方式”。 

2.2、误解二:有了NDK,我们可以使用纯C开发Android应用 
        Android SDK采用Java语言发布,把众多的C开发人员排除在第三方应用开发外(注意:我们所有讨论都是基于“第三方应用开发”,Android系统基于Linux,系统级别的开发肯定是支持C语言的。)。NDK的发布,许多人会误以为,类似于Symbian、WM,在Android平台上终于可以使用纯C、C++开发第三方应用了!其实不然,NDK文档明确说明:it is not a good way。因为NDK并没有提供各种系统事件处理支持,也没有提供应用程序生命周期维护。此外,在本次发布的NDK中,应用程序UI方面的API也没有提供。至少目前来说,使用纯C、C++开发一个完整应用的条件还不完备。 

3、NDK是什么 
对NDK进行了粗略的研究后,我对“NDK是什么”的理解如下: 

1、NDK是一系列工具的集合。 

NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。  
NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。  
NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。  
2、NDK提供了一份稳定、功能有限的API头文件声明。 

        Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。 

4、NDK带来什么 
1、NDK的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式。 

使用NDK,我们可以将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。  
使用NDK,我们可以将需要保密的应用逻辑使用C开发。毕竟,Java包都是可以反编译的。  
NDK促使专业so组件商的出现。(乐观猜想,要视乎Android用户的数量)  
2、NDK将是Android平台支持C开发的开端。 

        NDK提供了的开发工具集合,使开发人员可以便捷地开发、发布C组件。同时,Google承诺在NDK后续版本中提高“可调式”能力,即提供远程的gdb工具,使我们可以便捷地调试C源码。在支持Android平台C开发,我们能感觉到Google花费了很大精力,我们有理由憧憬“C组件支持”只是Google Android平台上C开发的开端。毕竟,C程序员仍然是码农阵营中的绝对主力,将这部分人排除在Android应用开发之外,显然是不利于Android平台繁荣昌盛的。 


uiiang 
我就是做JAVA开发的, 楼主说JAVA的效率比C++低, 确实是这样. 不过现在的CPU和内存等等各方面机器性能越来越快, 这种效率上的差别只是理论上的数据罢了, 没有专业的评测软,已经很难看到这种效率上的差别. 
另外有一点很重要的就是, 手机也好,电脑也好,不论操作系统做的多好, 多炫, 最重要的是软件的支持. 
没有广大软件开发者的支持, 没有众多的软件, 再好的系统也白搭. 
JAVA和C++相比,执行效率上是有些差, 但是JAVA的入门门槛比C++低, 可以吸引更多的开发者.这一点非常重要. 
学习和精通C++的成本实在比JAVA要高太多了 


haniklz (精彩的在这里****************) 
现在还停留在哪个语言好这种层次上的话,你确实应该认真学习一下了 

java很差?你问问你老师看看。 

为什么android为选择java?就看到执行效率了吗?有没有想过什么叫开发效率 


android短时间内3w应用java可谓功不可没。android如果仅仅是linux那么简单,最终可能也就落得和形形色色的linux移动发行版一个下场 


同样的绚丽的界面,用C语言开发可能耗时几个月,发现菜单还没做好,java语言几个小时搞定 

如果一定要追求效率为什么不直接arm汇编开发好了。
 

微软的wp7已经确定没有原生c++开发,也是基于.net的托管代码,原因?具有虚拟机层有很多好处,很重要一点就是安全性。开发的发展最初是C+汇编,现在除了在特定领域(比如驱动开发)还有人用汇编吗? 


开发难度当然是越低越好,你问问现在业内的开发人员,谁愿意做symbian的程序开发烦不烦?我们公司同样的程序在两个平台同时开发,symbian平台用了半年,android只用了不到3个月就进入测试期,如果不是仗着nokia的推广,明天symbian可能就不存在了。 
好吧,告诉楼主一个残酷的消息,qt程序的效率可没有你想的那么高R
 


android的虚拟机做过一定改进,是基于寄存器而不是基于栈的虚拟机,每个进程单独有虚拟机,版本路线图中未来也会加入jit,如果楼主还停留在十几年前的java的运行效率的认识上,那就太失败了。多学习下,如果lz是业内人士的话,少点浮躁情绪,对你以后的发展有好处。 
-- 
另外提句NDK里面一直都有openelgs库。jni调用即可。android为什么会采用java + c开发模式,google的架构师懂的比你多,他们对这些的分析和权衡恐怕不是你一句java是垃圾得来的 

还有现在不是硬件不够,而是硬件过剩了。 

-- 
c语言和java都用了很多年,说实话最看不起就是你们这些以为某某语言比某某语言高级的人了,每个语言都有它擅长的领域。比如你用c语言给我整几个web应用出来看看,看你会不会吐血 

-- 

最后再提醒楼主一句,就算你要比,你也得说是 编译型语言和解释型语言的区别啊,恐怕你就知道个C语言把。。。你让苹果的object c情何以堪,微软wp7上的c#情何以堪 

另外还有一点, ANDROID是支持C++开发的, google并没有完全封锁掉C++的接口  

语言是表现形式,比如我也可以做个编译器把java编译成机器码,把c编译成字节码 
运行效率的区别是编译型语言和解释型语言的区别,上面的源代码何种形式并不是对效率的决定因素 
还有个重要的方面就是架构问题,qt只是图形库而已,其效率并不一定被android的图形库效率高 
android的设计并不是为单一硬件平台,而是未来可能根本无法想象的各种硬件,如果不是采用了java虚拟机,今天的android恐怕只有htc那几台机器在运行而已,其他厂商更是在忙于调试中吧,再等个三五年才上得了。 
可以说不是java的话,android早就挂了,还谈什么未来 


如果还在质疑android现在的开发模式性能不达标,建议去装个雷神3的移植版。 
然后你再找一台可以按这个帧数运行的诺基亚程序出来。 

milestone在硬件上最接近的机器,就是诺基亚的n900了,两者cpu/ram一样。n900的利于虚拟内存的因素,程序切换非常快。但可以看出雷神3在两者上的运行帧数相差并不大。 


xutinggsy  
说java必死的人多了,你算老几 

uiiang  
看着这个帖子, 曾经有一瞬间我恍惚以为到了CSDN, 又感觉是JAVAEYES 

楼主像我们大一刚上课,刚听了第一节C语言课,听老师讲了C语言优点的小娃娃,可笑可笑。 
虽然单纯从效率上讲,汇编< C < C++ < C# = java < F# 
封装的越好,编程开发就越简单,但是效率会越低。 
开发的难易程度与效率本身就是一对不可调和的矛盾。 
按楼主那个幼稚逻辑,用汇编来做开发的手机系统,是不是前途无量啊? 
除非与底层密切相关,或者是对效率要求苛刻,要不然C的那点优势就没有了。 

kylinbaby  
哥哥...我做java的...目前java的大型系统远远超过C++,而且手机应用java是最好的,java可以几乎完美的跨平台,这样才能在多个厂商的机种中用同一软件 
微软为什么会推出一个效率低的C#?就是看到自己MFC开发的难度,和java开发的便利。C#里面的托管完全就是java虚拟机的山寨版。 
再说了,nokia要黄了才找的Qt,你知道什么 

     总结一下,Android的成功就是基于java,7万的应用程序,java功不可没,java把数量庞大的pc的java 程序员拉入到嵌入式手机开发的大阵营。 
Android的好玩也在于应用的很多很好玩,htc手机的程序放到TCL电视上都能运行,这就是跨平台的优势。 

手机的硬件的多样化是pc完全不能比拟的,牺牲一点效率,换来5倍的开发方便,就是java做的了。 

手机的cpu,即使是全部是arm,指令集也从arm7到arm9到 arm11到A8 ,而PC只是x86. 

其他的系统也没有抽象出很高层的操作系统借口来给应用程序调用,而这个java虚拟机做了。 

另外,android的虚拟机是谷歌自己优化过的虚拟机,不是sun公司的虚拟机,性能在优化中……  

分享到:
评论

相关推荐

    TinyPinyin:适用于Java和Android的快速,低内存占用的汉字转拼音库

    小拼音适用于Java和Android的快速,低内存占用的汉字转拼音库。当前稳定版本:2.0.3特性生成的拼音不包含声调,纳入大写;支持自定义词典,支持简体中文,繁体中文;执行效率很高(Pinyin4J的4〜16倍);很低的内存...

    Android代码-TinyPinyin

    执行效率很高(Pinyin4J的4~16倍); 很低的内存占用(不添加词典时小于30KB)。 原理介绍 打造最好的Java拼音库TinyPinyin(一):单字符转拼音的极致优化 打造最好的Java拼音库TinyPinyin(二):多音字快速处理...

    android xml解析1

    在JAVA中有两种常见的XML解析方式,DOM和SAX,DOM在解析的时候会将所有的数据一次性载入内存中进行解析,在数据量比较大的情况下,效率非常低.尤其在手机这种对内存和性能要求比较苛刻的设备里面这种方法并不可取. ...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    市场上相应的检测平台诸如检测通、凡特网等皆为pc端检测网站,并且操作繁琐不够人性化,用户在实地使用中存在很多问题。昆山工业技术研究院着眼于为委托用户和质检机构搭建良好的沟通桥梁,免去目前市场业务中企业...

    Unity3D研究之Android实现本地数据共享

    开始本篇文章之前我先为大家简单的介绍一下AndroidNDK编程的原理,我们知道Android开发使用JAVA语言来编程它的运行效率要比C/C++低很多,为了让JAVA语言可以调用C/C++这时候NDK就出现了,使用DNK可以很方便的实现...

    android实训报告.docx

    郑州轻工业学院 手机订票系统实训报告 姓名 学号 专业班级 11-02班 指导教师 王治国 王捷 王华 完成时间 2015 年 1月 11日 android实训报告全文共16页,当前为第1页。成绩 android实训报告全文共16页,当前为第1页。...

    android实训报告(2).docx

    而引进利用本系统后,与传统方式相较,具有高效率、低本钱、高质量的特点,能够节省很多人力、物力及财力。因此,从经济的角度来看,该系统可行。 操作可行性 本系统采纳菜单式,实现用户与数据库的交互,界面精练...

    Time4A:适用于Android的高级日期和时间库

    Time4A不使用服务加载程序机制,因为后者在Android上效率很低。 相反,Time4A使用资产目录存储所有文本资源,日历数据以及最后但并非最不重要的最新可用时区数据。 如果您愿意,甚至可以通过使用相同的资源路径定义...

    poi以及jxl相关的jar包下载

    缺点:效率低,图片支持不完善,对格式的支持不如POI强大 二、POI 优点: 效率高(数据来源:http://blog.csdn.net/jarvis_java/article/details/4924099) 支持公式,宏,一些企业应用上会非常实用 能够修饰...

    Java高级特性之反射学习总结

    老规矩我们还是先提出几个问题,一门技术必然要能解决一定的...  如果你是一个Android Developer,前辈们都会教导你尽量少用反射,效率太低,太慢。“射”嘛,射的太快不好了,所以反射虽然慢点,但是偶尔射一下还是很

    android opengl es 飘动的国旗

    2. 写出绘制的递归方法 开始实现时是通过循环绘制出每一个网格的纹理贴图,组合成整个图像,绘制效率较低且浪费资源较多,而且将图像进行旋转操作的时候会变形,不能达到预想的效果,所以开始对其进行整合 ...

    dynamic_register_jni.zip

    动态注册的原理:JNI 允许我们提供一个函数映射表,注册给 JVM,这样 JVM 就可以用函数映射表来调用相应的函数, 而不必通过函数名来查找相关函数(这个查找效率很低,函数名超级长)流程更加清晰可控,效率更高....

    android 自定义控件 自定义属性详细介绍

    比如说,一个视图为imageview ,imagebutton ,textview 等诸多控件的组合,用的地方有很多,我们不可能每次都来写3个的组合,既浪费时间,效率又低。在这种情况下,我们就可以自定义一个view来替换他们,不仅提升了...

    android实训报告(1).doc

    1.3.1 技术可行性 本系统开发的软硬件资源都已具备,前台开发工具使用eclipse,开发语言为java, 后台数据库使用SQlite,其基本操作实质还是对数据库进行添加、删除、查找等操作开 发环境安全,技术可靠,两者使用...

    ParcelableGenerator:一行代码以获取Parcelable。 Android Parcelable模型变得简单

    Serializable 在Java中就存在,效率较低。 Parcelable 是Android中提供的,也是官方推荐的方式,效率比Serializable高很多。 虽然Parcelable效率高,但是使用起来比Serializable麻烦很多,很多人不使用Parcelable...

    JavaScript和React Native:小程序、iOS App、Android App全搞定

    不过对于程序员来说,可又多了一个任务,...开发效率将会非常低,而且至少需要三名程序员才能在短时间内完成,并且还不支持移动App的重要功能:热更新。  可能很多读者看到第一段话后,都会有一个问题:那该怎么办呢?

    Android自定义实现BaseAdapter的优化布局

    上一篇中我们介绍了自定义实现BaseAdapter的普通实现布局,然而上一章也说了普通实现的方式效率会很低,而且对系统开销也很大,所以,那样的实现是为了让初学者能知道可以这样使用,在实际项目中不可能使用那种方式...

    sesvc.exe 阿萨德

    codeceo 首页问答热门文章RSS订阅 文章首页 ...但是为什么呢?简单分析下。 看过上文的还记得在 HashMap 扩容的时候会调用 resize() 方法,就是这里的并发操作容易在一个桶上形成环形链表;这样当获取...

    xmljava系统源码-Exploring_Flutter_in_action:从头到尾撸一遍Flutter的一切

    多平台移植成本很低,无需为某个特定的操作系统添加额外的适配代码 开发生态日趋完善,可以在找到近乎所有的类原生开发包 Exploring Flutter in action的由来 Flutter 1.0版本于北京时间2018年12

Global site tag (gtag.js) - Google Analytics