22 *
23 */
24
25 #ifndef SHARE_VM_OOPS_WEAKHANDLE_HPP
26 #define SHARE_VM_OOPS_WEAKHANDLE_HPP
27
28 #include "oops/oop.hpp"
29 #include "runtime/handles.hpp"
30
31 class outputStream;
32 class OopStorage;
33
34 // A WeakHandle is a pointer to an oop that is stored in an OopStorage that is
35 // processed weakly by GC. The runtime structures that point to the oop must
36 // either peek or resolve the oop, the latter will keep the oop alive for
37 // the GC cycle. The runtime structures that reference the oop must test
38 // if the value is NULL. If it is NULL, it has been cleaned out by GC.
39 // This is the vm version of jweak but has different GC lifetimes and policies,
40 // depending on the type.
41
42 enum WeakHandleType { vm_class_loader_data, vm_string };
43
44 template <WeakHandleType T>
45 class WeakHandle {
46 public:
47
48 private:
49 oop* _obj;
50
51 WeakHandle(oop* w) : _obj(w) {}
52 static OopStorage* get_storage();
53 public:
54 WeakHandle() : _obj(NULL) {} // needed for init
55
56 static WeakHandle create(Handle obj);
57 inline oop resolve() const;
58 inline oop peek() const;
59 void release() const;
60 bool is_null() const { return _obj == NULL; }
61
62 void print() const;
63 void print_on(outputStream* st) const;
64 };
65
66 typedef WeakHandle<vm_class_loader_data> ClassLoaderWeakHandle;
67
68 #endif // SHARE_VM_OOPS_WEAKHANDLE_HPP
|
22 *
23 */
24
25 #ifndef SHARE_VM_OOPS_WEAKHANDLE_HPP
26 #define SHARE_VM_OOPS_WEAKHANDLE_HPP
27
28 #include "oops/oop.hpp"
29 #include "runtime/handles.hpp"
30
31 class outputStream;
32 class OopStorage;
33
34 // A WeakHandle is a pointer to an oop that is stored in an OopStorage that is
35 // processed weakly by GC. The runtime structures that point to the oop must
36 // either peek or resolve the oop, the latter will keep the oop alive for
37 // the GC cycle. The runtime structures that reference the oop must test
38 // if the value is NULL. If it is NULL, it has been cleaned out by GC.
39 // This is the vm version of jweak but has different GC lifetimes and policies,
40 // depending on the type.
41
42 enum WeakHandleType { vm_class_loader_data, vm_string, vm_string_table_data };
43
44 template <WeakHandleType T>
45 class WeakHandle {
46 public:
47 private:
48 oop* _obj;
49
50 WeakHandle(oop* w) : _obj(w) {}
51 static OopStorage* get_storage();
52 public:
53 WeakHandle() : _obj(NULL) {} // needed for init
54
55 static WeakHandle create(Handle obj);
56 inline oop resolve() const;
57 inline oop peek() const;
58 void release() const;
59 bool is_null() const { return _obj == NULL; }
60
61 void replace(oop with_obj);
62
63 void print() const;
64 void print_on(outputStream* st) const;
65 };
66
67 typedef WeakHandle<vm_class_loader_data> ClassLoaderWeakHandle;
68
69 #endif // SHARE_VM_OOPS_WEAKHANDLE_HPP
|