|
|
Optimize with a SATA RAID Storage Solution
Range of capacities as low as $1250 per TB. Ideal if you currently rely on servers/disks/JBODs
A couple of weeks ago, I detailed the major features we can look forward to in Java 8. What I didn't say was that .Net has most if not all of those Java 8 features, as well as many other features deferred to Java 9. I'm not a big fan of adding everything but the kitchen sink to the Java language. However, I think the Java platform (as opposed to the language) should evolve to support these features. I also think .Net is a great technology, and C# and the .Net platform accomplished in many ways what they set out to do, which was to become Java 3. My biggest misgiving is that I've never liked Microsoft's operating system, and I loathe bugs I can't -- in theory -- fix.
A tale of two platforms
You could make the claim that with a smaller install base and a greater willingness to rip the rug out from under developers,
Microsoft can afford to move more quickly. Some of that is fair. I remember in the '90s and early 2000s, Microsoft decided
we needed to change database APIs almost weekly from ODBC, RDO, ADO, to OLEDB and so on. Yet with .Net, Microsoft reached
a kind of critical mass, and the faster progress has continued.
"Love and hate for Java 8": What are some of the most anticipated updates coming in Java 8, and which changes do working developers dread?
But how did Java fall so far behind? The early days of Java were fast paced. From Java 1.0.2 to Java 1.1, we saw radical (and often incompatible) changes in only one year. Going from 1.1 to 1.2 took 1.5 years, and version 1.22 -- a more important release than its number suggests -- arrived a mere 7 months later. Just 10 months after came the pivotal release of Java 1.3; this was the first release with a garbage collector that had the server side in mind.
Java 1.4, which brought us NIO and regexp, dropped in less than two years later. Java 1.4.2, which brought us garbage collectors for multicore environments (though
not very stable ones), came out another year on. Yes, Java 1.5 made parallel and concurrent GC ready for production, and it
added important concurrent and NIO features, but it took one more year.
Overall a good performance release, Java 1.6 made locking cheaper, but it was nowhere near as substantial as 1.5, and it required
a two-year wait. Java 1.7 was the first major change to the underlying VM technology (the G1 collector) since 1.4.2, and it
gave us invokedynamic to better connect other languages on the JVM. However, as the major releases drifted from one to two to nearly five years
apart, the pace was clearly slowing.
The table below lists some sample features in Java and .Net and their release dates.
Why did progress slow?
There's a simple explanation for Java falling off the pace: Sun was not a healthy company. Java was born in the dot-com boom
when Sun was selling Sparc boxes left and right. Meanwhile, the cost of Intel/AMD came down, but the price of Sparc didn't.
Despite the excitement around the T1000 and later platforms, the economics weren't there. (Sure, the late-model Sparc is more
efficient, but the price is so freaking high that I might as well power my data center on mahogany and endangered species
rather than pay the premium for the hardware. Even if our legislators passed cap and trade, I could buy a small rainforest
worth of carbon credits on the cost difference and theoretically make up for my excess power usage.)