From 5851ea6456fe9304b440b92a1d1aa4b595adf4d0 Mon Sep 17 00:00:00 2001 From: Ivan Zahariev Date: Thu, 22 Sep 2016 22:15:51 +0300 Subject: [PATCH] LinkedList info --- java-optimizations/LinkedList.diff | 30 ++++++++++++++++++++++++++++++ java-optimizations/README.md | 1 + 2 files changed, 31 insertions(+) create mode 100644 java-optimizations/LinkedList.diff diff --git a/java-optimizations/LinkedList.diff b/java-optimizations/LinkedList.diff new file mode 100644 index 0000000..54ef6b7 --- /dev/null +++ b/java-optimizations/LinkedList.diff @@ -0,0 +1,30 @@ +--- ../primes.java 2016-09-22 22:10:58.787516331 +0300 ++++ primes.java 2016-09-22 22:11:14.919516331 +0300 +@@ -2,15 +2,15 @@ + import java.lang.Math; + + class PrimeNumbersGenerator { +- ArrayList get_primes7(int n) { +- ArrayList res = new ArrayList(); ++ List get_primes7(int n) { ++ List res = new LinkedList(); + + if (n < 2) return res; + if (n == 2) { + res.add(2); + return res; + } +- ArrayList s = new ArrayList(); ++ List s = new ArrayList(); + for (int i = 3; i < n + 1; i += 2) { + s.add(i); + } +@@ -46,7 +46,7 @@ + long startTime = System.currentTimeMillis(); + long periodTime = Long.parseLong(System.getenv("RUN_TIME"), 10) * 1000; + +- ArrayList res; ++ List res; + + while ((System.currentTimeMillis() - startTime) < periodTime) { + res = (new PrimeNumbersGenerator()).get_primes7(10000000); diff --git a/java-optimizations/README.md b/java-optimizations/README.md index 38044df..76dd4bf 100644 --- a/java-optimizations/README.md +++ b/java-optimizations/README.md @@ -4,5 +4,6 @@ Java can be (a lot) faster than what we see it with its default interpeter setti * Initial heap size -- setting this larger than the default value will allow the ArrayList to grow more efficiently by pre-allocating a bigger memory block from the system. The "java" command-line argument is "-Xms500m". * Heap and GC tuning -- we can control the ratio between the old and young generations. The "java" command-line argument is "-XX:NewRatio=1". * Skip the unneeded boxing/unboxing -- this requires a more native Java implementation. See the source code of "[primes-alt.java](../primes-alt.java)". +* Use LinkedList -- it has O(1) complexity for adding elements. Benchmark tests however don't show significant improvement under Java 8, and under Java 7 we see a slow down of 59%. These tweaks are not included in the Java benchmark test, because I wanted to test the default languages setup. I don't aim to fine-tune any of the implementations by optimizing them for the current task/algorithm. This is a generic test, not an attempt to complete the current task in the fastest possible way for each programming language.