!195 Merge master
From: @jvmboy Reviewed-by: @jiangfeilong1003 Signed-off-by: @jiangfeilong1003
This commit is contained in:
commit
d86e7655e5
74
delete_untrustworthy_cacert_soneraclass2ca.patch
Executable file
74
delete_untrustworthy_cacert_soneraclass2ca.patch
Executable file
@ -0,0 +1,74 @@
|
||||
diff --git a/jdk/make/data/cacerts/soneraclass2ca b/jdk/make/data/cacerts/soneraclass2ca
|
||||
deleted file mode 100644
|
||||
index 43faa5e2..00000000
|
||||
--- a/jdk/make/data/cacerts/soneraclass2ca
|
||||
+++ /dev/null
|
||||
@@ -1,26 +0,0 @@
|
||||
-Owner: CN=Sonera Class2 CA, O=Sonera, C=FI
|
||||
-Issuer: CN=Sonera Class2 CA, O=Sonera, C=FI
|
||||
-Serial number: 1d
|
||||
-Valid from: Fri Apr 06 07:29:40 GMT 2001 until: Tue Apr 06 07:29:40 GMT 2021
|
||||
-Signature algorithm name: SHA1withRSA
|
||||
-Subject Public Key Algorithm: 2048-bit RSA key
|
||||
-Version: 3
|
||||
------BEGIN CERTIFICATE-----
|
||||
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
|
||||
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
|
||||
-MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV
|
||||
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI
|
||||
-hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o
|
||||
-Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt
|
||||
-5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s
|
||||
-3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej
|
||||
-vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu
|
||||
-8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw
|
||||
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG
|
||||
-MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil
|
||||
-zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/
|
||||
-3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD
|
||||
-FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
|
||||
-Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2
|
||||
-ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
|
||||
------END CERTIFICATE-----
|
||||
diff --git a/jdk/test/sun/security/lib/cacerts/VerifyCACerts.java b/jdk/test/sun/security/lib/cacerts/VerifyCACerts.java
|
||||
index 9053b796..d1a7879d 100644
|
||||
--- a/jdk/test/sun/security/lib/cacerts/VerifyCACerts.java
|
||||
+++ b/jdk/test/sun/security/lib/cacerts/VerifyCACerts.java
|
||||
@@ -53,12 +53,12 @@ public class VerifyCACerts {
|
||||
+ File.separator + "security" + File.separator + "cacerts";
|
||||
|
||||
// The numbers of certs now.
|
||||
- private static final int COUNT = 90;
|
||||
+ private static final int COUNT = 89;
|
||||
|
||||
// SHA-256 of cacerts, can be generated with
|
||||
// shasum -a 256 cacerts | sed -e 's/../&:/g' | tr '[:lower:]' '[:upper:]' | cut -c1-95
|
||||
private static final String CHECKSUM
|
||||
- = "DC:22:7E:D7:F3:46:1F:8B:A8:4E:EE:C2:A8:4B:8E:26:89:4F:95:5C:71:A3:1B:5A:6E:A6:48:FD:CB:C9:F2:95";
|
||||
+ = "E6:F5:ED:92:CE:E2:35:5C:84:56:78:C7:72:29:29:A9:83:99:19:D9:54:F4:FF:7F:F7:D4:DB:2D:34:36:20:B5";
|
||||
|
||||
// map of cert alias to SHA-256 fingerprint
|
||||
@SuppressWarnings("serial")
|
||||
@@ -167,8 +167,6 @@ public class VerifyCACerts {
|
||||
"3B:22:2E:56:67:11:E9:92:30:0D:C0:B1:5A:B9:47:3D:AF:DE:F8:C8:4D:0C:EF:7D:33:17:B4:C1:82:1D:14:36");
|
||||
put("swisssignsilverg2ca [jdk]",
|
||||
"BE:6C:4D:A2:BB:B9:BA:59:B6:F3:93:97:68:37:42:46:C3:C0:05:99:3F:A9:8F:02:0D:1D:ED:BE:D4:8A:81:D5");
|
||||
- put("soneraclass2ca [jdk]",
|
||||
- "79:08:B4:03:14:C1:38:10:0B:51:8D:07:35:80:7F:FB:FC:F8:51:8A:00:95:33:71:05:BA:38:6B:15:3D:D9:27");
|
||||
put("securetrustca [jdk]",
|
||||
"F1:C1:B5:0A:E5:A2:0D:D8:03:0E:C9:F6:BC:24:82:3D:D3:67:B5:25:57:59:B4:E7:1B:61:FC:E9:F7:37:5D:73");
|
||||
put("xrampglobalca [jdk]",
|
||||
@@ -245,12 +243,7 @@ public class VerifyCACerts {
|
||||
// Exception list to 90 days expiry policy
|
||||
// No error will be reported if certificate in this list expires
|
||||
@SuppressWarnings("serial")
|
||||
- private static final HashSet<String> EXPIRY_EXC_ENTRIES = new HashSet<String>() {
|
||||
- {
|
||||
- // Valid until: Tue Apr 06 15:29:40 HKT 2021
|
||||
- add("soneraclass2ca [jdk]");
|
||||
- }
|
||||
- };
|
||||
+ private static final HashSet<String> EXPIRY_EXC_ENTRIES = new HashSet<String>();
|
||||
|
||||
// Ninety days in milliseconds
|
||||
private static final long NINETY_DAYS = 7776000000L;
|
||||
38
fix_G1GC_memory_leak_in_numa.patch
Executable file
38
fix_G1GC_memory_leak_in_numa.patch
Executable file
@ -0,0 +1,38 @@
|
||||
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1Allocator.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1Allocator.hpp
|
||||
index 9b26168a8..f6a80bf8d 100644
|
||||
--- a/hotspot/src/share/vm/gc_implementation/g1/g1Allocator.hpp
|
||||
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1Allocator.hpp
|
||||
@@ -45,6 +45,7 @@ protected:
|
||||
public:
|
||||
G1Allocator(G1CollectedHeap* heap) :
|
||||
_g1h(heap), _summary_bytes_used(0) { }
|
||||
+ virtual ~G1Allocator() { }
|
||||
|
||||
// Node index of current thread.
|
||||
virtual uint current_node_index() const = 0;
|
||||
@@ -126,7 +127,7 @@ protected:
|
||||
|
||||
public:
|
||||
G1DefaultAllocator(G1CollectedHeap* heap);
|
||||
- ~G1DefaultAllocator();
|
||||
+ virtual ~G1DefaultAllocator();
|
||||
|
||||
uint current_node_index() const;
|
||||
uint num_nodes() { return (uint)_num_alloc_regions; }
|
||||
@@ -253,6 +254,7 @@ protected:
|
||||
|
||||
public:
|
||||
G1ParGCAllocator(G1CollectedHeap* g1h);
|
||||
+ virtual ~G1ParGCAllocator() { }
|
||||
|
||||
static G1ParGCAllocator* create_allocator(G1CollectedHeap* g1h);
|
||||
|
||||
@@ -308,7 +310,7 @@ class G1DefaultParGCAllocator : public G1ParGCAllocator {
|
||||
|
||||
public:
|
||||
G1DefaultParGCAllocator(G1CollectedHeap* g1h);
|
||||
- ~G1DefaultParGCAllocator();
|
||||
+ virtual ~G1DefaultParGCAllocator();
|
||||
|
||||
virtual G1ParGCAllocBuffer* alloc_buffer(InCSetState dest, AllocationContext_t context, uint node_index) {
|
||||
assert(dest.is_valid(),
|
||||
3566
g1gc-numa-aware-Implementation.patch
Executable file
3566
g1gc-numa-aware-Implementation.patch
Executable file
File diff suppressed because it is too large
Load Diff
1638
implementation_of_Blas_hotspot_function_in_Intrinsics.patch
Executable file
1638
implementation_of_Blas_hotspot_function_in_Intrinsics.patch
Executable file
File diff suppressed because it is too large
Load Diff
@ -918,7 +918,7 @@ Provides: java-%{javaver}-%{origin}-accessibility%{?1} = %{epoch}:%{version}-%{r
|
||||
|
||||
Name: java-%{javaver}-%{origin}
|
||||
Version: %{javaver}.%{updatever}.%{buildver}
|
||||
Release: 9
|
||||
Release: 15
|
||||
# java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons
|
||||
# and this change was brought into RHEL-4. java-1.5.0-ibm packages
|
||||
# also included the epoch in their virtual provides. This created a
|
||||
@ -1105,6 +1105,11 @@ Patch191: 8264640.patch
|
||||
Patch192: add_kae_implementation_add_default_conf_file.patch
|
||||
Patch193: improve_algorithmConstraints_checkAlgorithm_performance.patch
|
||||
Patch194: modify_the_default_iteration_time_and_forks_in_the_JMH_of_KAEProvider.patch
|
||||
Patch195: support_CMS_parallel_inspection.patch
|
||||
Patch196: g1gc-numa-aware-Implementation.patch
|
||||
Patch197: implementation_of_Blas_hotspot_function_in_Intrinsics.patch
|
||||
Patch198: fix_G1GC_memory_leak_in_numa.patch
|
||||
Patch199: delete_untrustworthy_cacert_soneraclass2ca.patch
|
||||
|
||||
#############################################
|
||||
#
|
||||
@ -1558,7 +1563,11 @@ pushd %{top_level_dir_name}
|
||||
%patch191 -p1
|
||||
%patch192 -p1
|
||||
%patch194 -p1
|
||||
|
||||
%patch195 -p1
|
||||
%patch196 -p1
|
||||
%patch197 -p1
|
||||
%patch198 -p1
|
||||
%patch199 -p1
|
||||
popd
|
||||
|
||||
# System library fixes
|
||||
@ -1632,7 +1641,7 @@ export ARCH_DATA_MODEL=64
|
||||
|
||||
# We use ourcppflags because the OpenJDK build seems to
|
||||
# pass EXTRA_CFLAGS to the HotSpot C++ compiler...
|
||||
EXTRA_CFLAGS="%ourcppflags -Wno-error -fcommon"
|
||||
EXTRA_CFLAGS="%ourcppflags -Wno-error -fcommon -fsigned-char"
|
||||
EXTRA_CPP_FLAGS="%ourcppflags -Wno-error"
|
||||
|
||||
EXTRA_ASFLAGS="${EXTRA_CFLAGS} -Wa,--generate-missing-build-notes=yes"
|
||||
@ -2175,6 +2184,24 @@ require "copy_jdk_configs.lua"
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Mon Jun 28 2021 kuenking111 <wangkun49@huawei.com> - 1:1.8.0.292-b10.15
|
||||
- fix delete_untrustworthy_cacert_soneraclass2ca.patch
|
||||
|
||||
* Thu Jun 17 2021 kuenking111 <wangkun49@huawei.com> - 1:1.8.0.292-b10.14
|
||||
- fix systemDictionary resolve_from_stream ResourceMark
|
||||
|
||||
* Wed Jun 16 2021 kuenking111 <wangkun49@huawei.com> - 1:1.8.0.292-b10.13
|
||||
- add fix_G1GC_memory_leak_in_numa.patch
|
||||
|
||||
* Sat Jun 12 2021 kuenking111 <wangkun49@huawei.com> - 1:1.8.0.292-b10.12
|
||||
- add implementation_of_Blas_hotspot_function_in_Intrinsics.patch
|
||||
|
||||
* Sat Jun 12 2021 kuenking111 <wangkun49@huawei.com> - 1:1.8.0.292-b10.11
|
||||
- add g1gc-numa-aware-Implementation.patch
|
||||
|
||||
* Wed Jun 10 2021 hu_bo_dao <hubodao@huawei.com> - 1:1.8.0.292-b10.10
|
||||
- add support_CMS_parallel_inspection.patch
|
||||
|
||||
* Wed Jun 9 2021 noah <hedongbo@huawei.com> - 1:1.8.0.292-b10.9
|
||||
- add modify_the_default_iteration_time_and_forks_in_the_JMH_of_KAEProvider.patch
|
||||
|
||||
|
||||
298
support_CMS_parallel_inspection.patch
Executable file
298
support_CMS_parallel_inspection.patch
Executable file
@ -0,0 +1,298 @@
|
||||
commit 6128a6c319f9d10c604bf7d4049ef68b7fd11b27
|
||||
Author: hubodao <hubodao@huawei.com>
|
||||
Date: Tue Jun 8 07:37:02 2021 +0000
|
||||
|
||||
support CMS Parallel inspection
|
||||
|
||||
diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
|
||||
index 53b75a4ca..3c3deab28 100644
|
||||
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
|
||||
+++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
|
||||
@@ -2871,6 +2871,47 @@ void ConcurrentMarkSweepGeneration::gc_epilogue(bool full) {
|
||||
}
|
||||
}
|
||||
|
||||
+size_t ConcurrentMarkSweepGeneration::num_iterable_blocks() const
|
||||
+{
|
||||
+ return (used_stable() + CMSIterateBlockSize - 1) / CMSIterateBlockSize;
|
||||
+}
|
||||
+
|
||||
+void ConcurrentMarkSweepGeneration::object_iterate_block(ObjectClosure *cl, size_t block_index)
|
||||
+{
|
||||
+ size_t block_word_size = CMSIterateBlockSize / HeapWordSize;
|
||||
+ MemRegion span = MemRegion(cmsSpace()->bottom() + block_index * block_word_size,
|
||||
+ cmsSpace()->bottom() + (block_index + 1) * block_word_size);
|
||||
+ if (!span.is_empty()) { // Non-null task
|
||||
+ HeapWord *prev_obj;
|
||||
+ if (block_index == 0) {
|
||||
+ prev_obj = span.start();
|
||||
+ } else {
|
||||
+ prev_obj = cmsSpace()->block_start_careful(span.start());
|
||||
+ while (prev_obj < span.start()) {
|
||||
+ size_t sz = cmsSpace()->block_size_no_stall(prev_obj, _collector);
|
||||
+ if (sz > 0) {
|
||||
+ prev_obj += sz;
|
||||
+ } else {
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ if (prev_obj < span.end()) {
|
||||
+ HeapWord *cur, *limit;
|
||||
+ size_t curSize;
|
||||
+ for (cur = prev_obj, limit = span.end(); cur < limit; cur += curSize) {
|
||||
+ curSize = cmsSpace()->block_size_no_stall(cur, _collector);
|
||||
+ if (curSize == 0) {
|
||||
+ break;
|
||||
+ }
|
||||
+ if (cmsSpace()->block_is_obj(cur)) {
|
||||
+ cl->do_object(oop(cur));
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
void ConcurrentMarkSweepGeneration::gc_epilogue_work(bool full) {
|
||||
assert(!incremental_collection_failed(), "Should have been cleared");
|
||||
cmsSpace()->setPreconsumptionDirtyCardClosure(NULL);
|
||||
diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp
|
||||
index ca3fee21b..7d05410fe 100644
|
||||
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp
|
||||
+++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp
|
||||
@@ -1154,9 +1154,10 @@ class ConcurrentMarkSweepGeneration: public CardGeneration {
|
||||
|
||||
// Adaptive size policy
|
||||
CMSAdaptiveSizePolicy* size_policy();
|
||||
-
|
||||
+ static const size_t CMSIterateBlockSize = 1024 * 1024;
|
||||
void set_did_compact(bool v) { _did_compact = v; }
|
||||
-
|
||||
+ virtual size_t num_iterable_blocks() const;
|
||||
+ virtual void object_iterate_block(ObjectClosure *cl, size_t block_index);
|
||||
bool refs_discovery_is_atomic() const { return false; }
|
||||
bool refs_discovery_is_mt() const {
|
||||
// Note: CMS does MT-discovery during the parallel-remark
|
||||
diff --git a/hotspot/src/share/vm/memory/genCollectedHeap.cpp b/hotspot/src/share/vm/memory/genCollectedHeap.cpp
|
||||
index ed2c0afb7..20fbbfd8e 100644
|
||||
--- a/hotspot/src/share/vm/memory/genCollectedHeap.cpp
|
||||
+++ b/hotspot/src/share/vm/memory/genCollectedHeap.cpp
|
||||
@@ -1272,6 +1272,73 @@ void GenCollectedHeap::print_heap_change(size_t prev_used) const {
|
||||
}
|
||||
}
|
||||
|
||||
+// The CMSHeapBlockClaimer is used during parallel iteration over the heap,
|
||||
+// allowing workers to claim heap areas ("blocks"), gaining exclusive rights to these.
|
||||
+// The eden and survivor spaces are treated as single blocks as it is hard to divide
|
||||
+// these spaces.
|
||||
+// The old space is divided into fixed-size blocks.
|
||||
+class CMSHeapBlockClaimer : public StackObj {
|
||||
+ size_t _claimed_index;
|
||||
+
|
||||
+public:
|
||||
+ static const size_t InvalidIndex = SIZE_MAX;
|
||||
+ static const size_t EdenIndex = 0;
|
||||
+ static const size_t SurvivorIndex = 1;
|
||||
+ static const size_t NumNonOldGenClaims = 2;
|
||||
+
|
||||
+ CMSHeapBlockClaimer() : _claimed_index(EdenIndex) { }
|
||||
+ // Claim the block and get the block index.
|
||||
+ size_t claim_and_get_block()
|
||||
+ {
|
||||
+ size_t block_index;
|
||||
+ block_index = Atomic::add(1u, reinterpret_cast<volatile jint *>(&_claimed_index)) - 1;
|
||||
+ Generation *old_gen = GenCollectedHeap::heap()->get_gen(1);
|
||||
+ size_t num_claims = old_gen->num_iterable_blocks() + NumNonOldGenClaims;
|
||||
+ return block_index < num_claims ? block_index : InvalidIndex;
|
||||
+ }
|
||||
+ ~CMSHeapBlockClaimer() {}
|
||||
+};
|
||||
+
|
||||
+void GenCollectedHeap::object_iterate_parallel(ObjectClosure *cl, CMSHeapBlockClaimer *claimer)
|
||||
+{
|
||||
+ size_t block_index = claimer->claim_and_get_block();
|
||||
+ DefNewGeneration *def_new_gen = (DefNewGeneration*) get_gen(0);
|
||||
+ // Iterate until all blocks are claimed
|
||||
+ if (block_index == CMSHeapBlockClaimer::EdenIndex) {
|
||||
+ def_new_gen->eden()->object_iterate(cl);
|
||||
+ block_index = claimer->claim_and_get_block();
|
||||
+ }
|
||||
+ if (block_index == CMSHeapBlockClaimer::SurvivorIndex) {
|
||||
+ def_new_gen->from()->object_iterate(cl);
|
||||
+ def_new_gen->to()->object_iterate(cl);
|
||||
+ block_index = claimer->claim_and_get_block();
|
||||
+ }
|
||||
+ while (block_index != CMSHeapBlockClaimer::InvalidIndex) {
|
||||
+ get_gen(1)->object_iterate_block(cl, block_index - CMSHeapBlockClaimer::NumNonOldGenClaims);
|
||||
+ block_index = claimer->claim_and_get_block();
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+class GenParallelObjectIterator : public ParallelObjectIterator {
|
||||
+private:
|
||||
+ GenCollectedHeap *_heap;
|
||||
+ CMSHeapBlockClaimer _claimer;
|
||||
+
|
||||
+public:
|
||||
+ GenParallelObjectIterator(uint thread_num) : _heap(GenCollectedHeap::heap()),_claimer(){}
|
||||
+
|
||||
+ virtual void object_iterate(ObjectClosure *cl, uint worker_id)
|
||||
+ {
|
||||
+ _heap->object_iterate_parallel(cl, &_claimer);
|
||||
+ }
|
||||
+ ~GenParallelObjectIterator() {}
|
||||
+};
|
||||
+
|
||||
+ParallelObjectIterator* GenCollectedHeap::parallel_object_iterator(uint thread_num)
|
||||
+{
|
||||
+ return new GenParallelObjectIterator(thread_num);
|
||||
+}
|
||||
+
|
||||
class GenGCPrologueClosure: public GenCollectedHeap::GenClosure {
|
||||
private:
|
||||
bool _full;
|
||||
@@ -1415,6 +1482,7 @@ void GenCollectedHeap::stop() {
|
||||
#endif
|
||||
}
|
||||
|
||||
-void GenCollectedHeap::run_task(AbstractGangTask *task) {
|
||||
-
|
||||
+void GenCollectedHeap::run_task(AbstractGangTask *task)
|
||||
+{
|
||||
+ workers()->run_task(task);
|
||||
}
|
||||
diff --git a/hotspot/src/share/vm/memory/genCollectedHeap.hpp b/hotspot/src/share/vm/memory/genCollectedHeap.hpp
|
||||
index 2c78ea15a..9e5405e28 100644
|
||||
--- a/hotspot/src/share/vm/memory/genCollectedHeap.hpp
|
||||
+++ b/hotspot/src/share/vm/memory/genCollectedHeap.hpp
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "memory/generation.hpp"
|
||||
#include "memory/sharedHeap.hpp"
|
||||
|
||||
+class CMSHeapBlockClaimer;
|
||||
class SubTasksDone;
|
||||
|
||||
// A "GenCollectedHeap" is a SharedHeap that uses generational
|
||||
@@ -213,7 +214,14 @@ public:
|
||||
// Iteration functions.
|
||||
void oop_iterate(ExtendedOopClosure* cl);
|
||||
void object_iterate(ObjectClosure* cl);
|
||||
+ virtual ParallelObjectIterator* parallel_object_iterator(uint thread_num);
|
||||
+ // Iteration functions.
|
||||
+ void object_iterate_parallel(ObjectClosure *cl, CMSHeapBlockClaimer *claimer);
|
||||
void safe_object_iterate(ObjectClosure* cl);
|
||||
+ virtual FlexibleWorkGang* get_safepoint_workers()
|
||||
+ {
|
||||
+ return workers();
|
||||
+ }
|
||||
Space* space_containing(const void* addr) const;
|
||||
|
||||
// A CollectedHeap is divided into a dense sequence of "blocks"; that is,
|
||||
diff --git a/hotspot/src/share/vm/memory/generation.cpp b/hotspot/src/share/vm/memory/generation.cpp
|
||||
index dc4ac0869..9d6c926e1 100644
|
||||
--- a/hotspot/src/share/vm/memory/generation.cpp
|
||||
+++ b/hotspot/src/share/vm/memory/generation.cpp
|
||||
@@ -103,6 +103,12 @@ void Generation::ref_processor_init() {
|
||||
}
|
||||
}
|
||||
|
||||
+size_t Generation::num_iterable_blocks() const
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+void Generation::object_iterate_block(ObjectClosure *cl, size_t block_index){};
|
||||
+
|
||||
void Generation::print() const { print_on(tty); }
|
||||
|
||||
void Generation::print_on(outputStream* st) const {
|
||||
diff --git a/hotspot/src/share/vm/memory/generation.hpp b/hotspot/src/share/vm/memory/generation.hpp
|
||||
index ef5457890..eeb9fa691 100644
|
||||
--- a/hotspot/src/share/vm/memory/generation.hpp
|
||||
+++ b/hotspot/src/share/vm/memory/generation.hpp
|
||||
@@ -175,7 +175,8 @@ class Generation: public CHeapObj<mtGC> {
|
||||
// Returns the total number of bytes available in a generation
|
||||
// for the allocation of objects.
|
||||
virtual size_t max_capacity() const;
|
||||
-
|
||||
+ virtual size_t num_iterable_blocks() const;
|
||||
+ virtual void object_iterate_block(ObjectClosure *cl, size_t block_index);
|
||||
// If this is a young generation, the maximum number of bytes that can be
|
||||
// allocated in this generation before a GC is triggered.
|
||||
virtual size_t capacity_before_gc() const { return 0; }
|
||||
diff --git a/jdk/src/share/classes/sun/tools/jmap/JMap.java b/jdk/src/share/classes/sun/tools/jmap/JMap.java
|
||||
index e891b6c55..2cb5a5c10 100644
|
||||
--- a/jdk/src/share/classes/sun/tools/jmap/JMap.java
|
||||
+++ b/jdk/src/share/classes/sun/tools/jmap/JMap.java
|
||||
@@ -220,20 +220,24 @@ public class JMap {
|
||||
|
||||
private static void histo(String pid, String options) throws IOException {
|
||||
VirtualMachine vm = attach(pid);
|
||||
- String parallel = null;
|
||||
String liveopt = "-all";
|
||||
- if (options.startsWith("live")) {
|
||||
- liveopt = "-live";
|
||||
- }
|
||||
- String[] subopts = options.split(",");
|
||||
+ String parallel = null;
|
||||
+ String subopts[] = options.split(",");
|
||||
for (int i = 0; i < subopts.length; i++) {
|
||||
String subopt = subopts[i];
|
||||
- if (subopt.startsWith("parallel=")) {
|
||||
+ if (subopt.equals("") || subopt.equals("all")) {
|
||||
+ // pass
|
||||
+ } else if (subopt.equals("live")) {
|
||||
+ liveopt = "-live";
|
||||
+ } else if (subopt.startsWith("parallel=")) {
|
||||
parallel = subopt.substring("parallel=".length());
|
||||
if (parallel == null) {
|
||||
System.err.println("Fail: no number provided in option: '" + subopt + "'");
|
||||
- System.exit(1);
|
||||
+ usage(1);
|
||||
}
|
||||
+ } else {
|
||||
+ System.err.println("Fail: invalid option: '" + subopt + "'");
|
||||
+ usage(1);
|
||||
}
|
||||
}
|
||||
InputStream in = ((HotSpotVirtualMachine)vm).heapHisto(liveopt,parallel);
|
||||
diff --git a/jdk/test/sun/tools/jmap/ParallelInspection.sh b/jdk/test/sun/tools/jmap/ParallelInspection.sh
|
||||
index 69e51a76f..b4add98c0 100644
|
||||
--- a/jdk/test/sun/tools/jmap/ParallelInspection.sh
|
||||
+++ b/jdk/test/sun/tools/jmap/ParallelInspection.sh
|
||||
@@ -76,4 +76,36 @@ set -e
|
||||
stopApplication "${PORTFILE}"
|
||||
waitForApplication
|
||||
|
||||
+# parallel num in CMS GC
|
||||
+# Start application and use PORTFILE for coordination
|
||||
+PORTFILE="${TESTCLASSES}"/shutdown.port
|
||||
+startApplication SimpleApplication "${PORTFILE}" defineGC UseConcMarkSweepGC
|
||||
+
|
||||
+# all return statuses are checked in this test
|
||||
+set +e
|
||||
+
|
||||
+failed=0
|
||||
+
|
||||
+${JMAP} -J-XX:+UsePerfData -histo:parallel=0 $appJavaPid
|
||||
+if [ $? != 0 ]; then failed=1; fi
|
||||
+
|
||||
+${JMAP} -J-XX:+UsePerfData -histo:parallel=1 $appJavaPid
|
||||
+if [ $? != 0 ]; then failed=1; fi
|
||||
+
|
||||
+${JMAP} -J-XX:+UsePerfData -histo:parallel=2 $appJavaPid
|
||||
+if [ $? != 0 ]; then failed=1; fi
|
||||
+
|
||||
+${JMAP} -J-XX:+UsePerfData -histo:live,parallel=0 $appJavaPid
|
||||
+if [ $? != 0 ]; then failed=1; fi
|
||||
+
|
||||
+${JMAP} -J-XX:+UsePerfData -histo:live,parallel=1 $appJavaPid
|
||||
+if [ $? != 0 ]; then failed=1; fi
|
||||
+
|
||||
+${JMAP} -J-XX:+UsePerfData -histo:live,parallel=2 $appJavaPid
|
||||
+if [ $? != 0 ]; then failed=1; fi
|
||||
+set -e
|
||||
+
|
||||
+stopApplication "${PORTFILE}"
|
||||
+waitForApplication
|
||||
+
|
||||
exit $failed
|
||||
@ -23,7 +23,7 @@ index c3dec0a30..201dd9594 100644
|
||||
*index = '\0'; // chop to just the package name
|
||||
while ((index = strchr(name, '/')) != NULL) {
|
||||
*index = '.'; // replace '/' with '.' in package name
|
||||
@@ -1170,29 +1170,31 @@ Klass* SystemDictionary::resolve_from_stream(Symbol* class_name,
|
||||
@@ -1170,29 +1170,32 @@ Klass* SystemDictionary::resolve_from_stream(Symbol* class_name,
|
||||
!class_loader.is_null() &&
|
||||
parsed_name != NULL &&
|
||||
parsed_name->utf8_length() >= (int)pkglen) {
|
||||
@ -50,6 +50,7 @@ index c3dec0a30..201dd9594 100644
|
||||
- Exceptions::_throw_msg(THREAD_AND_LOCATION,
|
||||
- vmSymbols::java_lang_SecurityException(), message);
|
||||
- }
|
||||
+ ResourceMark rm(THREAD);
|
||||
+ bool prohibited;
|
||||
+ const jbyte* base = parsed_name->base();
|
||||
+ if ((base[0] | base[1] | base[2] | base[3] | base[4]) & 0x80) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user