This page describes the command line for the experimental java compiler, the java launcher and HotSpot for the support of value types in the valhalla project.

Minimal Value Types flags:

javac

FlagDescription
-Xlint:valuesLint category for warnings associated to bad usage of value capable classes - examples:
  • VCC not final
  • VCC cannot 'extend' another class
  • overrides of 'bad' Object methods (such as wait/notify)
  • illegal modifiers on VCC such as 'synchronized'
  • non-final instance fields in VCC
  • cannot assign 'null' to variable of VCC type

java

FlagDescription
-Djava.lang.invoke.MethodHandle.DUMP_CLASS_FILES

Boolean value, default value is `false`
If true dump class files generated for lambda forms and derived value types

into a directory named DUMP_CLASS_FILES under the current directory.

-Dvalhalla.enableValueLambdaForms

Boolean value, default value is `true`
If true then lambda forms with value types in their signature will use the Q type __Value

and value-type specific byte code will be generated.

-Dvalhalla.dumpProxyClassesBoolean value, default value is `false`
If true, dumps MVT lambda forms.
-Dvalhalla.enablePoolPatches

Boolean value, default value is `false`
If true and if "valhalla.enableValueLambdaForms" is true then lambda forms with value types in their signature

will generate byte code with constant pool patching where appropriate.

HotSpot

FlagDescription
-XX:EnableMVTBoolean value, default value is `false`
If true enable support for minimal value types with a value capable class and an associated derived value type.
-XVerify:noneDisable verification. Verification is not yet supported.
-XX:ValueArrayFlattenBoolean value, default value is `true`
Flatten arrays of values, if possible
-XX:ValueArrayElemMaxFlatSizeInteger value, default is -1
Max size for flattening an array of values, < 0 means no limit
-XX:ValueArrayElemMaxFlatOopsInteger value, default is 4
Max number of embedded object references in value type to flatten in an array, < 0 means no limit 
-XX:ValueTypePassFieldsAsArgsNon-product: Boolean value, default value is `true`
Pass each value type field as an argument to a method call instead of a value type reference
-XX:ValueTypeReturnedAsFieldsNon-product: Boolean value, default value is `true`
Return value type fields instead of a value type reference
-XX:ValueArrayAtomicAccessBoolean value, default value is `false`
Enable atomic access to values in an array
 -XX:-UseTLABTo see heap allocations which do not use optimized Thread Local Allocation Buffers
  -XX:+PrintEliminateAllocationsNon-product builds: Print out when allocations are eliminated
  -XX:+PrintEscapeAnalysisNon-product builds: Print results of escape analysis (e.g. if you believe boxing was not eliminated)