RT
现在在改造一个c程序, 用java去实现
客户比较担心处理速度和内存问题
请教下如何比较?
(1. 处理速度 2.内存)

解决方案 »

  1.   

    要看是什么程序。
    如果是CPU密集型程序,比如压缩解压,当然C的效率较高了。
    除此之外,基本没啥问题。
    有些汽车制造的流水线,也用Java的程序来控制呢,只要开发过程中严谨把关,
    对数据的处理格外注重效率,基本没什么可以担忧的。内存一般不会成为问题,因为,C语言也会面临内存泄露的风险,
    没有非常完美的程序,只有非常粗心的程序员,除此之外,内存不是问题。
      

  2.   

    在比较之前,很有必要先看看这篇文章:http://www.ibm.com/developerworks/cn/java/j-jtp12214/
      

  3.   

    这种比较,永远是公说公有理,婆说婆有理,测试数据也可以按需调整。http://www.drdobbs.com/cpp/microbenching-c-c-and-java/184401976http://scribblethink.org/Computer/javaCbench.htmlhttp://trs-new.jpl.nasa.gov/dspace/bitstream/2014/18351/1/99-1827.pdf以上这几篇都是偏向Java的。
      

  4.   

    哦,这里有篇中文汇总版:
      http://blog.csdn.net/liigo/article/details/395223
      

  5.   

    而且还有个问题,
    查看java运行内存不是把虚拟机本身的内存也包括了吗?
    这样比较不是没意义了吗?烦恼啊!
      

  6.   

    费内存是肯定的了,这个不用听别人忽悠+扯淡,肯定多费很多内存。速度一般也肯定是要慢的了,你就慢慢测试吧。这个速度看你系统的规模和类型。
    如果你是一个从C改到Java的代码,不用说,代码量不会太大,那你的结果必然是慢。
    但是不用担心,足够快就OK了。
      

  7.   

    用java自带的%JDK_HOME%\bin\jvisualvm.exe工具可以查看
    某个java程序的堆内存c写的exe程序的话, 用任务管理器是不是就行了呢?请教
      

  8.   


    意义? 内存的意义就在于你用了,导致别的进程很难分配到内存了,你就是浪费了
    别的进程是不会在乎你是Java程序本身废内存,还是JVM废的内存另外,你总问只会Java的人,你能得到真正的结论吗?
      

  9.   

    csdn怎么把我的10楼给吞了???在回复下用java自带的%JDK_HOME%\bin\jvisualvm.exe工具可以查看
    某个java程序的堆内存c写的exe程序的话, 用任务管理器是不是就行了呢?请教
      

  10.   

    如果真的有那么在乎内存的话,你岂不是要用 汇编 来写代码?不同语言有不同语言的优势和劣势,目前还没有哪种语言是一统江湖的。此外,C、C++、C#、Object-C 基本上就是不同语言了;比较的时候不要搞混了。即便同一个语言,如Java,不同版本的能力和优势也往往有较大差别,不要太在乎语言本身的比较;应该关注与你自身希望的发展领域下,看不同语言的优势差异,是开发 企业Web应用 还是 GUI 还是 移动互联网?
      

  11.   


    不是我在乎
    而是客户要求做一个对比资料
    原先是mfc的程序,
    后来涉及到跨平台
    所以要改成java实现.具体的说的话, 这个程序是一个改造java的class文件的程序
    就是在class文件中插入测试代码
      

  12.   

    其实数据库大量访问的程序,那么可以和用户这么解释。c肯定比java快,以前的数据是快60倍,现在应该没那么多了, 但是现在访问主要慢在数据库访问上。 例如程序运行中 c用 0.01秒,java慢,用0.1秒, 差了10倍。 而数据库访问需要 2秒, 那么 c的2.01 和 java的2.1 在使用上完全没有任何差别了。
      

  13.   


    直接修改字节码?够狠啊。
    如果能的话,用AOP来做更安全些。既然命题明确,还是能进行些测试的:
    首先:如果程序能实现流式处理,那么内存其实可以不需要进行对比。
    其次:把你程序要做的操作,切分为某些局部操作,比如:
    —— 文件读取 和 文件写入:顺序读写、随机读写、大文件和小文件;其实这个我觉得基本没差别;
    —— 内存搜索,在巨大的byte[]中搜索一段特征码;这个也许C会有些优势;
    —— 其它暂时想不到了。跟客户说清楚,程序中主要处理逻辑就是这些操作的组合,那么针对每种操作进行粗略性能比较就行了。
    很多东西,看似合理就够了;最终还是要自己先拿定主意,再适当选择样本数据。
      

  14.   

    aop恐怕不行
    因为程序不仅针对方法, 还针对具体每一行代码其实就是class文件在内存中的数据结构问题
    c程序中是用结构体的
    java的话肯定要用对象了就是这俩个结构占用内存的对比还有就是处理速度的问题
      

  15.   

    mFC 不是也有IBM出的跨平台版的...好像在哪看过...
      

  16.   

    有,Notes等Team搞的,基本每人在用吧?
      

  17.   

    既然担心,那就不用改造了,继续用 C 呗另外,MFC 跟 C 根本就是不同的东西
      

  18.   

    程序我做了个domo版的
    简单读取class文件结构到内存中去
    速度的话
    MFC的是java的2倍左右比较方法是批处理执行100次如下java版@echo offset t1=%time%for /l %%a in (1 1 100) do (
        java -jar Demo.jar Helloworld.class
    )set t2=%time%echo start at : %t1%
    echo end at   : %t2%
    pause
    MFC版
    @echo offset t1=%time%for /l %%a in (1 1 100) do (
        Demo.exe Helloworld.class
    )set t2=%time%echo start at : %t1%
    echo end at   : %t2%
    pause
      

  19.   


    你这个重点是在比较JVM启动的时间开销了。
      

  20.   

    我个人认为应该是这样的。如果要比较程序启动速度,这个不用说肯定是 MFC比Java快,直接用空应用来比较更干脆。如果只是为了比较文件顺序读取速度,应该要在程序内。此外读取相同文件跟不同文件也有差异,如果都是在读取不同文件,那么性能基本都损耗在磁盘IO上,处理可比性很小。如果连续读取相同文件,那么文件基本都被装载入操作系统内存中,那么比较的就只是平台在访问数据的速度了。不过我认为这个差异应该很小,毕竟Java关于文件IO的部分,也是Native的。