Java Garbage Collection Distilled (2013)
mechanical-sympathy.blogspot.com
mechanical-sympathy.blogspot.com
Its awesome that we now see opensource project shooting for a pausless gc.
While C4 does currently require OS enhancements, they could make it without it, it would just be slower. However the problem that Azul has tried to overcome with the OS could have been much more powerful attacked with the full force of oracle/sun behind it. They once put some linux patches but it was never there focus and it never went upstream.
At a big company this technogoly could have had a bigger impact, they could have talked to microsoft, apple and the linux team. I know that Azul also tried to strike up a conversation with Intel but in there words "it was like moving a mountain".
And im not suggesting Sun/Oracle should have done this for the greater good of all humans. They would would have created a gigantig benefit for java products over the competition C# and C++ in the server space.
I rember talks by Cliff Click that mentioned that they were really suprised that Sun did not have more intresst in them, considering some simple things that Sun could have to get huge increses in some of the high end server systems they were selling (am searching for the refernce ...).
Edit: See Cliff Click talk about intel and sun.
http://www.youtube.com/watch?v=5uljtqyBLxI& t=54m33s
He mentions that the sun shareholders should put there exutive staff into prison.
http://lwn.net/Articles/392307/
Seems like either the quality wasnt there or the linux people where resistant to change.
Some more info here. http://en.wikipedia.org/wiki/User:AzulPM/Managed_Runtime_Ini...
Its a pitty that this type of GC hasn't found widespread use because it gives us the best of both worlds, in terms of automatics memory management and performance.
edit for spelling mistake
The linux people are write to not just exept code from outsider into there most importent subsystems like the scheduler. Azul did more of a code dumb then really try to get patches upstream. If they had taken the time to split up there code into diffrent patches and then take the time to explain why they needed it, why lots of other people also needed it, they might have gotten lot of it threw, or at least get the conversation rolling on what the linux guys could do to make managed runtimes faster.
Its of course also true that managed runtimes are not what linux kernal hackers focus on.
So it boils down to Azul guys not having enougth time to do it right and the linux people were not exited enougth to roll withit themself.
Maybe there was a lot more talk going on in the background, but I at least could not find much more on this.
http://www.philipreames.com/Blog/2014/06/04/code-for-late-sa...
http://www.azulsystems.com/about_us/careers/llvm-compiler-en...
Reading the job advert, I would have to wonder if they want to avoid an all in, 100% bet on the Hotspot JVM, not to mention strict JVMs in general. I wouldn't be surprised if they have the best concentration of knowledge on Hotspot in the world, including Oracle, might be getting a bit tired of it, and certainly would know the limitations of its code base by now.
However, currently not that many JIT are LLVM based so it seams that it needs some love to get this to working well. Both for GC and compilation speed. Thats at least my guess.
The commercial one is already available, the other is still pretty POC/not ready yet. Both look to provide 'pretty pauseless' collection.
http://www.azulsystems.com/zing/pgc http://openjdk.java.net/jeps/189
Each service provides a sub set of functionality to the large system. They are able to run with good execution because they don't generate enough long lived objects to cause problems. When paired with a SPA on the client side, you can probably get a scalable, efficiently collected system. You can even use large boxes to house multiple services.
From a architectural point of view, this micro service things is probebly great (or actors) but I would still want to have, if possible, one OS and one JVM per hardware maschine that im running on.
A modern server has easly 128GB ram and 16 cores (im not up to date whats standard). So if you imagen lots of microservices that only use 1GB ram each you are talking about 100 virtualised OSs and 100 virtualised JVMs plus tons of serialisation overhead.
Its far more effective to have 1 JVM that runs 1000 thread and uses the full 128 GB memroy. Not only is it far more effective its also far easier to run and monitor.
You don't necessarily have to serialize data between services if one uses something like capnproto or flat buffers.
Why have one heap?
There is erlang on java and it performs quite well, so you can combine the two things.
I dont want technogoly to force my architecture, if I make a choice to go with actors I want it to be, because its the right choice and not because I have to.
Technology always forces architecture.