Java和JavaScript运算性能对比
来源:互联网 发布:自学单片机编程 编辑:程序博客网 时间:2024/05/24 04:14
Java和JavaScript运算性能对比
以下仅展示两段运算代码的运行时间。Jdk版本为1.7.0_07(64位),JavaScript运行环境为Google Chrome60.0.3112.113(64位)。
超大规模运算(万亿级)
Java代码
public static void calc1(){ float value=0; long start = System.currentTimeMillis(); for (int i = 0; i < 1000; i++) { for (int j = 0; j < 1000; j++) { for (int k = 0; k < 1000; k++) { for (int k2 = 0; k2 < 10; k2++) { value+=k2*k+j+i; } } } } long end = System.currentTimeMillis(); System.out.println(value); System.out.println(end - start); }
JavaScript代码
function calc1(){ var value=0; var start = new Date().getTime(); for (var i = 0; i < 1000; i++) { for (var j = 0; j < 1000; j++) { for (var k = 0; k < 1000; k++) { for (var k2 = 0; k2 < 10; k2++) { value+=k2*k+j+i; } } } } var end = new Date().getTime(); console.log(value); console.log(end - start);}
运行结果
考虑到寄存器缓存对性能的影响,每个方法都执行6次并去除第一次运行时间后取平均值。Java输出18024ms;Js输出17572ms。
第一次运行时间对比,Java输出18516ms;Js输出23459ms。
小规模运算(百万级以内)
Java代码
public static void calc2(){ double value=0; float temp1=0; float temp2=0; float temp3=0; float temp4=0; float temp5=0; long start = System.nanoTime(); int j=0; for (int i = 0; i < 1000000; i++,j--) { temp1+=i*j; temp2+=i; temp3+=j; temp4+=i*i; temp5+=j*j; } value=(temp1-temp2*temp3/1000000)/Math.sqrt((temp4-temp2*temp2/1000000)*(temp5-temp3*temp3/1000000)); long end = System.nanoTime(); System.out.println(value); System.out.println(end - start); }
JavaScript代码
function calc2(){ var value= 0,temp1= 0,temp2= 0,temp3= 0,temp4= 0,temp5= 0,j=0; var start = new Date().getTime(); for (var i = 0; i < 1000000; i++,j--) { temp1+=i*j; temp2+=i; temp3+=j; temp4+=i*i; temp5+=j*j; } value=(temp1-temp2*temp3/1000000)/Math.sqrt((temp4-temp2*temp2/1000000)*(temp5-temp3*temp3/1000000)); var end = new Date().getTime(); console.log(value); console.log(end - start);}
运行结果
考虑到寄存器缓存对性能的影响,每个方法都执行11次并去除第一次运行时间后取平均值。Java输出6ms;Js输出5ms。
第一次运行时间对比,Java输出7ms;Js输出20ms。
结论
观察发现,不考虑Js本身的解释时间和Java本身的编译时间,Js第一次运行性能较差,但后续运行时性能提升明显,并优于Java;Java第一次运行性能和平均运行时间几乎相等,平均运行时间和Js也几乎相等,但是略差于Js。
附加说明
通常人们口中的解释型语言和编译型语言,在本文所描述的程序测试中是测不出差别的,因为运行到计时代码的时候,解释和编译的环节都已经结束了。可以看到,上文中基于寄存器缓存的“平均运行时间”,Java和Js是基本等同的,可能V8引擎在CPU性能和内存优化上做的更加完善,最终导致平均运行时间Js快于Java。
编译型语言理论上是一次编译终身使用,解释型语言是用一次解释一次,因此现实场景中肯定需要考虑各自的时间消耗。这也决定了两者各自的应用场景:编译型语言常部署于后台服务,而解释性语言常用于前端客户端。我们在做程序语言对比的时候千万不能忽略这些本质的原理。
阅读全文
1 0
- Java和JavaScript运算性能对比
- Java和Javascript对比
- jQuery和JavaScript 库的性能对比
- Java和JavaScript简单对比
- Java和C++位运算对比
- javascript string 性能对比
- c和java中的位运算对比---补码运算
- ice和java socket性能对比。
- Scala和Java的循环性能对比
- python、nodejs和java性能对比
- java和javascript正则表达对比
- groovy性能测试,groovy和java性能对比
- 慎用++运算符,java和C++中的一个对比
- 慎用++运算符,java和C++中的一个对比
- 翻译+转:java.io和java.nio性能简单对比
- 翻译+转:java.io和java.nio性能简单对比
- java.io和java.nio性能简单对比
- java.io和java.nio性能简单对比
- windows tomcat 多域名配置
- loadrunner 安装及汉化
- HDU 1114 Piggy-Bank——完全背包
- 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果
- java 五子棋
- Java和JavaScript运算性能对比
- 《JAVA虚拟机》读书笔记二之GC
- 二叉树的创建与遍历
- Traveling by Stagecoach POJ
- vue 倒计时 获取验证码
- 实现python代码的动态删除多余的日志文件(非自带滚动日志方法)
- 彩色图转灰度图原理
- 算法面试题
- iOS 使用MVVM模式实现Cell的点击响应