通过冒泡排序测试Java和PHP性能_冒泡排序 php

createh54个月前 (03-01)技术教程17

上期我们测试了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=0;i--) {
			for(int j=0;j=10 && i");
			otxt.append(i);
			otxt.append(':');
			otxt.append(data[i]);
		}
		String rtxt=otxt.toString();
		long endTime=System.currentTimeMillis();
		return "耗时:"+(endTime-startTime)+"毫秒

"+rtxt; } }

PHP:

=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.'
'.$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.'
'.$i.':'.$data[$i]; }



总结:PHP从5.2升级到8.1后,性能提升很明显,但面对复杂的运算,Java的数据组织和运算效率远高于PHP。

相关文章

Java中获取和处理系统时间的最佳实践

Java中获取和处理系统时间的最佳实践引言在现代软件开发中,时间的处理是一个至关重要的环节。无论是记录日志、生成唯一标识符还是处理并发操作,准确的时间信息都是不可或缺的。Java 提供了多种方式来获取...

Java与人工智能:从入门到精通_java转人工智能好转么

Java与人工智能:从入门到精通引言在当今数字化时代,人工智能(AI)已经成为推动技术进步的重要力量。Java作为一种广泛使用的编程语言,以其平台无关性、强大的库支持和丰富的生态系统,在人工智能领域中...

Java并发编程实战:全面指南_java并发编程深度解析

Java并发编程实战:全面指南引言Java并发编程是现代软件开发中不可或缺的一部分,尤其是在处理高并发请求、大规模数据处理和实时系统时。随着多核处理器的普及,充分利用CPU资源成为了提升应用程序性能的...

Java:代码世界的常青树,就业前景大揭秘

Java:当下依旧火热在当今数字化浪潮中,Java 作为一门经典的编程语言,始终占据着技术舞台的 C 位。先来看一组令人震撼的数据:根据 IDC 统计,全球范围内对 Java 开发工程师的需求竟达到全...

从Java视角探寻永动机:技术实现的幻想与现实

永动机:科学史上的迷人追求永动机,这个充满魅力与幻想的概念,长久以来吸引着无数人的目光。从定义上来说,永动机是一种无需外界输入能量,或者仅依靠单一热源,就能持续不断运动并对外做功的神奇机器。它的起源可...

从0到1掌握MyBatis:Java持久层框架的深度解析与实战

一、MyBatis 是什么在 Java 开发的世界里,数据库操作是极为重要的一环。早期,我们使用 JDBC(Java Database Connectivity)来与数据库交互。但随着项目规模的不断扩...