1895 ArchivedObjectCache* cache = MetaspaceShared::archive_object_cache();
1896 oop* p = cache->get(obj);
1897 if (p != NULL) {
1898 return *p;
1899 } else {
1900 return NULL;
1901 }
1902 }
1903
1904 oop MetaspaceShared::archive_heap_object(oop obj, Thread* THREAD) {
1905 assert(DumpSharedSpaces, "dump-time only");
1906
1907 oop ao = find_archived_heap_object(obj);
1908 if (ao != NULL) {
1909 // already archived
1910 return ao;
1911 }
1912
1913 int len = obj->size();
1914 if (G1CollectedHeap::heap()->is_archive_alloc_too_large(len)) {
1915 return NULL;
1916 }
1917
1918 int hash = obj->identity_hash();
1919 oop archived_oop = (oop)G1CollectedHeap::heap()->archive_mem_allocate(len);
1920 if (archived_oop != NULL) {
1921 Copy::aligned_disjoint_words((HeapWord*)obj, (HeapWord*)archived_oop, len);
1922 relocate_klass_ptr(archived_oop);
1923 ArchivedObjectCache* cache = MetaspaceShared::archive_object_cache();
1924 cache->put(obj, archived_oop);
1925 }
1926 log_debug(cds, heap)("Archived heap object " PTR_FORMAT " ==> " PTR_FORMAT,
1927 p2i(obj), p2i(archived_oop));
1928 return archived_oop;
1929 }
1930
1931 oop MetaspaceShared::materialize_archived_object(oop obj) {
1932 if (obj != NULL) {
1933 return G1CollectedHeap::heap()->materialize_archived_object(obj);
1934 }
1935 return NULL;
1936 }
1937
1938 void MetaspaceShared::archive_klass_objects(Thread* THREAD) {
1939 int i;
1940 for (i = 0; i < _global_klass_objects->length(); i++) {
1941 Klass* k = _global_klass_objects->at(i);
1942
1943 // archive mirror object
1944 java_lang_Class::archive_mirror(k, CHECK);
1945
1946 // archive the resolved_referenes array
1947 if (k->is_instance_klass()) {
|
1895 ArchivedObjectCache* cache = MetaspaceShared::archive_object_cache();
1896 oop* p = cache->get(obj);
1897 if (p != NULL) {
1898 return *p;
1899 } else {
1900 return NULL;
1901 }
1902 }
1903
1904 oop MetaspaceShared::archive_heap_object(oop obj, Thread* THREAD) {
1905 assert(DumpSharedSpaces, "dump-time only");
1906
1907 oop ao = find_archived_heap_object(obj);
1908 if (ao != NULL) {
1909 // already archived
1910 return ao;
1911 }
1912
1913 int len = obj->size();
1914 if (G1CollectedHeap::heap()->is_archive_alloc_too_large(len)) {
1915 log_debug(cds, heap)("Cannot archive, object (" PTR_FORMAT ") is too large: " SIZE_FORMAT,
1916 p2i(obj), (size_t)obj->size());
1917 return NULL;
1918 }
1919
1920 int hash = obj->identity_hash();
1921 oop archived_oop = (oop)G1CollectedHeap::heap()->archive_mem_allocate(len);
1922 if (archived_oop != NULL) {
1923 Copy::aligned_disjoint_words((HeapWord*)obj, (HeapWord*)archived_oop, len);
1924 relocate_klass_ptr(archived_oop);
1925 ArchivedObjectCache* cache = MetaspaceShared::archive_object_cache();
1926 cache->put(obj, archived_oop);
1927 log_debug(cds, heap)("Archived heap object " PTR_FORMAT " ==> " PTR_FORMAT,
1928 p2i(obj), p2i(archived_oop));
1929 } else {
1930 log_error(cds, heap)(
1931 "Cannot allocate space for object " PTR_FORMAT " in archived heap region",
1932 p2i(obj));
1933 vm_exit(1);
1934 }
1935 return archived_oop;
1936 }
1937
1938 oop MetaspaceShared::materialize_archived_object(oop obj) {
1939 if (obj != NULL) {
1940 return G1CollectedHeap::heap()->materialize_archived_object(obj);
1941 }
1942 return NULL;
1943 }
1944
1945 void MetaspaceShared::archive_klass_objects(Thread* THREAD) {
1946 int i;
1947 for (i = 0; i < _global_klass_objects->length(); i++) {
1948 Klass* k = _global_klass_objects->at(i);
1949
1950 // archive mirror object
1951 java_lang_Class::archive_mirror(k, CHECK);
1952
1953 // archive the resolved_referenes array
1954 if (k->is_instance_klass()) {
|