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. |