JavaZone 2007: The Sun JVM inside and out
Simon Ritter (Sun) took us through the myriad of options that can be used to change the behaviour of the JVM. From 140-something XX options in Java 1.4 to 532 for the newest Dolphin.
useTLAB: thread local
TLABSize: size of thread local allocation blocks
UseParNewGC: parallel copy collector
Parallel compacting collector
UseParallelGC: parallel scavenge
According to Simon, the heuristic the JVM uses include checking for 2 or more GBs of memory, 2 or more processors and whether or not the machine is running Windows :)
Thread priority policy
Increasing threading options for Java can, as Simon says, be "very, very good or very, very bad". Depending on the other workload on the machine.
My vote for best named option: DontYieldALot. Which on Linux means DontYieldAtAll.
UseBiasedLocking: "lazy" lock/unlock for uncontended locks.
TieredCompilation: switching between the client and server JIT compiler. I recommend Alex Millers Java 7 page for details.
Consider disabling explicit GC: Even though the Java docs says that calling System.gc() will cause a GC to happen some time in the future, in Sun Java it will actually run a GC every time. Who knew!
AggressiveOpt: More aggressive optimizations, may change between versions.
Use486InstrOnly: Use only old instructions
DTrace which "injects instructions into your kernel, which is pretty scary."
Lots of Java probes available.
Proposal for new Java SE 7 functionality: possible to enter your own DTrace probes, which you can then turn on when you need them.
I'm sure I missed over half of the interesting options Simon mentioned, was a bit busy with other stuff. It was an interesting sessions since I've heard of some of these options, but had no idea there were so many. Nice explanations as well.