< prev index next >

src/share/vm/prims/jvm.cpp

Print this page




 663   // Clear the header
 664   new_obj_oop->init_mark();
 665 
 666   // Store check (mark entire object and let gc sort it out)
 667   BarrierSet* bs = Universe::heap()->barrier_set();
 668   assert(bs->has_write_region_opt(), "Barrier set does not have write_region");
 669   bs->write_region(MemRegion((HeapWord*)new_obj_oop, size));
 670 
 671   Handle new_obj(THREAD, new_obj_oop);
 672   // Special handling for MemberNames.  Since they contain Method* metadata, they
 673   // must be registered so that RedefineClasses can fix metadata contained in them.
 674   if (java_lang_invoke_MemberName::is_instance(new_obj()) &&
 675       java_lang_invoke_MemberName::is_method(new_obj())) {
 676     Method* method = (Method*)java_lang_invoke_MemberName::vmtarget(new_obj());
 677     // MemberName may be unresolved, so doesn't need registration until resolved.
 678     if (method != NULL) {
 679       methodHandle m(THREAD, method);
 680       // This can safepoint and redefine method, so need both new_obj and method
 681       // in a handle, for two different reasons.  new_obj can move, method can be
 682       // deleted if nothing is using it on the stack.
 683       m->method_holder()->add_member_name(new_obj(), false);
 684     }
 685   }
 686 
 687   // Caution: this involves a java upcall, so the clone should be
 688   // "gc-robust" by this stage.
 689   if (klass->has_finalizer()) {
 690     assert(obj->is_instance(), "should be instanceOop");
 691     new_obj_oop = InstanceKlass::register_finalizer(instanceOop(new_obj()), CHECK_NULL);
 692     new_obj = Handle(THREAD, new_obj_oop);
 693   }
 694 
 695   return JNIHandles::make_local(env, new_obj());
 696 JVM_END
 697 
 698 // java.io.File ///////////////////////////////////////////////////////////////
 699 
 700 JVM_LEAF(char*, JVM_NativePath(char* path))
 701   JVMWrapper("JVM_NativePath");
 702   return os::native_path(path);
 703 JVM_END




 663   // Clear the header
 664   new_obj_oop->init_mark();
 665 
 666   // Store check (mark entire object and let gc sort it out)
 667   BarrierSet* bs = Universe::heap()->barrier_set();
 668   assert(bs->has_write_region_opt(), "Barrier set does not have write_region");
 669   bs->write_region(MemRegion((HeapWord*)new_obj_oop, size));
 670 
 671   Handle new_obj(THREAD, new_obj_oop);
 672   // Special handling for MemberNames.  Since they contain Method* metadata, they
 673   // must be registered so that RedefineClasses can fix metadata contained in them.
 674   if (java_lang_invoke_MemberName::is_instance(new_obj()) &&
 675       java_lang_invoke_MemberName::is_method(new_obj())) {
 676     Method* method = (Method*)java_lang_invoke_MemberName::vmtarget(new_obj());
 677     // MemberName may be unresolved, so doesn't need registration until resolved.
 678     if (method != NULL) {
 679       methodHandle m(THREAD, method);
 680       // This can safepoint and redefine method, so need both new_obj and method
 681       // in a handle, for two different reasons.  new_obj can move, method can be
 682       // deleted if nothing is using it on the stack.
 683       m->method_holder()->add_member_name(new_obj());
 684     }
 685   }
 686 
 687   // Caution: this involves a java upcall, so the clone should be
 688   // "gc-robust" by this stage.
 689   if (klass->has_finalizer()) {
 690     assert(obj->is_instance(), "should be instanceOop");
 691     new_obj_oop = InstanceKlass::register_finalizer(instanceOop(new_obj()), CHECK_NULL);
 692     new_obj = Handle(THREAD, new_obj_oop);
 693   }
 694 
 695   return JNIHandles::make_local(env, new_obj());
 696 JVM_END
 697 
 698 // java.io.File ///////////////////////////////////////////////////////////////
 699 
 700 JVM_LEAF(char*, JVM_NativePath(char* path))
 701   JVMWrapper("JVM_NativePath");
 702   return os::native_path(path);
 703 JVM_END


< prev index next >