< prev index next >

src/hotspot/share/prims/whitebox.cpp

Print this page




 614   THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_PSVirtualSpaceAlignment: Parallel GC is not enabled");
 615 WB_END
 616 
 617 WB_ENTRY(jlong, WB_PSHeapGenerationAlignment(JNIEnv* env, jobject o))
 618   if (UseParallelGC) {
 619     return GenAlignment;
 620   }
 621   THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_PSHeapGenerationAlignment: Parallel GC is not enabled");
 622 WB_END
 623 
 624 #endif // INCLUDE_PARALLELGC
 625 
 626 #if INCLUDE_G1GC
 627 
 628 WB_ENTRY(jobject, WB_G1AuxiliaryMemoryUsage(JNIEnv* env))
 629   if (UseG1GC) {
 630     ResourceMark rm(THREAD);
 631     G1CollectedHeap* g1h = G1CollectedHeap::heap();
 632     MemoryUsage usage = g1h->get_auxiliary_data_memory_usage();
 633     Handle h = MemoryService::create_MemoryUsage_obj(usage, CHECK_NULL);
 634     return JNIHandles::make_local(env, h());
 635   }
 636   THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1AuxiliaryMemoryUsage: G1 GC is not enabled");
 637 WB_END
 638 
 639 WB_ENTRY(jint, WB_G1ActiveMemoryNodeCount(JNIEnv* env, jobject o))
 640   if (UseG1GC) {
 641     G1NUMA* numa = G1NUMA::numa();
 642     return (jint)numa->num_active_nodes();
 643   }
 644   THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1ActiveMemoryNodeCount: G1 GC is not enabled");
 645 WB_END
 646 
 647 WB_ENTRY(jintArray, WB_G1MemoryNodeIds(JNIEnv* env, jobject o))
 648   if (UseG1GC) {
 649     G1NUMA* numa = G1NUMA::numa();
 650     int num_node_ids = (int)numa->num_active_nodes();
 651     const int* node_ids = numa->node_ids();
 652 
 653     typeArrayOop result = oopFactory::new_intArray(num_node_ids, CHECK_NULL);
 654     for (int i = 0; i < num_node_ids; i++) {
 655       result->int_at_put(i, (jint)node_ids[i]);
 656     }
 657     return (jintArray) JNIHandles::make_local(env, result);
 658   }
 659   THROW_MSG_NULL(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1MemoryNodeIds: G1 GC is not enabled");
 660 WB_END
 661 
 662 class OldRegionsLivenessClosure: public HeapRegionClosure {
 663 
 664  private:
 665   const int _liveness;
 666   size_t _total_count;
 667   size_t _total_memory;
 668   size_t _total_memory_to_free;
 669 
 670  public:
 671   OldRegionsLivenessClosure(int liveness) :
 672     _liveness(liveness),
 673     _total_count(0),
 674     _total_memory(0),
 675     _total_memory_to_free(0) { }
 676 
 677     size_t total_count() { return _total_count; }


 698   }
 699 };
 700 
 701 
 702 WB_ENTRY(jlongArray, WB_G1GetMixedGCInfo(JNIEnv* env, jobject o, jint liveness))
 703   if (!UseG1GC) {
 704     THROW_MSG_NULL(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1GetMixedGCInfo: G1 GC is not enabled");
 705   }
 706   if (liveness < 0) {
 707     THROW_MSG_NULL(vmSymbols::java_lang_IllegalArgumentException(), "liveness value should be non-negative");
 708   }
 709 
 710   G1CollectedHeap* g1h = G1CollectedHeap::heap();
 711   OldRegionsLivenessClosure rli(liveness);
 712   g1h->heap_region_iterate(&rli);
 713 
 714   typeArrayOop result = oopFactory::new_longArray(3, CHECK_NULL);
 715   result->long_at_put(0, rli.total_count());
 716   result->long_at_put(1, rli.total_memory());
 717   result->long_at_put(2, rli.total_memory_to_free());
 718   return (jlongArray) JNIHandles::make_local(env, result);
 719 WB_END
 720 
 721 #endif // INCLUDE_G1GC
 722 
 723 #if INCLUDE_NMT
 724 // Alloc memory using the test memory type so that we can use that to see if
 725 // NMT picks it up correctly
 726 WB_ENTRY(jlong, WB_NMTMalloc(JNIEnv* env, jobject o, jlong size))
 727   jlong addr = 0;
 728   addr = (jlong)(uintptr_t)os::malloc(size, mtTest);
 729   return addr;
 730 WB_END
 731 
 732 // Alloc memory with pseudo call stack. The test can create psudo malloc
 733 // allocation site to stress the malloc tracking.
 734 WB_ENTRY(jlong, WB_NMTMallocWithPseudoStack(JNIEnv* env, jobject o, jlong size, jint pseudo_stack))
 735   address pc = (address)(size_t)pseudo_stack;
 736   NativeCallStack stack(&pc, 1);
 737   return (jlong)(uintptr_t)os::malloc(size, mtTest, stack);
 738 WB_END


1661 WB_END
1662 
1663 WB_ENTRY(jobjectArray, WB_GetCodeBlob(JNIEnv* env, jobject o, jlong addr))
1664   if (addr == 0) {
1665     THROW_MSG_NULL(vmSymbols::java_lang_NullPointerException(),
1666       "WB_GetCodeBlob: addr is null");
1667   }
1668   ThreadToNativeFromVM ttn(thread);
1669   CodeBlobStub stub((CodeBlob*) addr);
1670   return codeBlob2objectArray(thread, env, &stub);
1671 WB_END
1672 
1673 WB_ENTRY(jlong, WB_GetMethodData(JNIEnv* env, jobject wv, jobject method))
1674   jmethodID jmid = reflected_method_to_jmid(thread, env, method);
1675   CHECK_JNI_EXCEPTION_(env, 0);
1676   methodHandle mh(thread, Method::checked_resolve_jmethod_id(jmid));
1677   return (jlong) mh->method_data();
1678 WB_END
1679 
1680 WB_ENTRY(jlong, WB_GetThreadStackSize(JNIEnv* env, jobject o))
1681   return (jlong) Thread::current()->stack_size();
1682 WB_END
1683 
1684 WB_ENTRY(jlong, WB_GetThreadRemainingStackSize(JNIEnv* env, jobject o))
1685   JavaThread* t = JavaThread::current();
1686   return (jlong) t->stack_available(os::current_stack_pointer()) - (jlong)JavaThread::stack_shadow_zone_size();
1687 WB_END
1688 
1689 
1690 int WhiteBox::array_bytes_to_length(size_t bytes) {
1691   return Array<u1>::bytes_to_length(bytes);
1692 }
1693 
1694 WB_ENTRY(jlong, WB_AllocateMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong size))
1695   if (size < 0) {
1696     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
1697         err_msg("WB_AllocateMetaspace: size is negative: " JLONG_FORMAT, size));
1698   }
1699 
1700   oop class_loader_oop = JNIHandles::resolve(class_loader);
1701   ClassLoaderData* cld = class_loader_oop != NULL
1702       ? java_lang_ClassLoader::loader_data_acquire(class_loader_oop)
1703       : ClassLoaderData::the_null_class_loader_data();
1704 
1705   void* metadata = MetadataFactory::new_array<u1>(cld, WhiteBox::array_bytes_to_length((size_t)size), thread);
1706 


1773                                            Mutex::_safepoint_check_always :
1774                                            Mutex::_safepoint_check_never;
1775   Mutex::SafepointCheckFlag sfpt_check_attempted = attemptedNoSafepointValue ?
1776                                            Mutex::_no_safepoint_check_flag :
1777                                            Mutex::_safepoint_check_flag;
1778   MutexLocker ml(new Mutex(Mutex::leaf, "SFPT_Test_lock", true, sfpt_check_required),
1779                  sfpt_check_attempted);
1780 WB_END
1781 
1782 WB_ENTRY(void, WB_AssertSpecialLock(JNIEnv* env, jobject o, jboolean allowVMBlock, jboolean safepointCheck))
1783   // Create a special lock violating condition in value
1784   Mutex::SafepointCheckRequired sfpt_check_required = safepointCheck ?
1785                                            Mutex::_safepoint_check_always :
1786                                            Mutex::_safepoint_check_never;
1787   Mutex::SafepointCheckFlag safepoint_check = safepointCheck ?
1788                                            Monitor::_safepoint_check_flag :
1789                                            Monitor::_no_safepoint_check_flag;
1790 
1791   MutexLocker ml(new Mutex(Mutex::special, "SpecialTest_lock", allowVMBlock, sfpt_check_required), safepoint_check);
1792   // If the lock above succeeds, try to safepoint to test the NSV implied with this special lock.
1793   ThreadBlockInVM tbivm(JavaThread::current());
1794 WB_END
1795 
1796 WB_ENTRY(jboolean, WB_IsMonitorInflated(JNIEnv* env, jobject wb, jobject obj))
1797   oop obj_oop = JNIHandles::resolve(obj);
1798   return (jboolean) obj_oop->mark().has_monitor();
1799 WB_END
1800 
1801 WB_ENTRY(jboolean, WB_DeflateIdleMonitors(JNIEnv* env, jobject wb))
1802   log_info(monitorinflation)("WhiteBox initiated DeflateIdleMonitors");
1803   return ObjectSynchronizer::request_deflate_idle_monitors();
1804 WB_END
1805 
1806 WB_ENTRY(void, WB_ForceSafepoint(JNIEnv* env, jobject wb))
1807   VM_ForceSafepoint force_safepoint_op;
1808   VMThread::execute(&force_safepoint_op);
1809 WB_END
1810 
1811 WB_ENTRY(jlong, WB_GetConstantPool(JNIEnv* env, jobject wb, jclass klass))
1812   InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
1813   return (jlong) ik->constants();


1940 
1941 WB_ENTRY(jboolean, WB_IsShared(JNIEnv* env, jobject wb, jobject obj))
1942   oop obj_oop = JNIHandles::resolve(obj);
1943   return HeapShared::is_archived_object(obj_oop);
1944 WB_END
1945 
1946 WB_ENTRY(jboolean, WB_IsSharedClass(JNIEnv* env, jobject wb, jclass clazz))
1947   return (jboolean)MetaspaceShared::is_in_shared_metaspace(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz)));
1948 WB_END
1949 
1950 WB_ENTRY(jboolean, WB_AreSharedStringsIgnored(JNIEnv* env))
1951   return !HeapShared::closed_archive_heap_region_mapped();
1952 WB_END
1953 
1954 WB_ENTRY(jobject, WB_GetResolvedReferences(JNIEnv* env, jobject wb, jclass clazz))
1955   Klass *k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz));
1956   if (k->is_instance_klass()) {
1957     InstanceKlass *ik = InstanceKlass::cast(k);
1958     ConstantPool *cp = ik->constants();
1959     objArrayOop refs =  cp->resolved_references();
1960     return (jobject)JNIHandles::make_local(env, refs);
1961   } else {
1962     return NULL;
1963   }
1964 WB_END
1965 
1966 WB_ENTRY(void, WB_LinkClass(JNIEnv* env, jobject wb, jclass clazz))
1967   Klass *k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz));
1968   if (!k->is_instance_klass()) {
1969     return;
1970   }
1971   InstanceKlass *ik = InstanceKlass::cast(k);
1972   ik->link_class(THREAD); // may throw verification error
1973 WB_END
1974 
1975 WB_ENTRY(jboolean, WB_AreOpenArchiveHeapObjectsMapped(JNIEnv* env))
1976   return HeapShared::open_archive_heap_region_mapped();
1977 WB_END
1978 
1979 WB_ENTRY(jboolean, WB_IsCDSIncludedInVmBuild(JNIEnv* env))
1980 #if INCLUDE_CDS




 614   THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_PSVirtualSpaceAlignment: Parallel GC is not enabled");
 615 WB_END
 616 
 617 WB_ENTRY(jlong, WB_PSHeapGenerationAlignment(JNIEnv* env, jobject o))
 618   if (UseParallelGC) {
 619     return GenAlignment;
 620   }
 621   THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_PSHeapGenerationAlignment: Parallel GC is not enabled");
 622 WB_END
 623 
 624 #endif // INCLUDE_PARALLELGC
 625 
 626 #if INCLUDE_G1GC
 627 
 628 WB_ENTRY(jobject, WB_G1AuxiliaryMemoryUsage(JNIEnv* env))
 629   if (UseG1GC) {
 630     ResourceMark rm(THREAD);
 631     G1CollectedHeap* g1h = G1CollectedHeap::heap();
 632     MemoryUsage usage = g1h->get_auxiliary_data_memory_usage();
 633     Handle h = MemoryService::create_MemoryUsage_obj(usage, CHECK_NULL);
 634     return JNIHandles::make_local(THREAD, h());
 635   }
 636   THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1AuxiliaryMemoryUsage: G1 GC is not enabled");
 637 WB_END
 638 
 639 WB_ENTRY(jint, WB_G1ActiveMemoryNodeCount(JNIEnv* env, jobject o))
 640   if (UseG1GC) {
 641     G1NUMA* numa = G1NUMA::numa();
 642     return (jint)numa->num_active_nodes();
 643   }
 644   THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1ActiveMemoryNodeCount: G1 GC is not enabled");
 645 WB_END
 646 
 647 WB_ENTRY(jintArray, WB_G1MemoryNodeIds(JNIEnv* env, jobject o))
 648   if (UseG1GC) {
 649     G1NUMA* numa = G1NUMA::numa();
 650     int num_node_ids = (int)numa->num_active_nodes();
 651     const int* node_ids = numa->node_ids();
 652 
 653     typeArrayOop result = oopFactory::new_intArray(num_node_ids, CHECK_NULL);
 654     for (int i = 0; i < num_node_ids; i++) {
 655       result->int_at_put(i, (jint)node_ids[i]);
 656     }
 657     return (jintArray) JNIHandles::make_local(THREAD, result);
 658   }
 659   THROW_MSG_NULL(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1MemoryNodeIds: G1 GC is not enabled");
 660 WB_END
 661 
 662 class OldRegionsLivenessClosure: public HeapRegionClosure {
 663 
 664  private:
 665   const int _liveness;
 666   size_t _total_count;
 667   size_t _total_memory;
 668   size_t _total_memory_to_free;
 669 
 670  public:
 671   OldRegionsLivenessClosure(int liveness) :
 672     _liveness(liveness),
 673     _total_count(0),
 674     _total_memory(0),
 675     _total_memory_to_free(0) { }
 676 
 677     size_t total_count() { return _total_count; }


 698   }
 699 };
 700 
 701 
 702 WB_ENTRY(jlongArray, WB_G1GetMixedGCInfo(JNIEnv* env, jobject o, jint liveness))
 703   if (!UseG1GC) {
 704     THROW_MSG_NULL(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1GetMixedGCInfo: G1 GC is not enabled");
 705   }
 706   if (liveness < 0) {
 707     THROW_MSG_NULL(vmSymbols::java_lang_IllegalArgumentException(), "liveness value should be non-negative");
 708   }
 709 
 710   G1CollectedHeap* g1h = G1CollectedHeap::heap();
 711   OldRegionsLivenessClosure rli(liveness);
 712   g1h->heap_region_iterate(&rli);
 713 
 714   typeArrayOop result = oopFactory::new_longArray(3, CHECK_NULL);
 715   result->long_at_put(0, rli.total_count());
 716   result->long_at_put(1, rli.total_memory());
 717   result->long_at_put(2, rli.total_memory_to_free());
 718   return (jlongArray) JNIHandles::make_local(THREAD, result);
 719 WB_END
 720 
 721 #endif // INCLUDE_G1GC
 722 
 723 #if INCLUDE_NMT
 724 // Alloc memory using the test memory type so that we can use that to see if
 725 // NMT picks it up correctly
 726 WB_ENTRY(jlong, WB_NMTMalloc(JNIEnv* env, jobject o, jlong size))
 727   jlong addr = 0;
 728   addr = (jlong)(uintptr_t)os::malloc(size, mtTest);
 729   return addr;
 730 WB_END
 731 
 732 // Alloc memory with pseudo call stack. The test can create psudo malloc
 733 // allocation site to stress the malloc tracking.
 734 WB_ENTRY(jlong, WB_NMTMallocWithPseudoStack(JNIEnv* env, jobject o, jlong size, jint pseudo_stack))
 735   address pc = (address)(size_t)pseudo_stack;
 736   NativeCallStack stack(&pc, 1);
 737   return (jlong)(uintptr_t)os::malloc(size, mtTest, stack);
 738 WB_END


1661 WB_END
1662 
1663 WB_ENTRY(jobjectArray, WB_GetCodeBlob(JNIEnv* env, jobject o, jlong addr))
1664   if (addr == 0) {
1665     THROW_MSG_NULL(vmSymbols::java_lang_NullPointerException(),
1666       "WB_GetCodeBlob: addr is null");
1667   }
1668   ThreadToNativeFromVM ttn(thread);
1669   CodeBlobStub stub((CodeBlob*) addr);
1670   return codeBlob2objectArray(thread, env, &stub);
1671 WB_END
1672 
1673 WB_ENTRY(jlong, WB_GetMethodData(JNIEnv* env, jobject wv, jobject method))
1674   jmethodID jmid = reflected_method_to_jmid(thread, env, method);
1675   CHECK_JNI_EXCEPTION_(env, 0);
1676   methodHandle mh(thread, Method::checked_resolve_jmethod_id(jmid));
1677   return (jlong) mh->method_data();
1678 WB_END
1679 
1680 WB_ENTRY(jlong, WB_GetThreadStackSize(JNIEnv* env, jobject o))
1681   return (jlong) thread->stack_size();
1682 WB_END
1683 
1684 WB_ENTRY(jlong, WB_GetThreadRemainingStackSize(JNIEnv* env, jobject o))
1685   return (jlong) thread->stack_available(os::current_stack_pointer()) - (jlong)JavaThread::stack_shadow_zone_size();

1686 WB_END
1687 
1688 
1689 int WhiteBox::array_bytes_to_length(size_t bytes) {
1690   return Array<u1>::bytes_to_length(bytes);
1691 }
1692 
1693 WB_ENTRY(jlong, WB_AllocateMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong size))
1694   if (size < 0) {
1695     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
1696         err_msg("WB_AllocateMetaspace: size is negative: " JLONG_FORMAT, size));
1697   }
1698 
1699   oop class_loader_oop = JNIHandles::resolve(class_loader);
1700   ClassLoaderData* cld = class_loader_oop != NULL
1701       ? java_lang_ClassLoader::loader_data_acquire(class_loader_oop)
1702       : ClassLoaderData::the_null_class_loader_data();
1703 
1704   void* metadata = MetadataFactory::new_array<u1>(cld, WhiteBox::array_bytes_to_length((size_t)size), thread);
1705 


1772                                            Mutex::_safepoint_check_always :
1773                                            Mutex::_safepoint_check_never;
1774   Mutex::SafepointCheckFlag sfpt_check_attempted = attemptedNoSafepointValue ?
1775                                            Mutex::_no_safepoint_check_flag :
1776                                            Mutex::_safepoint_check_flag;
1777   MutexLocker ml(new Mutex(Mutex::leaf, "SFPT_Test_lock", true, sfpt_check_required),
1778                  sfpt_check_attempted);
1779 WB_END
1780 
1781 WB_ENTRY(void, WB_AssertSpecialLock(JNIEnv* env, jobject o, jboolean allowVMBlock, jboolean safepointCheck))
1782   // Create a special lock violating condition in value
1783   Mutex::SafepointCheckRequired sfpt_check_required = safepointCheck ?
1784                                            Mutex::_safepoint_check_always :
1785                                            Mutex::_safepoint_check_never;
1786   Mutex::SafepointCheckFlag safepoint_check = safepointCheck ?
1787                                            Monitor::_safepoint_check_flag :
1788                                            Monitor::_no_safepoint_check_flag;
1789 
1790   MutexLocker ml(new Mutex(Mutex::special, "SpecialTest_lock", allowVMBlock, sfpt_check_required), safepoint_check);
1791   // If the lock above succeeds, try to safepoint to test the NSV implied with this special lock.
1792   ThreadBlockInVM tbivm(thread);
1793 WB_END
1794 
1795 WB_ENTRY(jboolean, WB_IsMonitorInflated(JNIEnv* env, jobject wb, jobject obj))
1796   oop obj_oop = JNIHandles::resolve(obj);
1797   return (jboolean) obj_oop->mark().has_monitor();
1798 WB_END
1799 
1800 WB_ENTRY(jboolean, WB_DeflateIdleMonitors(JNIEnv* env, jobject wb))
1801   log_info(monitorinflation)("WhiteBox initiated DeflateIdleMonitors");
1802   return ObjectSynchronizer::request_deflate_idle_monitors();
1803 WB_END
1804 
1805 WB_ENTRY(void, WB_ForceSafepoint(JNIEnv* env, jobject wb))
1806   VM_ForceSafepoint force_safepoint_op;
1807   VMThread::execute(&force_safepoint_op);
1808 WB_END
1809 
1810 WB_ENTRY(jlong, WB_GetConstantPool(JNIEnv* env, jobject wb, jclass klass))
1811   InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
1812   return (jlong) ik->constants();


1939 
1940 WB_ENTRY(jboolean, WB_IsShared(JNIEnv* env, jobject wb, jobject obj))
1941   oop obj_oop = JNIHandles::resolve(obj);
1942   return HeapShared::is_archived_object(obj_oop);
1943 WB_END
1944 
1945 WB_ENTRY(jboolean, WB_IsSharedClass(JNIEnv* env, jobject wb, jclass clazz))
1946   return (jboolean)MetaspaceShared::is_in_shared_metaspace(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz)));
1947 WB_END
1948 
1949 WB_ENTRY(jboolean, WB_AreSharedStringsIgnored(JNIEnv* env))
1950   return !HeapShared::closed_archive_heap_region_mapped();
1951 WB_END
1952 
1953 WB_ENTRY(jobject, WB_GetResolvedReferences(JNIEnv* env, jobject wb, jclass clazz))
1954   Klass *k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz));
1955   if (k->is_instance_klass()) {
1956     InstanceKlass *ik = InstanceKlass::cast(k);
1957     ConstantPool *cp = ik->constants();
1958     objArrayOop refs =  cp->resolved_references();
1959     return (jobject)JNIHandles::make_local(THREAD, refs);
1960   } else {
1961     return NULL;
1962   }
1963 WB_END
1964 
1965 WB_ENTRY(void, WB_LinkClass(JNIEnv* env, jobject wb, jclass clazz))
1966   Klass *k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz));
1967   if (!k->is_instance_klass()) {
1968     return;
1969   }
1970   InstanceKlass *ik = InstanceKlass::cast(k);
1971   ik->link_class(THREAD); // may throw verification error
1972 WB_END
1973 
1974 WB_ENTRY(jboolean, WB_AreOpenArchiveHeapObjectsMapped(JNIEnv* env))
1975   return HeapShared::open_archive_heap_region_mapped();
1976 WB_END
1977 
1978 WB_ENTRY(jboolean, WB_IsCDSIncludedInVmBuild(JNIEnv* env))
1979 #if INCLUDE_CDS


< prev index next >