java与php基准测试

java与php基准测试,java,php,benchmarking,Java,Php,Benchmarking,我是一名php开发人员,但最近我不得不为我在学校上的一堂课编写两次相同的应用程序,一次用php,一次用java。出于好奇,我对这两个版本进行了基准测试,发现如果访问数据库,java版本比php版本慢2到20倍,如果不访问DB,则慢1到10倍。我认为有两种直接的可能性: 我的爪哇很烂 我终于可以告诉人们不要再抱怨php了 我发布了我的servlet代码。我不想要任何吹毛求疵的抱怨或小的改进,但有人能看到一个可怕的性能问题吗?或者有人能解释为什么Java觉得它很糟糕吗 我经常听到人们说java比ph

我是一名php开发人员,但最近我不得不为我在学校上的一堂课编写两次相同的应用程序,一次用php,一次用java。出于好奇,我对这两个版本进行了基准测试,发现如果访问数据库,java版本比php版本慢2到20倍,如果不访问DB,则慢1到10倍。我认为有两种直接的可能性:

  • 我的爪哇很烂
  • 我终于可以告诉人们不要再抱怨php了
  • 我发布了我的servlet代码。我不想要任何吹毛求疵的抱怨或小的改进,但有人能看到一个可怕的性能问题吗?或者有人能解释为什么Java觉得它很糟糕吗


    我经常听到人们说java比php更快、更具可扩展性,尤其是我的老师,他对此深信不疑,但请求越多,java的速度就越慢。php似乎不受负载增加的影响,但保持不变。

    您的测试似乎反映的是初始开销,而不是稳态性能。尝试在循环中多次执行非DB测试(这样每个测试都会多次运行代码),并查看运行时和迭代次数之间的线性关系。我怀疑java的增量成本低于php的增量成本

    基于不太多的信息(做出最佳决策的地方),我猜测是
    Class.forName(“com.mysql.jdbc.Driver”)getConnection()
    中的code>是最大的时间链接


    char[]
    可以传递给out.println时,在importFile中创建一个
    新字符串

    在成熟的Java web应用程序中,Servlet将利用现有的JDBC连接池。到目前为止,建立新的连接将是您及时支付的最大成本

    每次尝试连接时调用
    Class.forName
    ,也会导致不必要的速度减慢

    JVM调优也可能是一个因素。在企业环境中,JVM内存和可能的GC配置将进行调整和调优,以在响应性和资源利用率之间实现理想的平衡

    正如Stephen C所指出的,JVM还有一种“预热”的概念


    尽管如此,我不知道PHP与Java相比如何,我觉得这两种语言都能提供很好的解决方案来满足不同的需求。

    PHP速度非常快,但Java是一种字节码编译语言,因此它天生就更快。这就是我要说的。互联网上的每个人都说java的速度快得多,但在我的服务器上,与php相比,它的速度太慢了。你读过这个问题了吗?第三种可能是你没有正确地进行绩效评估。@regality-这样的绩效评估有一个大问题;阅读“JVM预热”。另外,Java为每个请求创建一个新的DB连接;请阅读“JDBC连接池”,它将向您展示一个用您喜欢的语言编写的好程序可以比用别人说的速度更快的语言编写的不太好的程序快得多。java与VC++的性能有类似的争论,不使用连接池是更大的时间点。加载驱动程序可以在ms或50秒内完成。但是,从DB获得一个全新的非OLED连接可能需要200~500毫秒甚至更长的时间,这取决于网络延迟和许多其他因素。获取池连接基本上是不可操作的。为同一个类名多次调用
    类。forName(…)
    是浪费,但它不像您想象的那样昂贵,在这种情况下也不可能成为瓶颈。类加载器要做的第一件事就是查看它是否已经加载了类。如果有,则只返回先前加载的类。