Dockerfile
- 📅 2023-05-25T17:06:26.143Z
- 👁️ 247 katselukertaa
- 🔓 Julkinen
#!/usr/bin/env -S sh -e -x -c 'DOCKER_BUILDKIT=1 docker build -t gcfperf . && docker run --rm gcfperf'
FROM eclipse-temurin:17 as jre-build
RUN $JAVA_HOME/bin/jlink \
--add-modules java.base,jdk.compiler \
--strip-debug \
--no-man-pages \
--no-header-files \
--compress=2 \
--output /javaruntime
FROM debian:buster-slim
ENV JAVA_HOME=/opt/java/openjdk
ENV PATH "${JAVA_HOME}/bin:${PATH}"
COPY --from=jre-build /javaruntime $JAVA_HOME
RUN mkdir /opt/app
COPY <<-"EOF" /opt/app/GcfPerf.java
import java.util.*;
public class GcfPerf {
public static int GCF1(int a, int b) {
return (b == 0) ? a : GCF1(b, a % b);
}
public static int GCF2(int a, int b) {
int copy;
while (b != 0) {
copy = a;
a = b;
b = copy % b;
}
return a;
}
public static void main(final String[] args) {
final Random random = new Random();
var stats = new Object() {
private long start;
private final HashMap<String, LongSummaryStatistics> map = new HashMap<>();
void start() {
start = System.nanoTime();
}
void end(final String key) {
map.computeIfAbsent(key, k -> new LongSummaryStatistics()).accept(System.nanoTime() - start);
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("Stats:\n");
map.forEach((key, value) -> sb.append(" %s min. %03d ns, avg. %.3f ns, max. %07d ns"
.formatted(key, value.getMin(), value.getAverage(), value.getMax())).append("\n"));
return sb.toString();
}
};
for (int i = 0; i < 1_000_000; i++) {
stats.start(); GCF1(random.nextInt(), random.nextInt()); stats.end("GCF1");
stats.start(); GCF2(random.nextInt(), random.nextInt()); stats.end("GCF2");
}
System.err.println(stats);
}
}
EOF
CMD ["java", "/opt/app/GcfPerf.java"]