< prev index next >

src/hotspot/share/classfile/javaClasses.hpp

Print this page
rev 54422 : 8221477: Inject os/cpu-specific constants into Unsafe from JVM
Summary: Initialize Unsafe os/cpu-specific constants using injection instead of native callouts
Reviewed-by: stuefe, coleenp, dholmes


  64   f(java_lang_invoke_MemberName) \
  65   f(java_lang_invoke_ResolvedMethodName) \
  66   f(java_lang_invoke_LambdaForm) \
  67   f(java_lang_invoke_MethodType) \
  68   f(java_lang_invoke_CallSite) \
  69   f(java_lang_invoke_MethodHandleNatives_CallSiteContext) \
  70   f(java_security_AccessControlContext) \
  71   f(java_lang_reflect_AccessibleObject) \
  72   f(java_lang_reflect_Method) \
  73   f(java_lang_reflect_Constructor) \
  74   f(java_lang_reflect_Field) \
  75   f(java_nio_Buffer) \
  76   f(reflect_ConstantPool) \
  77   f(reflect_UnsafeStaticFieldAccessorImpl) \
  78   f(java_lang_reflect_Parameter) \
  79   f(java_lang_Module) \
  80   f(java_lang_StackTraceElement) \
  81   f(java_lang_StackFrameInfo) \
  82   f(java_lang_LiveStackFrameInfo) \
  83   f(java_util_concurrent_locks_AbstractOwnableSynchronizer) \

  84   //end
  85 
  86 #define BASIC_JAVA_CLASSES_DO(f) \
  87         BASIC_JAVA_CLASSES_DO_PART1(f) \
  88         BASIC_JAVA_CLASSES_DO_PART2(f)
  89 
  90 // Interface to java.lang.String objects
  91 
  92 class java_lang_String : AllStatic {
  93  private:
  94   static int value_offset;
  95   static int hash_offset;
  96   static int coder_offset;
  97 
  98   static bool initialized;
  99 
 100   static Handle basic_create(int length, bool byte_arr, TRAPS);
 101 
 102   static inline void set_coder(oop string, jbyte coder);
 103 


1464 };
1465 
1466 
1467 class java_nio_Buffer: AllStatic {
1468  private:
1469   static int _limit_offset;
1470 
1471  public:
1472   static int  limit_offset();
1473   static void compute_offsets();
1474   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1475 };
1476 
1477 class java_util_concurrent_locks_AbstractOwnableSynchronizer : AllStatic {
1478  private:
1479   static int  _owner_offset;
1480  public:
1481   static void compute_offsets();
1482   static oop  get_owner_threadObj(oop obj);
1483   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;









1484 };
1485 
1486 // Use to declare fields that need to be injected into Java classes
1487 // for the JVM to use.  The name_index and signature_index are
1488 // declared in vmSymbols.  The may_be_java flag is used to declare
1489 // fields that might already exist in Java but should be injected if
1490 // they don't.  Otherwise the field is unconditionally injected and
1491 // the JVM uses the injected one.  This is to ensure that name
1492 // collisions don't occur.  In general may_be_java should be false
1493 // unless there's a good reason.
1494 
1495 class InjectedField {
1496  public:
1497   const SystemDictionary::WKID klass_id;
1498   const vmSymbols::SID name_index;
1499   const vmSymbols::SID signature_index;
1500   const bool           may_be_java;
1501 
1502 
1503   Klass* klass() const    { return SystemDictionary::well_known_klass(klass_id); }




  64   f(java_lang_invoke_MemberName) \
  65   f(java_lang_invoke_ResolvedMethodName) \
  66   f(java_lang_invoke_LambdaForm) \
  67   f(java_lang_invoke_MethodType) \
  68   f(java_lang_invoke_CallSite) \
  69   f(java_lang_invoke_MethodHandleNatives_CallSiteContext) \
  70   f(java_security_AccessControlContext) \
  71   f(java_lang_reflect_AccessibleObject) \
  72   f(java_lang_reflect_Method) \
  73   f(java_lang_reflect_Constructor) \
  74   f(java_lang_reflect_Field) \
  75   f(java_nio_Buffer) \
  76   f(reflect_ConstantPool) \
  77   f(reflect_UnsafeStaticFieldAccessorImpl) \
  78   f(java_lang_reflect_Parameter) \
  79   f(java_lang_Module) \
  80   f(java_lang_StackTraceElement) \
  81   f(java_lang_StackFrameInfo) \
  82   f(java_lang_LiveStackFrameInfo) \
  83   f(java_util_concurrent_locks_AbstractOwnableSynchronizer) \
  84   f(jdk_internal_misc_UnsafeConstants) \
  85   //end
  86 
  87 #define BASIC_JAVA_CLASSES_DO(f) \
  88         BASIC_JAVA_CLASSES_DO_PART1(f) \
  89         BASIC_JAVA_CLASSES_DO_PART2(f)
  90 
  91 // Interface to java.lang.String objects
  92 
  93 class java_lang_String : AllStatic {
  94  private:
  95   static int value_offset;
  96   static int hash_offset;
  97   static int coder_offset;
  98 
  99   static bool initialized;
 100 
 101   static Handle basic_create(int length, bool byte_arr, TRAPS);
 102 
 103   static inline void set_coder(oop string, jbyte coder);
 104 


1465 };
1466 
1467 
1468 class java_nio_Buffer: AllStatic {
1469  private:
1470   static int _limit_offset;
1471 
1472  public:
1473   static int  limit_offset();
1474   static void compute_offsets();
1475   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1476 };
1477 
1478 class java_util_concurrent_locks_AbstractOwnableSynchronizer : AllStatic {
1479  private:
1480   static int  _owner_offset;
1481  public:
1482   static void compute_offsets();
1483   static oop  get_owner_threadObj(oop obj);
1484   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1485 };
1486 
1487  // Interface to jdk.internal.misc.UnsafeConsants
1488 
1489 class jdk_internal_misc_UnsafeConstants : AllStatic {
1490  public:
1491   static void set_unsafe_constants();
1492   static void compute_offsets() { }
1493   static void serialize_offsets(SerializeClosure* f) { }
1494 };
1495 
1496 // Use to declare fields that need to be injected into Java classes
1497 // for the JVM to use.  The name_index and signature_index are
1498 // declared in vmSymbols.  The may_be_java flag is used to declare
1499 // fields that might already exist in Java but should be injected if
1500 // they don't.  Otherwise the field is unconditionally injected and
1501 // the JVM uses the injected one.  This is to ensure that name
1502 // collisions don't occur.  In general may_be_java should be false
1503 // unless there's a good reason.
1504 
1505 class InjectedField {
1506  public:
1507   const SystemDictionary::WKID klass_id;
1508   const vmSymbols::SID name_index;
1509   const vmSymbols::SID signature_index;
1510   const bool           may_be_java;
1511 
1512 
1513   Klass* klass() const    { return SystemDictionary::well_known_klass(klass_id); }


< prev index next >