Sunday 2 March 2014

Java 9 Wish List

With the release of Java 8 close, it is time for me to update my Java wish list for Java.   (http://chriskirk.blogspot.com/2011/06/java-8-wishlist.html)


1. Support memory mapping of files greater than 2GB.  Memory mapping files is the fastest way to work with files in Java, and it is a technique that I am using more and more as I push for faster systems.  Having to work around the 2GB limit is tedious and unnecessary.

2. Big heap support.  Java Garbage Collectors are for the most part still stop the world collectors, which get slower as the heap size/live object count increases.  As memory is becoming so cheap, it is a shame to have to go off heap in order to maintain server performance.

3. Efficiently support primitives with Generics and polymorphic method dispatches.  It is a pain in the backside to have to duplicate methods just to support the different primitives efficiently.

4. Continuations is becoming increasingly mainstream now, and having clean ways to incrementally process large data sets asynchronously is very valuable.  It could be as simple as the Python 'yield' keyword, but ideally I want to be able to make synchronous code such as a db call not hold on to a thread, and yet be as maintainable as a normal synchronous call.

5.  File I/O still blocks.  That is why memory mapping is so valuable in Java as it does not block.  Please add true asynchronous file support.  The Async file I/O added to NIO is still implemented under the hood using the same blocking APIs, making it even slower than the synchronous apis. Shame on you Sun!  (may your rest in peace; and shame on Oracle for leaving it alone for so long).

6. Unsigned versions of short, int and long.  Java may not be C, but unsigned types are useful when working with positive numbers.

7.  Packed object arrays.  Currently Java arrays of objects are arrays of references, references have a cost to follow that is greater than many would assume (due to the way modern CPUs and cacheing subsystems work).  Thus support for arrays of structures, more like C would allow for more efficient Java code to be written.

8. Access to method parameter names at runtime.

9. Access to java docs at runtime.

10. Faster compiler.

11. Default parameter values.

12. Language support for reflection.

13. Drop the annoying diamond operator (<>).

14. Multi line string support.

15. Mix-in support.


What is on your wish lists?  Please share.