Showing posts from March, 2011

Tasks to test your Java concurrency skills.

Write a program to calculate the fibonacci and factorals with large answers i.e. using BigInteger, to use multiple threads. Write a similar program to perform matrix multiplication of a large matrix, e.g. 1024x1024 in a multi-threaded manner. (Advanced) Write a thread safe, lockless ring buffer with one reader and one writer, multiple readers and one writer, multiple readers and multiple writers. Try to make this allocation free (ie. doesn't create any objects) Benchmark your code to determine how much faster or slower this is compared with the single threaded version. Take care to ensure your results are reproduceable. Examine how you can determine the optimial number of threads for your each task. Try to adapt your code to use JDK7's fork/join. If anyone has suggestions I would be happy to add them.

Creating Dangling Pointers in Java

Overview Since Java uses a Garbage Collector it is not possoble to create a dangling reference in pure Java See here for more details However using the Java Library it is possible to create a dangling pointer if you go out of your way to create one. You still cannot create one by accident AFAIK. Creating a dangling pointer deliberately A DirectByteBuffer has the address to a direct area of memory. In C terminology this could be called a pointer. This area of memory is not managed by the GC and must be explicity freed. The DirectByteBuffer manages the creation and cleanup for you so that when the DirectByteBuffer's Cleaner/Deallocator is GC'ed, the memory is freed. This means that indirectly the area of memory is freed when it is no longer used, however it is not directly managed meaning you can pervert this process and create a dangling references like so ByteBuffer bb1 = ByteBuffer.allocateDirect(4096); ByteBuffer bb2 = ByteBuffer.allocateDirect(4096); useReflection

A history of "Java is Dead"

"Java is Dead" has been a popular battle cry for those hoping that a cooler language will emerge as more popular. This could be D, a 4GL, Ruby, Groovy. This wishful thinking appears to be on the rise. This shows the number of hits estimated by google for "Java is dead" and year And what are the languages most associated with the "Java is dead" message? I google "java is dead" and language and the top 12 hits were D 35000 C 30300 PHP 25800 C++ 21300 Python 20000 javascript 19000 C# 18900 ruby 18100 perl 13700 Cobol 11800 Visual Basic 10300 groovy 10100 However, compare this with the number of hits for "Java Programming" and year which suggests there is still a growing interest in Java. This is supported by the latest Tiobe survey which lists not only Java in the top two most popular Programming Language wit