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:

 FlagDescription
javac  
 -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  
 -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  
 -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)