hotspot/src/share/vm/classfile/loaderConstraints.hpp
changeset 46729 c62d2e8b2728
parent 46380 4a51438196cf
child 46742 24ec8a039c90
equal deleted inserted replaced
46728:a1bee305515d 46729:c62d2e8b2728
    23  */
    23  */
    24 
    24 
    25 #ifndef SHARE_VM_CLASSFILE_LOADERCONSTRAINTS_HPP
    25 #ifndef SHARE_VM_CLASSFILE_LOADERCONSTRAINTS_HPP
    26 #define SHARE_VM_CLASSFILE_LOADERCONSTRAINTS_HPP
    26 #define SHARE_VM_CLASSFILE_LOADERCONSTRAINTS_HPP
    27 
    27 
    28 #include "classfile/dictionary.hpp"
       
    29 #include "classfile/placeholders.hpp"
    28 #include "classfile/placeholders.hpp"
    30 #include "utilities/hashtable.hpp"
    29 #include "utilities/hashtable.hpp"
    31 
    30 
       
    31 class ClassLoaderData;
    32 class LoaderConstraintEntry;
    32 class LoaderConstraintEntry;
    33 class Symbol;
    33 class Symbol;
    34 
    34 
    35 class LoaderConstraintTable : public Hashtable<InstanceKlass*, mtClass> {
    35 class LoaderConstraintTable : public Hashtable<InstanceKlass*, mtClass> {
    36   friend class VMStructs;
    36 
    37 private:
    37 private:
    38 
       
    39   enum Constants {
       
    40     _loader_constraint_size = 107,                     // number of entries in constraint table
       
    41     _nof_buckets            = 1009                     // number of buckets in hash table
       
    42   };
       
    43 
       
    44   LoaderConstraintEntry** find_loader_constraint(Symbol* name,
    38   LoaderConstraintEntry** find_loader_constraint(Symbol* name,
    45                                                  Handle loader);
    39                                                  Handle loader);
    46 
    40 
    47 public:
    41 public:
    48 
    42 
    49   LoaderConstraintTable(int nof_buckets);
    43   LoaderConstraintTable(int table_size);
    50 
    44 
    51   LoaderConstraintEntry* new_entry(unsigned int hash, Symbol* name,
    45   LoaderConstraintEntry* new_entry(unsigned int hash, Symbol* name,
    52                                    InstanceKlass* klass, int num_loaders,
    46                                    InstanceKlass* klass, int num_loaders,
    53                                    int max_loaders);
    47                                    int max_loaders);
    54   void free_entry(LoaderConstraintEntry *entry);
    48   void free_entry(LoaderConstraintEntry *entry);
    82 
    76 
    83   bool check_or_update(InstanceKlass* k, Handle loader, Symbol* name);
    77   bool check_or_update(InstanceKlass* k, Handle loader, Symbol* name);
    84 
    78 
    85   void purge_loader_constraints();
    79   void purge_loader_constraints();
    86 
    80 
    87   void verify(Dictionary* dictionary, PlaceholderTable* placeholders);
    81   void verify(PlaceholderTable* placeholders);
    88 #ifndef PRODUCT
    82 #ifndef PRODUCT
    89   void print();
    83   void print();
    90 #endif
    84 #endif
    91 };
    85 };
    92 
    86 
    93 class LoaderConstraintEntry : public HashtableEntry<InstanceKlass*, mtClass> {
    87 class LoaderConstraintEntry : public HashtableEntry<InstanceKlass*, mtClass> {
    94   friend class VMStructs;
       
    95 private:
    88 private:
    96   Symbol*                _name;                   // class name
    89   Symbol*                _name;                   // class name
    97   int                    _num_loaders;
    90   int                    _num_loaders;
    98   int                    _max_loaders;
    91   int                    _max_loaders;
    99   // Loader constraints enforce correct linking behavior.
    92   // Loader constraints enforce correct linking behavior.