网站首页 > java教程 正文
上期我们测试了Java和PHP在生成md5密码方面的速度,在相同的机器上,Spring Boot(在OpenJDK 18.9环境下)成绩约为19毫秒,JSP在tomcat(OpenJDK 1.8)环境下,也能够达到13毫秒左右,可以看出,并没有因为JDK升级和编译封装提升太多速度,我们将PHP版本由默认的5.2升级到了8.1以后,PHP可以在8毫秒内完成,比5.2缩短了6毫秒,着实有些意外,PHP在那次测试中完胜Java。
然而,在接下来的对比测试中,PHP的表现就有些堪忧了。
我们随机生成10000个随机整数,然后再对这些数字排序,最后打印出前面10个和后面10个数字,先上程序:
Java Spring Boot
package com.example.demo;
import java.util.Random;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class mysort {
@RequestMapping("/mysort")
@ResponseBody
public String mysort(Integer gs) {
int csgs=1000;
if(gs!=null)csgs=gs.intValue();
return doSort(csgs);
}
private String doSort(int cs) {
long startTime = System.currentTimeMillis();
StringBuffer otxt=new StringBuffer();
Random random=new Random();
int[] data=new int[cs];
int tmp;
for(int i=0;i<cs;i++) {
data[i]=random.nextInt(10000);
}
for(int i=cs-1;i>=0;i--) {
for(int j=0;j<i;j++) {
if(data[j]<data[j+1]) {
tmp=data[j];
data[j]=data[j+1];
data[j+1]=tmp;
}
}
}
for(int i=0;i<cs;i++) {
if(i>=10 && i<cs-10)continue;
otxt.append("<br>");
otxt.append(i);
otxt.append(':');
otxt.append(data[i]);
}
String rtxt=otxt.toString();
long endTime=System.currentTimeMillis();
return "耗时:"+(endTime-startTime)+"毫秒<br><br>"+rtxt;
}
}
PHP:
<?php
$t1=microtime(true);
$cs=empty($_GET['gs'])?1000:intval($_GET['gs']);
$data=array();
$tmp=0;
$otxt='';
for($i=0;$i<$cs;$i++)$data[$i]=rand(0,9999);
for($i=$cs-1;$i>=0;$i--){
for($j=0;$j<$i;$j++){
if($data[$j]<$data[$j+1]){
$tmp=$data[$j];
$data[$j]=$data[$j+1];
$data[$j+1]=$tmp;
}
}
}
for($i=0;$i<$cs;$i++){
if($i>=10 && $i<$cs-10)continue;
$otxt=$otxt.'<br>'.$i.':'.$data[$i];
}
$t2=microtime(true);
$t3=intval(($t2-$t1)*1000);
echo '耗时:'.$t3.'毫秒'.$otxt;
?>
经过10次运算,Java平均耗时仅177.8毫秒,而PHP平时耗时达到了恐怖的1975.5毫秒,如果把PHP版本换成5.2版权,这个时间甚至达到6000毫秒以上。
PHP是一种弱类型的语言,它对变量类型不敏感,它的每一个变量存储在一个名字zval的结构体里面,数组是一个名为hashTable的结构体,数组元素存储在bucket的结构体中,经过一系统的折腾,不管是对于数组的查询还是修改,效率远低于Java,刚才的程序,即便是跳过排序操作,仅做那个嵌套循环,也需要200多毫秒才能完成。
for($i=0;$i<$cs;$i++)$data[$i]=rand(0,9999);
for($i=$cs-1;$i>=0;$i--){
for($j=0;$j<$i;$j++){
//删除了此处的排序操作
}
}
for($i=0;$i<$cs;$i++){
if($i>=10 && $i<$cs-10)continue;
$otxt=$otxt.'<br>'.$i.':'.$data[$i];
}
总结:PHP从5.2升级到8.1后,性能提升很明显,但面对复杂的运算,Java的数据组织和运算效率远高于PHP。
猜你喜欢
- 2024-10-25 我的世界:程序员眼里的MC,和我们有什么不一样?看完才知道差距
- 2024-10-25 Java唯一ID生成策略(java 生成id)
- 2024-10-25 Hive 自定UDF函数,生成 32 位随机数
- 2024-10-25 Java程序员必备:高薪工作全靠它(java程序员需要学什么)
- 2024-10-25 从编程的角度看,我的世界是一种怎样的存在?聊聊你不知道的MC
- 2024-10-25 Java Random可破解,随机数不再随机,更不安全
- 2024-10-25 JAVA入门:零基础实现幸运抽奖功能
- 2024-10-25 伪随机数生成器(伪随机数生成器 labview)
- 2024-10-25 java随机抽取不同元素问题(java随机抽取不同元素问题有哪些)
- 2024-10-25 Java 如何从一个 List 中随机获得元素
你 发表评论:
欢迎- 最近发表
-
- Java内存溢出紧急处理:10个必知的Linux命令快速定位OOM
- 面试常问的 25+ 个 Linux 命令(linux面试命令大全)
- Java堆外内存溢出紧急处理实战:Linux命令定位与Spring Boot解决
- java开发常用的Linux命令,高频的没你想象的多
- Java 应用 CPU 飙升?8 个 Linux 命令组合拳快速锁定异常线程
- Java 开发者线上问题排查常用的 15 个 Linux 命令
- Java程序员必备的Linux命令:让你的工作效率翻倍
- Java程序员必备的Linux命令全解析
- [超全整理] Java 程序员必备的 100 条 Linux 命令大全
- SAP ABAP资源导航(sap aatp)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)