I have committed a working version in r14970
This is performance neutral across dacapo, jvm98 and jbb2000 in moderate heaps (worst 3% degradation, best 11% win, average insignificant win). It looks to be a slight winner in tight heaps.
Results below show production (left) and production with no PLOS (right). The worst result for no PLOS is eclipse (-3%), the best is pmd (11%)
time
benchmark divisor prod | prodNP
_201_compress 3581 1.000 | 1.018
_202_jess 1100 1.000 | 1.001
_205_raytrace 950 1.001 | 1.002
_209_db 6400 1.000 | 0.983
_213_javac 2993 1.000 | 0.999
_222_mpegaudio 2482 1.000 | 1.001
_227_mtrt 781 1.001 | 1.020
_228_jack 2059 1.000 | 0.999
antlr 1724 1.000 | 1.010
bloat 6187 1.000 | 0.995
chart 6702 1.000 | 1.009
eclipse 28176 1.000 | 1.031
fop 1835 1.000 | 1.007
hsqldb 1812 1.000 | 1.017
jython 5885 1.000 | 0.988
luindex 8104 1.000 | 0.984
lusearch 0 | 3837.35
pjbb2000 15169 1.000 | 1.005
pmd 4756 1.000 | 0.887
xalan 4864 1.000 | 0.995
min 1.000 | 0.887
max 1.001 | 1.031
mean 1.000 | 0.997
geomean 1.000 | 0.997
The attached patch is WIP on this, applied only to the SemiSpace collector. It allows all large objects to be allocated with the semi-space bump pointer, and then they are copied into the LOS at collection time. Optionally (via a static final boolean), they can just be copied into the other semi-space (so the large objects remain in the semi-space forever, and so are copied at every GC while they are live).