【发布时间】:2020-05-29 21:42:15
【问题描述】:
我是一个真正的 Java 新手高中生,我们目前正在优化一个项目,但我现在陷入困境。我想我已经尽我所能。 以下是我的 3 节课。 PS,这些代码打印出在while循环中花费的时间,我试图在我的计算机上将它降低到不到1秒。它目前在 1.49 和 1.38 之间运行。
主要:
public class code {
public static void main(String[] args) {
int numRows = 30;
int numCols = 30;
int start = 31;
int exit = 868;
int numKittens = 30_000;
KittenBox box = new KittenBox(numRows, numCols, start, exit,
numKittens);
double a = 10;
box.play();
}
}
kitten.java:
导入 java.util.SplittableRandom;
public class Kitten {
private int rows;
private int columns;
public int square;
private SplittableRandom a;
public Kitten(int rows, int columns, int square) {
this.rows = rows;
this.columns = columns;
this.square = square;
a = new SplittableRandom();
}
public int move() {
int i = a.nextInt(1, 5);
return (i == 1 && (!(this.square < columns))) ?
this.square -= rows : ((i == 2 && (!(this.square >= columns *
(rows - 1)))) ? this.square += rows : ((i == 3 && (!(this.square
% rows == 0))) ? this.square -= 1 : ((!(this.square % rows ==
rows - 1)) ? this.square += 1 : this.square)));
}
}
kittenbox.java:
public class KittenBox {
private ArrayList<Kitten> kitten;
private int numRows;
private int numCols;
private int start;
private int exit;
private int numKittens;
public KittenBox(int numRows, int numCols, int start, int exit, int numKittens) {
this.numRows = numRows;
this.numCols = numCols;
this.start = start;
this.exit = exit;
this.numKittens = numKittens;
kitten = new ArrayList<>();
}
public void play() {
for (int i = 0; i < numKittens; i++) {
kitten.add(new Kitten(numRows, numCols, start));
}
long startTime = System.nanoTime();
while (!kitten.isEmpty()) {
for (int i = 0; i < kitten.size(); i++) {
kitten.get(i).move();
if (kitten.get(i).square == exit) {
kitten.remove(i);
}
}
}
long endTime = System.nanoTime();
System.out.format("Kittens took %f seconds to escape.\n",
(endTime - startTime) / 1000000000.0);
}
}
但我仍然无法将我的代码加速到基准测试。有没有更快的方法?
非常感谢。
【问题讨论】:
-
你确定你的代码中没有其他东西会减慢它的速度吗?像这样的库方法通常都得到了很好的优化。可能会提供更多代码,因为您将注意力集中在错误的行上。
-
您是否分析过您的应用程序以找到瓶颈,或者只是您猜测这条特定线路导致您的应用程序错过了基准测试(哪一个?)?
标签: java performance optimization cpu-speed