# HG changeset patch # User jrose # Date 1263452752 28800 # Node ID 73b22f919c34c79a9c63421d6f61e49f0ece5ad7 # Parent b2b6a9bf62385681d68185b0c470d8fd338c435c 6912065: final fields in objects need to support inlining optimizations for JSR 292 Reviewed-by: twisti, kvn diff -r b2b6a9bf6238 -r 73b22f919c34 src/share/vm/ci/ciField.cpp --- a/src/share/vm/ci/ciField.cpp Tue Jan 12 14:37:35 2010 -0800 +++ b/src/share/vm/ci/ciField.cpp Wed Jan 13 23:05:52 2010 -0800 @@ -161,6 +161,18 @@ "bootstrap classes must not create & cache unshared fields"); } +static bool trust_final_non_static_fields(ciInstanceKlass* holder) { + if (holder == NULL) + return false; + if (holder->name() == ciSymbol::java_lang_System()) + // Never trust strangely unstable finals: System.out, etc. + return false; + // Even if general trusting is disabled, trust system-built closures in these packages. + if (holder->is_in_package("java/dyn") || holder->is_in_package("sun/dyn")) + return true; + return TrustFinalNonStaticFields; +} + void ciField::initialize_from(fieldDescriptor* fd) { // Get the flags, offset, and canonical holder of the field. _flags = ciFlags(fd->access_flags()); @@ -172,7 +184,7 @@ if (!this->is_static()) { // A field can be constant if it's a final static field or if it's // a final non-static field of a trusted class ({java,sun}.dyn). - if (_holder->is_in_package("java/dyn") || _holder->is_in_package("sun/dyn")) { + if (trust_final_non_static_fields(_holder)) { _is_constant = true; return; } diff -r b2b6a9bf6238 -r 73b22f919c34 src/share/vm/runtime/globals.hpp --- a/src/share/vm/runtime/globals.hpp Tue Jan 12 14:37:35 2010 -0800 +++ b/src/share/vm/runtime/globals.hpp Wed Jan 13 23:05:52 2010 -0800 @@ -3370,6 +3370,9 @@ diagnostic(bool, OptimizeMethodHandles, true, \ "when constructing method handles, try to improve them") \ \ + experimental(bool, TrustFinalNonStaticFields, false, \ + "trust final non-static declarations for constant folding") \ + \ experimental(bool, EnableInvokeDynamic, false, \ "recognize the invokedynamic instruction") \ \