LICOPT parameter

The Licensed Internal Code options (LICOPT) parameter allows you to specify individual compile-time options.

This parameter is intended for the advanced programmer who understands the potential benefits and drawbacks of each selected type of compiler option.

The following table shows the strings that are recognized by the Licensed Internal Code option (LICOPT) parameter. These strings are not case sensitive, but they are shown as mixed case for readability.

Table 1. LICOPT parameter strings
String Description
AllFieldsVolatile If set, treats all fields as volatile.
NoAllFieldsVolatile If set, no fields are treated as volatile.
AllowBindingToLoadedClasses Indicates that temporary class representations that were created as a result of defineClass calls within a running Java™ virtual machine may be tightly bound to other class representations within the same Java virtual machine.
NoAllowBindingToLoadedClasses Indicates that temporary class representations that were created as a result of defineClass calls within a running Java virtual machine may not be tightly bound to other class representations within the same Java virtual machine.
AllowClassCloning When multiple Java programs are generated for a JAR file, allows copies of classes from one program to be included in the generated code for another program. Facilitates aggressive inlining.
NoAllowClassCloning Does not allow copies of classes from one program to be included in the generated code for another program.
AllowInterJarBinding Allows tight binding to classes outside the class or JAR file being compiled. Facilitates aggressive optimizations.
NoAllowInterJarBinding Does not allow tight binding to classes outside the class or JAR file being compiled. This overrides the presence of the CLASSPATH and JDKVER parameters on CRTJVAPGM.
AllowMultiThreadedCreate CRTJVAPGM uses multiple threads, if they are available, during creation. On multiprocessor systems this enables the use of more than one processor at a time, reducing the overall time required for a long CRTJVAPGM operation. However, the CRTJVAPGM will use more system resources, leaving fewer resources available for other applications.
NoAllowMultiThreadedCreate Indicates that CRTJVAPGM performs as usual, using only one thread.
AnalyzeObjectLifetimes Performs analysis using visible classes to determine which objects are short-lived. A short-lived object does not outlive the method in which it is allocated, and may be subject to more aggressive optimizations.
NoAnalyzeObjectLifetimes Does not perform analysis of short-lived objects.
AllowBindingWithinJar Indicates that class representations within a ZIP file or JAR file may be tightly bound to other class representations within the same ZIP file or JAR file.
NoAllowBindingWithinJar Indicates that class representations within a ZIP file or JAR file may not be tightly bound to other class representations within the same ZIP file or JAR file.
AllowInlining Tells the translator that it is permitted to inline local methods. This is the default for optimization levels 30 and 40.
NoAllowInlining Does not tell the translator that it is permitted to inline local methods.
AssumeUnknownFieldsNonvolatile When the attributes of a field in an external class cannot be determined, this parameter generates code by assuming that the field is non-volatile.
NoAssumeUnknownFieldsNonvolatile When the attributes of a field in an external class cannot be determined, this parameter generates code by assuming that the field is volatile.
BindErrorHandling Specifies what action should be taken if, as a result of honoring the AssumeUnknownFieldsNonvolatile, PreresolveExtRef, or PreLoadExtRef Licensed Internal Code option, the Java virtual machine class loader detects that a class representation contains method representations, which cannot be used in the current context.
BindInit Uses bound call to local init methods.
NoBindInit Does not use bound call to local init methods.
BindSpecial Uses bound call to local special methods.
NoBindSpecial Does not use bound call to local special methods.
BindStatic Uses bound call to local static methods.
NoBindStatic Does not use bound call to local static methods.
BindTrivialFields Binds trivial field references during program creation.
NoBindTrivialFields Resolves field references at first touch.
BindVirtual Uses bound call to local final virtual methods.
NoBindVirtual Does not use bound call to local final virtual methods.
DeferResolveOnClass Takes a string parameter that is presumed to be the name of a class (for example, java.lang.Integer). When you set PreresolveExtRef to optimization level 40, classes that are specified with DeferResolveOnClass are not in the preresolve operation. This is useful if some classes in unused paths in the code are not in the CLASSPATH. It allows you to use optimization level 40 regardless of this by specifying a "DeferResolveOnClass='somepath.someclass'" for each missing class. Multiple DeferResolveOnClass entries are allowed.
DevirtualizeFinalJDK Allows CRTJVAPGM to use knowledge of the standard JDK to devirtualize calls to those JDK methods that are known to be final methods or members of final classes. It is the default at optimization levels 30 and 40.
NoDevirtualizeFinalJDK Does not allow CRTJVAPGM to use knowledge of the standard JDK to devirtualize calls to those JDK methods that are known to be final methods or members of final classes.
DevirtualizeRecursive Causes special code to be generated in the case of some recursive methods and eliminates much of the overhead of the recursive method calls. However, additional checking logic is generated on initial entry to the recursive method, so performance may not improve in cases of shallow recursion.
NoDevirtualizeRecursive Does not cause special code to be generated in the case of some recursive methods.
DisableIntCse Causes certain common subexpression optimizations to be disabled when generating code for certain types of integer expressions. This may improve overall optimization by exposing other optimization opportunities to the Optimizing Translator.
NoDisableIntCse Causes certain common subexpression optimizations to not be disabled when generating code for certain types of integer expressions. This generally results in better performing code at lower optimization levels.
DoExtBlockCSE Performs extended basic block common subexpression elimination.
NoDoExtBlockCSE Does not perform extended basic block common subexpression elimination.
DoLocalCSE Performs local common subexpression elimination.
NoDoLocalCSE Does not perform local common subexpression elimination.
EnableCseForCastCheck If set, generates code for castcheck that can be DAGed to an earlier instance.
NoEnableCseForCastCheck Is not set; does not generate code for castcheck that can be DAGed to an earlier instance.
ErrorReporting Runtime error reporting field**: Provides the option to fail the compile when encountering verification or class format errors. 0=Report all errors immediately; 0=Report all errors immediately; 1=Defer reporting of bytecode verification errors; 2=Defer reporting of bytecode verification errors and class format errors to runtime.
HideInternalMethods Causes methods in cloned classes to be made internal, allowing the methods to be omitted if there are no references to them or if all references are inlined. The default is HideInternalMethods for optimization 40 and NoHideInternalMethods for optimization between 0 and 30.
InlineArrayCopy Causes the inlining of the System.arraycopy method in some cases of scalar arrays.
NoInlineArrayCopy Prevents the inlining of the System.arraycopy method.
InlineInit Inlines init methods for java.lang classes.
NoInlineInit Does not inline init methods.
InlineMiscFloat Inlines miscellaneous float/double methods from java.lang.Math.
NoInlineMiscFloat Does not inline miscellaneous float/double methods.
InlineMiscInt Inlines miscellaneous int/long methods from java.lang.Math.
NoInlineMiscInt Does not inline miscellaneous int/long methods.
InlineStringMethods Permits inlining of certain methods from java/lang/String.
NoInlineStringMethods Inhibits inlining of certain methods from java/lang/String.
InlineTransFloat Inlines transcendental float/double methods from java.lang.Math.
NoInlineTransFloat Does not inline transcendental float/double methods.
OptimizeJsr Generates better code for "jsr" bytecodes that have a single target.
NoOptimizeJsr Suppresses generation of better code for "jsr" bytecodes that have a single target.
PreloadExtRef Indicates that referenced classes may be preloaded (without class initialization) upon method entry.
NoPreloadExtRef Indicates that referenced classes may not be preloaded upon method entry. However, the PreresolveExtRef parameter overrides this setting and causes referenced classes to be preloaded and initialized.
PreresolveExtRef Preresolves referenced methods at method entry.
NoPreresolveExtRef Resolves method references at first touch. Use to resolve "class not found" exceptions on programs that run on other machines.
ProgramSizeFactor When a JAR file may be large enough to require multiple Java programs, this numeric value (default 100) is used to determine how large each program can grow.
ShortCktAthrow If set, attempt to short-circuit athrows.
NoShortCktAthrow Is not set, does not attempt to short-circuit athrows.
ShortCktExSubclasses If set, recognizes some subclasses of Exception and short-circuit them directly.
NoShortCktExSubclasses If not set, does not recognize some subclasses of Exception and short-circuit them directly.
StrictFloat Inhibits floating-point optimizations that are not strictly compliant with the Java specification.
NoStrictFloat Permits floating-point optimizations that are not strictly compliant with the Java specification.

The double asterisk (**) signifies that these strings require a numerical value for input in the syntax of stringname=number (with no spaces in between).