先上一段代码
public class YinYingMianJi {
public static void main(String[] args) {
// 获取开始时间
long startTime = System.currentTimeMillis();
// 单个小正方形的面积
double cellArea = (8.0 / 100000.0) * (4.0 / 50000.0);
// 计算的结果
double result = 0.0;
// 这一份的真实坐标
double xCoordinate;
double yCoordinate;
for (int x = 0; x < 100000; x++) {
for (int y = 0; y < 50000; y++) {
// 这一份的真实坐标
xCoordinate = ((double) x / 100000.0) * 8.0;
yCoordinate = ((double) y / 50000.0) * 4.0;
// 判断,符合要求则计入面积
if (xCoordinate <= 4.0 && (yCoordinate / xCoordinate) <= 0.5
&& ((xCoordinate - 4.0) * (xCoordinate - 4.0)
+ (yCoordinate - 4.0) * (yCoordinate - 4.0) >= 16.0)) {
result += cellArea;
}
}
}
// 获取结束时间
long endTime = System.currentTimeMillis();
System.out.println("程序运行时间: " + (endTime - startTime) + "ms");
System.out.println("阴影部分的面积是: " + result);
}
}
这段代码用于计算这个阴影部分的面积
求阴影部分的面积
运行结果是:
// 程序运行时间: 19196ms(JDK 17)
// 程序运行时间: 17488ms(JDK 1.8.0_60)
// 阴影部分的面积是: 1.2521836164419113
很明显慢于go,go仅需11.294s就可以运行结束。
node更是仅需8.442s就结束了。
那么让Java多跑几遍会怎样呢?
把代码改成
public class YinYingMianJi {
public static void main(String[] args) {
for (int cishu = 1; cishu < 21; cishu++) {
// 获取开始时间
long startTime = System.currentTimeMillis();
// 单个小正方形的面积
double cellArea = (8.0 / 100000.0) * (4.0 / 50000.0);
// 计算的结果
double result = 0.0;
// 这一份的真实坐标
double xCoordinate;
double yCoordinate;
for (int x = 0; x < 100000; x++) {
for (int y = 0; y < 50000; y++) {
// 这一份的真实坐标
xCoordinate = ((double) x / 100000.0) * 8.0;
yCoordinate = ((double) y / 50000.0) * 4.0;
// 判断,符合要求则计入面积
if (xCoordinate <= 4.0 && (yCoordinate / xCoordinate) <= 0.5
&& ((xCoordinate - 4.0) * (xCoordinate - 4.0)
+ (yCoordinate - 4.0) * (yCoordinate - 4.0) >= 16.0)) {
result += cellArea;
}
}
}
// 打印结果
System.out.println("--------------");
System.out.println("第" + cishu + "次运行");
long endTime = System.currentTimeMillis();
System.out.println("程序运行时间: " + (endTime - startTime) + "ms");
System.out.println("阴影部分的面积是: " + result);
}
}
}
运行结果是:
第1次运行
程序运行时间: 19044ms
阴影部分的面积是: 1.2521836164419113
第2次运行
程序运行时间: 11790ms
阴影部分的面积是: 1.2521836164419113
第3次运行
程序运行时间: 12010ms
阴影部分的面积是: 1.2521836164419113
第4次运行
程序运行时间: 11880ms
阴影部分的面积是: 1.2521836164419113
第5次运行
程序运行时间: 11889ms
阴影部分的面积是: 1.2521836164419113
第6次运行
程序运行时间: 11877ms
阴影部分的面积是: 1.2521836164419113
第7次运行
程序运行时间: 11936ms
阴影部分的面积是: 1.2521836164419113
第8次运行
程序运行时间: 12020ms
阴影部分的面积是: 1.2521836164419113
第9次运行
程序运行时间: 12016ms
阴影部分的面积是: 1.2521836164419113
第10次运行
程序运行时间: 11898ms
阴影部分的面积是: 1.2521836164419113
第11次运行
程序运行时间: 11954ms
阴影部分的面积是: 1.2521836164419113
第12次运行
程序运行时间: 12403ms
阴影部分的面积是: 1.2521836164419113
第13次运行
程序运行时间: 12257ms
阴影部分的面积是: 1.2521836164419113
第14次运行
程序运行时间: 11983ms
阴影部分的面积是: 1.2521836164419113
第15次运行
程序运行时间: 11791ms
阴影部分的面积是: 1.2521836164419113
第16次运行
程序运行时间: 11783ms
阴影部分的面积是: 1.2521836164419113
第17次运行
程序运行时间: 11820ms
阴影部分的面积是: 1.2521836164419113
第18次运行
程序运行时间: 11784ms
阴影部分的面积是: 1.2521836164419113
第19次运行
程序运行时间: 11779ms
阴影部分的面积是: 1.2521836164419113
第20次运行
程序运行时间: 11762ms
阴影部分的面积是: 1.2521836164419113
可以看出,Java确实越跑越快,跑第二遍的时候就已经和go差不多了。
测试环境:
- JDK:Oracle JDK 17
- CPU:intel i5-8400
- 内存:16GB
- OS:Windows 10 21H2 X64