Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!news.albasani.net!.POSTED!not-for-mail From: Jan Burse Newsgroups: comp.lang.java.programmer Subject: Re: java8 up to 6x slower than java7 Date: Sat, 15 Feb 2014 12:52:59 +0100 Organization: albasani.net Lines: 42 Message-ID: References: <29a51a94-8f9a-41b1-980f-e8c13e2d11a2@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: news.albasani.net VsyoQFCaAFp73nT1YxG0k64WrQgtrQjYueeqb4zedCJLi9XviunoxycAiaG5xhcw0VcmlhEK5hmJ5QYR5elYfw== NNTP-Posting-Date: Sat, 15 Feb 2014 11:53:05 +0000 (UTC) Injection-Info: news.albasani.net; logging-data="L+YjXpueCOf+txvCgKWk8dlzlCgqtv2UNmzBONoHaJlKjPZGAV3WK0w7iGsE3RTDf0nVempSHtcuHapFjdJ/1kCNKWKWidbYOXscDsga97GqfOPmRkw+bdvUNuTuDM41"; mail-complaints-to="abuse@albasani.net" User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 SeaMonkey/2.24 In-Reply-To: Cancel-Lock: sha1:T6OMa0NpxZxkiHdMB2ObmyHS7Ek= Xref: csiph.com comp.lang.java.programmer:27516 Jan Burse schrieb: > i wrote a little pathfinder. i can run it under the jdk7 update 51 and > it is done in ~20 seconds. under java8, since a long series of builds, a > certain part involving deeeeeeeeeep recursion takes ~60 seconds instead > of 10. > i suspected the hashmap change of java8 to be the culprit since i > perform a lot of put operations, but that's not it - i used the > standard hashmap from scala to be 100% sure the hashmap can't be the > reason (or is), and indeed, i get the same performance difference > between java7 and 8 with the same hashmap > my profiler (yourkit) shows that java8 spends a much bigger amount of > time on garbage collection and allocated more objects. if i take a > memory snapshot, can see that the final results are equal, so i have > more temporary objects. yourkit also shows that more objects are > allocated using java8. > what is up with that? > all i do in the critical method is creating arraylists and performing > puts, contains and gets on a hashmap, and the recursive call. the time > is, according to yourkit, spend in the method itself, not inside the > hashmap or arraylist constructor. > any ideas? I must admit that I don't use the Java hashmap and have written a custom version. The reason for this custom version was basically to allow faster iteration, and not allocating an iterator. This was already done before JDK 8 came out, independent of JDK 8. But I now read that JDK 8 has introduced a new realization of HashMap. See for example: http://blog.credera.com/technology-insights/java/java-8-part-3-hashmap-java-time/ So I understand that you could see dramatic negative changes. Sorry to hear that. I will check my code more closely now, and try to eliminate more of HashMap by my custom code where appropriate. Bye