From 4dc240f785c464c2f28a40b7c183372c2e30f509 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20Lid=C3=A9n?= Date: Wed, 13 May 2015 15:16:06 +0200 Subject: [PATCH 01/82] 8079792: GC directory structure cleanup Reviewed-by: brutisso, stefank, david --- hotspot/agent/make/Makefile | 17 ++- .../share/classes/sun/jvm/hotspot/HSDB.java | 6 +- .../g1/G1Allocator.java | 2 +- .../g1/G1CollectedHeap.java | 8 +- .../g1/G1HeapRegionTable.java | 4 +- .../g1/G1MonitoringSupport.java | 4 +- .../g1/HeapRegion.java | 4 +- .../g1/HeapRegionManager.java | 4 +- .../g1/HeapRegionSetBase.java | 4 +- .../g1/HeapRegionSetCount.java | 4 +- .../parallel}/PSOldGen.java | 6 +- .../parallel}/PSYoungGen.java | 6 +- .../parallel}/ParallelScavengeHeap.java | 6 +- .../shared}/CollectedHeap.java | 2 +- .../shared}/CollectedHeapName.java | 2 +- .../{gc_interface => gc/shared}/G1YCType.java | 4 +- .../{gc_interface => gc/shared}/GCCause.java | 4 +- .../{gc_interface => gc/shared}/GCName.java | 4 +- .../{gc_interface => gc/shared}/GCWhen.java | 4 +- .../shared/ImmutableSpace.java | 4 +- .../shared/MutableSpace.java | 4 +- .../jvm/hotspot/memory/GenCollectedHeap.java | 2 +- .../ReferenceType.java | 4 +- .../sun/jvm/hotspot/memory/Universe.java | 6 +- .../sun/jvm/hotspot/oops/ObjectHeap.java | 8 +- .../sun/jvm/hotspot/tools/HeapSummary.java | 10 +- .../hotspot/utilities/LivenessAnalysis.java | 4 +- .../sun/jvm/hotspot/utilities/MarkBits.java | 4 +- .../jvm/hotspot/utilities/PointerFinder.java | 4 +- .../hotspot/utilities/PointerLocation.java | 4 +- .../utilities/ReversePtrsAnalysis.java | 4 +- hotspot/make/aix/makefiles/vm.make | 4 +- hotspot/make/bsd/makefiles/vm.make | 4 +- hotspot/make/excludeSrc.make | 39 ++---- hotspot/make/linux/makefiles/vm.make | 2 +- hotspot/make/pic.make | 4 +- hotspot/make/sa.files | 9 +- hotspot/make/solaris/makefiles/vm.make | 4 +- hotspot/make/windows/create_obj_files.sh | 14 +- hotspot/make/windows/makefiles/vm.make | 39 +++--- hotspot/src/cpu/aarch64/vm/aarch64.ad | 4 +- .../cpu/aarch64/vm/c1_CodeStubs_aarch64.cpp | 4 +- .../aarch64/vm/c1_LIRAssembler_aarch64.cpp | 8 +- .../aarch64/vm/c1_MacroAssembler_aarch64.cpp | 4 +- .../cpu/aarch64/vm/c1_Runtime1_aarch64.cpp | 4 +- .../src/cpu/aarch64/vm/icBuffer_aarch64.cpp | 4 +- .../cpu/aarch64/vm/macroAssembler_aarch64.cpp | 6 +- hotspot/src/cpu/ppc/vm/assembler_ppc.cpp | 10 +- hotspot/src/cpu/ppc/vm/icBuffer_ppc.cpp | 2 +- hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp | 10 +- .../src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp | 2 +- .../cpu/sparc/vm/c1_LIRAssembler_sparc.cpp | 6 +- .../cpu/sparc/vm/c1_MacroAssembler_sparc.cpp | 2 +- .../src/cpu/sparc/vm/c1_Runtime1_sparc.cpp | 2 +- hotspot/src/cpu/sparc/vm/icBuffer_sparc.cpp | 2 +- .../src/cpu/sparc/vm/macroAssembler_sparc.cpp | 10 +- hotspot/src/cpu/x86/vm/assembler_x86.cpp | 12 +- hotspot/src/cpu/x86/vm/c1_CodeStubs_x86.cpp | 2 +- .../src/cpu/x86/vm/c1_LIRAssembler_x86.cpp | 6 +- .../src/cpu/x86/vm/c1_MacroAssembler_x86.cpp | 2 +- hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp | 2 +- hotspot/src/cpu/x86/vm/icBuffer_x86.cpp | 2 +- hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp | 10 +- hotspot/src/cpu/zero/vm/assembler_zero.cpp | 12 +- hotspot/src/cpu/zero/vm/icBuffer_zero.cpp | 2 +- .../src/os/bsd/dtrace/generateJvmOffsets.cpp | 2 +- .../os/solaris/dtrace/generateJvmOffsets.cpp | 2 +- hotspot/src/share/vm/adlc/main.cpp | 2 +- hotspot/src/share/vm/asm/codeBuffer.cpp | 2 +- hotspot/src/share/vm/c1/c1_LIRGenerator.cpp | 6 +- hotspot/src/share/vm/c1/c1_Runtime1.cpp | 4 +- hotspot/src/share/vm/ci/ciBaseObject.cpp | 2 +- hotspot/src/share/vm/ci/ciEnv.cpp | 2 +- hotspot/src/share/vm/ci/ciField.cpp | 2 +- hotspot/src/share/vm/ci/ciMetadata.cpp | 2 +- hotspot/src/share/vm/ci/ciObject.cpp | 2 +- hotspot/src/share/vm/ci/ciObjectFactory.cpp | 4 +- .../share/vm/classfile/classFileParser.cpp | 4 +- .../src/share/vm/classfile/classLoader.cpp | 8 +- .../share/vm/classfile/classLoaderData.cpp | 2 +- .../src/share/vm/classfile/stringTable.cpp | 8 +- .../src/share/vm/classfile/symbolTable.cpp | 4 +- .../share/vm/classfile/systemDictionary.cpp | 2 +- hotspot/src/share/vm/classfile/verifier.hpp | 4 +- hotspot/src/share/vm/code/codeCache.cpp | 6 +- hotspot/src/share/vm/code/icBuffer.cpp | 2 +- .../src/share/vm/compiler/disassembler.cpp | 4 +- hotspot/src/share/vm/compiler/oopMap.cpp | 4 +- .../cms}/adaptiveFreeList.cpp | 8 +- .../cms}/adaptiveFreeList.hpp | 8 +- .../shared => gc/cms}/allocationStats.cpp | 6 +- .../shared => gc/cms}/allocationStats.hpp | 12 +- .../cms}/cmsCollectorPolicy.cpp | 22 +-- .../cms}/cmsCollectorPolicy.hpp | 10 +- .../cms}/cmsLockVerifier.cpp | 6 +- .../cms}/cmsLockVerifier.hpp | 8 +- .../cms}/cmsOopClosures.cpp | 4 +- .../cms}/cmsOopClosures.hpp | 10 +- .../cms}/cmsOopClosures.inline.hpp | 14 +- .../cms}/compactibleFreeListSpace.cpp | 20 +-- .../cms}/compactibleFreeListSpace.hpp | 14 +- .../cms}/concurrentMarkSweepGeneration.cpp | 50 +++---- .../cms}/concurrentMarkSweepGeneration.hpp | 26 ++-- .../concurrentMarkSweepGeneration.inline.hpp | 22 +-- .../cms}/concurrentMarkSweepThread.cpp | 6 +- .../cms}/concurrentMarkSweepThread.hpp | 12 +- .../cms}/freeChunk.cpp | 4 +- .../cms}/freeChunk.hpp | 8 +- .../shared => gc/cms}/gSpaceCounters.cpp | 10 +- .../shared => gc/cms}/gSpaceCounters.hpp | 16 +-- .../cms}/parCardTableModRefBS.cpp | 10 +- .../parNew => gc/cms}/parNewGeneration.cpp | 44 +++--- .../parNew => gc/cms}/parNewGeneration.hpp | 18 +-- .../parNew => gc/cms}/parOopClosures.cpp | 4 +- .../parNew => gc/cms}/parOopClosures.hpp | 10 +- .../cms}/parOopClosures.inline.hpp | 16 +-- .../cms}/promotionInfo.cpp | 8 +- .../cms}/promotionInfo.hpp | 10 +- .../cms}/vmCMSOperations.cpp | 14 +- .../cms}/vmCMSOperations.hpp | 12 +- .../cms}/vmStructs_cms.hpp | 8 +- .../parNew => gc/cms}/vmStructs_parNew.hpp | 8 +- .../cms}/yieldingWorkgroup.cpp | 2 +- .../cms}/yieldingWorkgroup.hpp | 10 +- .../g1/bufferingOopClosure.cpp | 4 +- .../g1/bufferingOopClosure.hpp | 8 +- .../g1/collectionSetChooser.cpp | 12 +- .../g1/collectionSetChooser.hpp | 10 +- .../g1/concurrentG1Refine.cpp | 10 +- .../g1/concurrentG1Refine.hpp | 10 +- .../g1/concurrentG1RefineThread.cpp | 8 +- .../g1/concurrentG1RefineThread.hpp | 10 +- .../g1/concurrentMark.cpp | 44 +++--- .../g1/concurrentMark.hpp | 14 +- .../g1/concurrentMark.inline.hpp | 12 +- .../g1/concurrentMarkThread.cpp | 14 +- .../g1/concurrentMarkThread.hpp | 10 +- .../g1/concurrentMarkThread.inline.hpp | 12 +- .../g1/dirtyCardQueue.cpp | 10 +- .../g1/dirtyCardQueue.hpp | 10 +- .../g1/evacuationInfo.hpp | 6 +- .../g1/g1AllocRegion.cpp | 6 +- .../g1/g1AllocRegion.hpp | 10 +- .../g1/g1AllocRegion.inline.hpp | 12 +- .../g1/g1AllocationContext.hpp | 8 +- .../g1/g1Allocator.cpp | 10 +- .../g1/g1Allocator.hpp | 16 +-- .../g1/g1Allocator_ext.cpp | 6 +- .../g1/g1BiasedArray.cpp | 4 +- .../g1/g1BiasedArray.hpp | 8 +- .../g1/g1BlockOffsetTable.cpp | 8 +- .../g1/g1BlockOffsetTable.hpp | 8 +- .../g1/g1BlockOffsetTable.inline.hpp | 12 +- .../g1/g1CardCounts.cpp | 10 +- .../g1/g1CardCounts.hpp | 8 +- .../g1/g1CodeCacheRemSet.cpp | 6 +- .../g1/g1CodeCacheRemSet.hpp | 8 +- .../g1/g1CollectedHeap.cpp | 64 ++++----- .../g1/g1CollectedHeap.hpp | 38 +++--- .../g1/g1CollectedHeap.inline.hpp | 22 +-- .../g1/g1CollectedHeap_ext.cpp | 4 +- .../g1/g1CollectorPolicy.cpp | 20 +-- .../g1/g1CollectorPolicy.hpp | 16 +-- .../g1/g1CollectorPolicy_ext.hpp | 10 +- .../g1/g1ErgoVerbose.cpp | 4 +- .../g1/g1ErgoVerbose.hpp | 8 +- .../g1/g1EvacFailure.cpp | 16 +-- .../g1/g1EvacFailure.hpp | 12 +- .../g1/g1GCPhaseTimes.cpp | 10 +- .../g1/g1GCPhaseTimes.hpp | 8 +- .../g1/g1HRPrinter.cpp | 6 +- .../g1/g1HRPrinter.hpp | 10 +- .../g1/g1HotCardCache.cpp | 8 +- .../g1/g1HotCardCache.hpp | 10 +- .../g1/g1InCSetState.hpp | 12 +- .../vm/{gc_implementation => gc}/g1/g1Log.cpp | 4 +- .../vm/{gc_implementation => gc}/g1/g1Log.hpp | 6 +- .../g1/g1MMUTracker.cpp | 2 +- .../g1/g1MMUTracker.hpp | 6 +- .../g1/g1MarkSweep.cpp | 28 ++-- .../g1/g1MarkSweep.hpp | 16 +-- .../g1/g1MarkSweep_ext.cpp | 4 +- .../g1/g1MonitoringSupport.cpp | 8 +- .../g1/g1MonitoringSupport.hpp | 10 +- .../g1/g1OopClosures.cpp | 10 +- .../g1/g1OopClosures.hpp | 8 +- .../g1/g1OopClosures.inline.hpp | 20 +-- .../g1/g1PageBasedVirtualSpace.cpp | 2 +- .../g1/g1PageBasedVirtualSpace.hpp | 6 +- .../g1/g1ParScanThreadState.cpp | 10 +- .../g1/g1ParScanThreadState.hpp | 20 +-- .../g1/g1ParScanThreadState.inline.hpp | 10 +- .../g1/g1RegionToSpaceMapper.cpp | 4 +- .../g1/g1RegionToSpaceMapper.hpp | 8 +- .../{gc_implementation => gc}/g1/g1RemSet.cpp | 22 +-- .../{gc_implementation => gc}/g1/g1RemSet.hpp | 10 +- .../g1/g1RemSet.inline.hpp | 12 +- .../g1/g1RemSetSummary.cpp | 16 +-- .../g1/g1RemSetSummary.hpp | 8 +- .../g1/g1RootProcessor.cpp | 12 +- .../g1/g1RootProcessor.hpp | 8 +- .../g1/g1SATBCardTableModRefBS.cpp | 8 +- .../g1/g1SATBCardTableModRefBS.hpp | 10 +- .../g1/g1StringDedup.cpp | 14 +- .../g1/g1StringDedup.hpp | 8 +- .../g1/g1StringDedupQueue.cpp | 8 +- .../g1/g1StringDedupQueue.hpp | 8 +- .../g1/g1StringDedupStat.cpp | 4 +- .../g1/g1StringDedupStat.hpp | 8 +- .../g1/g1StringDedupTable.cpp | 12 +- .../g1/g1StringDedupTable.hpp | 10 +- .../g1/g1StringDedupThread.cpp | 10 +- .../g1/g1StringDedupThread.hpp | 12 +- .../g1/g1YCTypes.hpp | 8 +- .../g1/g1_globals.cpp | 4 +- .../g1/g1_globals.hpp | 6 +- .../g1/g1_specialized_oop_closures.hpp | 6 +- .../shared => gc/g1}/hSpaceCounters.cpp | 6 +- .../shared => gc/g1}/hSpaceCounters.hpp | 14 +- .../g1/heapRegion.cpp | 20 +-- .../g1/heapRegion.hpp | 22 +-- .../g1/heapRegion.inline.hpp | 14 +- .../g1/heapRegionBounds.hpp | 8 +- .../g1/heapRegionBounds.inline.hpp | 8 +- .../g1/heapRegionManager.cpp | 10 +- .../g1/heapRegionManager.hpp | 12 +- .../g1/heapRegionManager.inline.hpp | 14 +- .../g1/heapRegionRemSet.cpp | 12 +- .../g1/heapRegionRemSet.hpp | 12 +- .../g1/heapRegionSet.cpp | 6 +- .../g1/heapRegionSet.hpp | 10 +- .../g1/heapRegionSet.inline.hpp | 10 +- .../g1/heapRegionType.cpp | 4 +- .../g1/heapRegionType.hpp | 8 +- .../{gc_implementation => gc}/g1/ptrQueue.cpp | 2 +- .../{gc_implementation => gc}/g1/ptrQueue.hpp | 8 +- .../g1/satbQueue.cpp | 6 +- .../g1/satbQueue.hpp | 8 +- .../g1/sparsePRT.cpp | 12 +- .../g1/sparsePRT.hpp | 14 +- .../g1/survRateGroup.cpp | 10 +- .../g1/survRateGroup.hpp | 8 +- .../shared => gc/g1}/suspendibleThreadSet.cpp | 2 +- .../shared => gc/g1}/suspendibleThreadSet.hpp | 6 +- .../g1/vmStructs_g1.hpp | 14 +- .../g1/vm_operations_g1.cpp | 17 ++- .../g1/vm_operations_g1.hpp | 10 +- .../parallel}/adjoiningGenerations.cpp | 10 +- .../parallel}/adjoiningGenerations.hpp | 16 +-- .../parallel}/adjoiningVirtualSpaces.cpp | 4 +- .../parallel}/adjoiningVirtualSpaces.hpp | 10 +- .../parallel}/asPSOldGen.cpp | 10 +- .../parallel}/asPSOldGen.hpp | 20 +-- .../parallel}/asPSYoungGen.cpp | 14 +- .../parallel}/asPSYoungGen.hpp | 22 +-- .../parallel}/cardTableExtension.cpp | 14 +- .../parallel}/cardTableExtension.hpp | 8 +- .../parallel}/gcAdaptivePolicyCounters.cpp | 4 +- .../parallel}/gcAdaptivePolicyCounters.hpp | 14 +- .../parallel}/gcTaskManager.cpp | 8 +- .../parallel}/gcTaskManager.hpp | 8 +- .../parallel}/gcTaskThread.cpp | 4 +- .../parallel}/gcTaskThread.hpp | 8 +- .../parallel}/generationSizer.cpp | 6 +- .../parallel}/generationSizer.hpp | 10 +- .../shared => gc/parallel}/immutableSpace.cpp | 8 +- .../shared => gc/parallel}/immutableSpace.hpp | 8 +- .../parallel}/mutableNUMASpace.cpp | 8 +- .../parallel}/mutableNUMASpace.hpp | 14 +- .../shared => gc/parallel}/mutableSpace.cpp | 10 +- .../shared => gc/parallel}/mutableSpace.hpp | 10 +- .../parallel}/objectStartArray.cpp | 6 +- .../parallel}/objectStartArray.hpp | 10 +- .../parallel}/parMarkBitMap.cpp | 8 +- .../parallel}/parMarkBitMap.hpp | 8 +- .../parallel}/parallelScavengeHeap.cpp | 30 ++--- .../parallel}/parallelScavengeHeap.hpp | 26 ++-- .../parallel}/parallelScavengeHeap.inline.hpp | 16 +-- .../parallel}/pcTasks.cpp | 14 +- .../parallel}/pcTasks.hpp | 14 +- .../parallel}/psAdaptiveSizePolicy.cpp | 16 +-- .../parallel}/psAdaptiveSizePolicy.hpp | 16 +-- .../parallel}/psCompactionManager.cpp | 16 +-- .../parallel}/psCompactionManager.hpp | 8 +- .../parallel}/psCompactionManager.inline.hpp | 14 +- .../parallel}/psGCAdaptivePolicyCounters.cpp | 4 +- .../parallel}/psGCAdaptivePolicyCounters.hpp | 14 +- .../parallel}/psGenerationCounters.cpp | 4 +- .../parallel}/psGenerationCounters.hpp | 12 +- .../parallel}/psMarkSweep.cpp | 36 ++--- .../parallel}/psMarkSweep.hpp | 10 +- .../parallel}/psMarkSweepDecorator.cpp | 14 +- .../parallel}/psMarkSweepDecorator.hpp | 10 +- .../parallel}/psOldGen.cpp | 14 +- .../parallel}/psOldGen.hpp | 16 +-- .../parallel}/psParallelCompact.cpp | 46 +++---- .../parallel}/psParallelCompact.hpp | 18 +-- .../parallel}/psParallelCompact.inline.hpp | 12 +- .../parallel}/psPromotionLAB.cpp | 6 +- .../parallel}/psPromotionLAB.hpp | 10 +- .../parallel}/psPromotionLAB.inline.hpp | 12 +- .../parallel}/psPromotionManager.cpp | 14 +- .../parallel}/psPromotionManager.hpp | 14 +- .../parallel}/psPromotionManager.inline.hpp | 18 +-- .../parallel}/psScavenge.cpp | 38 +++--- .../parallel}/psScavenge.hpp | 16 +-- .../parallel}/psScavenge.inline.hpp | 14 +- .../parallel}/psTasks.cpp | 16 +-- .../parallel}/psTasks.hpp | 8 +- .../parallel}/psVirtualspace.cpp | 2 +- .../parallel}/psVirtualspace.hpp | 6 +- .../parallel}/psYoungGen.cpp | 14 +- .../parallel}/psYoungGen.hpp | 18 +-- .../shared => gc/parallel}/spaceCounters.cpp | 8 +- .../shared => gc/parallel}/spaceCounters.hpp | 18 ++- .../parallel}/vmPSOperations.cpp | 10 +- .../parallel}/vmPSOperations.hpp | 12 +- .../parallel}/vmStructs_parallelgc.hpp | 6 +- .../shared => gc/serial}/cSpaceCounters.cpp | 2 +- .../shared => gc/serial}/cSpaceCounters.hpp | 10 +- .../serial}/defNewGeneration.cpp | 32 ++--- .../serial}/defNewGeneration.hpp | 16 +-- .../serial}/defNewGeneration.inline.hpp | 16 +-- .../vm/{memory => gc/serial}/genMarkSweep.cpp | 22 +-- .../vm/{memory => gc/serial}/genMarkSweep.hpp | 10 +- .../shared => gc/serial}/markSweep.cpp | 8 +- .../shared => gc/serial}/markSweep.hpp | 12 +- .../shared => gc/serial}/markSweep.inline.hpp | 18 +-- .../serial}/tenuredGeneration.cpp | 20 +-- .../serial}/tenuredGeneration.hpp | 16 +-- .../serial}/tenuredGeneration.inline.hpp | 12 +- .../shared/adaptiveSizePolicy.cpp | 8 +- .../shared/adaptiveSizePolicy.hpp | 12 +- .../shared/ageTable.cpp | 12 +- .../shared/ageTable.hpp | 10 +- .../shared}/allocTracer.cpp | 6 +- .../shared}/allocTracer.hpp | 8 +- .../vm/{memory => gc/shared}/barrierSet.cpp | 6 +- .../vm/{memory => gc/shared}/barrierSet.hpp | 6 +- .../shared}/barrierSet.inline.hpp | 10 +- .../shared}/blockOffsetTable.cpp | 6 +- .../shared}/blockOffsetTable.hpp | 6 +- .../shared}/blockOffsetTable.inline.hpp | 12 +- .../{memory => gc/shared}/cardGeneration.cpp | 14 +- .../{memory => gc/shared}/cardGeneration.hpp | 10 +- .../shared}/cardGeneration.inline.hpp | 12 +- .../shared}/cardTableModRefBS.cpp | 12 +- .../shared}/cardTableModRefBS.hpp | 8 +- .../shared}/cardTableModRefBS.inline.hpp | 8 +- .../vm/{memory => gc/shared}/cardTableRS.cpp | 8 +- .../vm/{memory => gc/shared}/cardTableRS.hpp | 12 +- .../shared}/collectedHeap.cpp | 20 +-- .../shared}/collectedHeap.hpp | 10 +- .../shared}/collectedHeap.inline.hpp | 14 +- .../shared/collectorCounters.cpp | 4 +- .../shared/collectorCounters.hpp | 8 +- .../{memory => gc/shared}/collectorPolicy.cpp | 18 +-- .../{memory => gc/shared}/collectorPolicy.hpp | 12 +- .../shared/concurrentGCThread.cpp | 2 +- .../shared/concurrentGCThread.hpp | 12 +- .../shared/copyFailedInfo.hpp | 8 +- .../{gc_interface => gc/shared}/gcCause.cpp | 4 +- .../{gc_interface => gc/shared}/gcCause.hpp | 8 +- .../shared/gcHeapSummary.hpp | 8 +- .../{gc_implementation => gc}/shared/gcId.cpp | 4 +- .../{gc_implementation => gc}/shared/gcId.hpp | 8 +- .../vm/{memory => gc/shared}/gcLocker.cpp | 6 +- .../vm/{memory => gc/shared}/gcLocker.hpp | 12 +- .../{memory => gc/shared}/gcLocker.inline.hpp | 10 +- .../vm/{gc_interface => gc/shared}/gcName.hpp | 8 +- .../shared/gcPolicyCounters.cpp | 4 +- .../shared/gcPolicyCounters.hpp | 8 +- .../shared/gcStats.cpp | 6 +- .../shared/gcStats.hpp | 10 +- .../shared/gcTimer.cpp | 4 +- .../shared/gcTimer.hpp | 8 +- .../shared/gcTrace.cpp | 16 +-- .../shared/gcTrace.hpp | 20 +-- .../shared/gcTraceSend.cpp | 18 +-- .../shared/gcTraceTime.cpp | 8 +- .../shared/gcTraceTime.hpp | 10 +- .../shared/gcUtil.cpp | 4 +- .../shared/gcUtil.hpp | 6 +- .../shared/gcWhen.hpp | 8 +- .../shared}/genCollectedHeap.cpp | 28 ++-- .../shared}/genCollectedHeap.hpp | 14 +- .../{memory => gc/shared}/genOopClosures.cpp | 4 +- .../{memory => gc/shared}/genOopClosures.hpp | 6 +- .../shared}/genOopClosures.inline.hpp | 22 +-- .../vm/{memory => gc/shared}/genRemSet.cpp | 6 +- .../vm/{memory => gc/shared}/genRemSet.hpp | 8 +- .../vm/{memory => gc/shared}/generation.cpp | 26 ++-- .../vm/{memory => gc/shared}/generation.hpp | 12 +- .../shared/generationCounters.cpp | 4 +- .../shared/generationCounters.hpp | 6 +- .../{memory => gc/shared}/generationSpec.cpp | 14 +- .../{memory => gc/shared}/generationSpec.hpp | 8 +- .../shared/isGCActiveMark.hpp | 10 +- .../shared/liveRange.hpp | 6 +- .../shared}/modRefBarrierSet.hpp | 8 +- .../shared/objectCountEventSender.cpp | 6 +- .../shared/objectCountEventSender.hpp | 8 +- .../{gc_implementation => gc}/shared/plab.cpp | 6 +- .../{gc_implementation => gc}/shared/plab.hpp | 8 +- .../shared/plab.inline.hpp | 10 +- .../{memory => gc/shared}/referencePolicy.cpp | 4 +- .../{memory => gc/shared}/referencePolicy.hpp | 8 +- .../shared}/referenceProcessor.cpp | 12 +- .../shared}/referenceProcessor.hpp | 12 +- .../shared}/referenceProcessorStats.hpp | 6 +- .../share/vm/{memory => gc/shared}/space.cpp | 22 +-- .../share/vm/{memory => gc/shared}/space.hpp | 14 +- .../vm/{memory => gc/shared}/space.inline.hpp | 18 +-- .../shared/spaceDecorator.cpp | 6 +- .../shared/spaceDecorator.hpp | 12 +- .../shared}/specialized_oop_closures.hpp | 10 +- .../shared}/strongRootsScope.cpp | 2 +- .../shared}/strongRootsScope.hpp | 6 +- .../vm/{utilities => gc/shared}/taskqueue.cpp | 2 +- .../vm/{utilities => gc/shared}/taskqueue.hpp | 6 +- .../shared}/taskqueue.inline.hpp | 12 +- .../shared}/threadLocalAllocBuffer.cpp | 6 +- .../shared}/threadLocalAllocBuffer.hpp | 10 +- .../shared}/threadLocalAllocBuffer.inline.hpp | 12 +- .../shared/vmGCOperations.cpp | 10 +- .../shared/vmGCOperations.hpp | 10 +- .../vm/{memory => gc/shared}/watermark.hpp | 8 +- .../vm/{utilities => gc/shared}/workgroup.cpp | 2 +- .../vm/{utilities => gc/shared}/workgroup.hpp | 8 +- .../vm/interpreter/bytecodeInterpreter.cpp | 2 +- .../vm/interpreter/interpreterRuntime.cpp | 2 +- .../src/share/vm/interpreter/linkResolver.cpp | 2 +- hotspot/src/share/vm/interpreter/rewriter.cpp | 4 +- .../share/vm/interpreter/templateTable.cpp | 4 +- hotspot/src/share/vm/memory/allocation.cpp | 2 +- .../share/vm/memory/binaryTreeDictionary.cpp | 15 +-- .../share/vm/memory/freeBlockDictionary.cpp | 4 +- hotspot/src/share/vm/memory/freeList.cpp | 6 +- hotspot/src/share/vm/memory/freeList.hpp | 4 +- .../src/share/vm/memory/genRemSet.inline.hpp | 40 ------ .../src/share/vm/memory/heapInspection.cpp | 6 +- hotspot/src/share/vm/memory/metaspace.cpp | 7 +- .../src/share/vm/memory/metaspaceShared.cpp | 6 +- hotspot/src/share/vm/memory/oopFactory.cpp | 4 +- hotspot/src/share/vm/memory/universe.cpp | 26 ++-- hotspot/src/share/vm/oops/arrayKlass.cpp | 4 +- hotspot/src/share/vm/oops/constMethod.cpp | 4 +- .../vm/oops/instanceClassLoaderKlass.hpp | 4 +- hotspot/src/share/vm/oops/instanceKlass.cpp | 6 +- hotspot/src/share/vm/oops/instanceKlass.hpp | 4 +- .../src/share/vm/oops/instanceMirrorKlass.cpp | 4 +- .../src/share/vm/oops/instanceMirrorKlass.hpp | 4 +- .../src/share/vm/oops/instanceRefKlass.cpp | 8 +- .../src/share/vm/oops/instanceRefKlass.hpp | 4 +- .../share/vm/oops/instanceRefKlass.inline.hpp | 4 +- hotspot/src/share/vm/oops/klass.cpp | 6 +- hotspot/src/share/vm/oops/klass.hpp | 2 +- hotspot/src/share/vm/oops/klassVtable.cpp | 2 +- hotspot/src/share/vm/oops/method.cpp | 8 +- hotspot/src/share/vm/oops/objArrayKlass.cpp | 4 +- hotspot/src/share/vm/oops/objArrayOop.cpp | 4 +- hotspot/src/share/vm/oops/objArrayOop.hpp | 2 +- hotspot/src/share/vm/oops/oop.hpp | 2 +- hotspot/src/share/vm/oops/oop.inline.hpp | 12 +- hotspot/src/share/vm/oops/oopsHierarchy.cpp | 6 +- hotspot/src/share/vm/oops/typeArrayKlass.cpp | 6 +- hotspot/src/share/vm/opto/graphKit.cpp | 10 +- hotspot/src/share/vm/opto/machnode.cpp | 4 +- hotspot/src/share/vm/opto/runtime.cpp | 10 +- hotspot/src/share/vm/opto/type.cpp | 2 +- .../src/share/vm/precompiled/precompiled.hpp | 125 +++++++++--------- hotspot/src/share/vm/prims/forte.cpp | 4 +- hotspot/src/share/vm/prims/jni.cpp | 12 +- hotspot/src/share/vm/prims/jvm.cpp | 6 +- hotspot/src/share/vm/prims/jvmtiExport.cpp | 4 +- .../share/vm/prims/jvmtiGetLoadedClasses.cpp | 2 +- .../share/vm/prims/jvmtiRedefineClasses.cpp | 2 +- hotspot/src/share/vm/prims/jvmtiTagMap.cpp | 2 +- hotspot/src/share/vm/prims/jvmtiTagMap.hpp | 6 +- .../src/share/vm/prims/jvmtiThreadState.cpp | 4 +- hotspot/src/share/vm/prims/unsafe.cpp | 2 +- hotspot/src/share/vm/prims/whitebox.cpp | 12 +- hotspot/src/share/vm/runtime/arguments.cpp | 14 +- hotspot/src/share/vm/runtime/fprofiler.cpp | 2 +- hotspot/src/share/vm/runtime/frame.cpp | 4 +- hotspot/src/share/vm/runtime/globals.cpp | 6 +- hotspot/src/share/vm/runtime/init.cpp | 4 +- .../src/share/vm/runtime/interfaceSupport.cpp | 8 +- .../src/share/vm/runtime/interfaceSupport.hpp | 2 +- hotspot/src/share/vm/runtime/java.cpp | 6 +- hotspot/src/share/vm/runtime/memprofiler.cpp | 6 +- hotspot/src/share/vm/runtime/os.cpp | 4 +- hotspot/src/share/vm/runtime/safepoint.cpp | 10 +- .../src/share/vm/runtime/sharedRuntime.cpp | 4 +- hotspot/src/share/vm/runtime/thread.cpp | 12 +- hotspot/src/share/vm/runtime/thread.hpp | 6 +- .../share/vm/runtime/threadLocalStorage.hpp | 4 +- .../src/share/vm/runtime/unhandledOops.cpp | 6 +- hotspot/src/share/vm/runtime/vmStructs.cpp | 74 +++++------ hotspot/src/share/vm/runtime/vmThread.cpp | 2 +- .../src/share/vm/runtime/vm_operations.cpp | 2 +- .../src/share/vm/services/attachListener.cpp | 4 +- .../share/vm/services/diagnosticCommand.cpp | 4 +- .../src/share/vm/services/g1MemoryPool.cpp | 10 +- .../src/share/vm/services/g1MemoryPool.hpp | 4 +- hotspot/src/share/vm/services/heapDumper.cpp | 10 +- hotspot/src/share/vm/services/memoryPool.cpp | 6 +- .../src/share/vm/services/memoryService.cpp | 26 ++-- .../src/share/vm/services/memoryService.hpp | 4 +- .../src/share/vm/services/psMemoryPool.hpp | 12 +- hotspot/src/share/vm/shark/sharkBuilder.hpp | 6 +- hotspot/src/share/vm/utilities/debug.cpp | 2 +- hotspot/src/share/vm/utilities/ostream.cpp | 4 +- hotspot/src/share/vm/utilities/top.hpp | 4 +- hotspot/src/share/vm/utilities/vmError.cpp | 2 +- hotspot/test/TEST.groups | 6 +- .../DisableResizePLAB.java | 2 +- .../GuardShrinkWarning.java | 0 .../AdaptiveGCBoundary.java | 0 .../TestDynShrinkHeap.java | 0 .../{defnew => serial}/HeapChangeLogging.java | 0 521 files changed, 2481 insertions(+), 2573 deletions(-) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_implementation => gc}/g1/G1Allocator.java (95%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_implementation => gc}/g1/G1CollectedHeap.java (95%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_implementation => gc}/g1/G1HeapRegionTable.java (97%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_implementation => gc}/g1/G1MonitoringSupport.java (96%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_implementation => gc}/g1/HeapRegion.java (95%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_implementation => gc}/g1/HeapRegionManager.java (96%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_implementation => gc}/g1/HeapRegionSetBase.java (94%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_implementation => gc}/g1/HeapRegionSetCount.java (95%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_implementation/parallelScavenge => gc/parallel}/PSOldGen.java (92%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_implementation/parallelScavenge => gc/parallel}/PSYoungGen.java (94%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_implementation/parallelScavenge => gc/parallel}/ParallelScavengeHeap.java (94%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_interface => gc/shared}/CollectedHeap.java (98%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_interface => gc/shared}/CollectedHeapName.java (97%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_interface => gc/shared}/G1YCType.java (92%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_interface => gc/shared}/GCCause.java (95%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_interface => gc/shared}/GCName.java (92%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_interface => gc/shared}/GCWhen.java (91%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_implementation => gc}/shared/ImmutableSpace.java (95%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_implementation => gc}/shared/MutableSpace.java (94%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{gc_interface => memory}/ReferenceType.java (93%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/adaptiveFreeList.cpp (95%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/adaptiveFreeList.hpp (96%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/cms}/allocationStats.cpp (88%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/cms}/allocationStats.hpp (95%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/cmsCollectorPolicy.cpp (84%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/cmsCollectorPolicy.hpp (81%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/cmsLockVerifier.cpp (95%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/cmsLockVerifier.hpp (85%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/cmsOopClosures.cpp (91%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/cmsOopClosures.hpp (97%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/cmsOopClosures.inline.hpp (81%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/compactibleFreeListSpace.cpp (99%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/compactibleFreeListSpace.hpp (98%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/concurrentMarkSweepGeneration.cpp (99%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/concurrentMarkSweepGeneration.hpp (98%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/concurrentMarkSweepGeneration.inline.hpp (94%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/concurrentMarkSweepThread.cpp (98%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/concurrentMarkSweepThread.hpp (93%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/freeChunk.cpp (95%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/freeChunk.hpp (95%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/cms}/gSpaceCounters.cpp (93%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/cms}/gSpaceCounters.hpp (88%) rename hotspot/src/share/vm/{gc_implementation/parNew => gc/cms}/parCardTableModRefBS.cpp (99%) rename hotspot/src/share/vm/{gc_implementation/parNew => gc/cms}/parNewGeneration.cpp (98%) rename hotspot/src/share/vm/{gc_implementation/parNew => gc/cms}/parNewGeneration.hpp (96%) rename hotspot/src/share/vm/{gc_implementation/parNew => gc/cms}/parOopClosures.cpp (91%) rename hotspot/src/share/vm/{gc_implementation/parNew => gc/cms}/parOopClosures.hpp (94%) rename hotspot/src/share/vm/{gc_implementation/parNew => gc/cms}/parOopClosures.inline.hpp (93%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/promotionInfo.cpp (98%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/promotionInfo.hpp (95%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/vmCMSOperations.cpp (95%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/vmCMSOperations.hpp (92%) rename hotspot/src/share/vm/{gc_implementation/concurrentMarkSweep => gc/cms}/vmStructs_cms.hpp (94%) rename hotspot/src/share/vm/{gc_implementation/parNew => gc/cms}/vmStructs_parNew.hpp (83%) rename hotspot/src/share/vm/{utilities => gc/cms}/yieldingWorkgroup.cpp (99%) rename hotspot/src/share/vm/{utilities => gc/cms}/yieldingWorkgroup.hpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/bufferingOopClosure.cpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/bufferingOopClosure.hpp (94%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/collectionSetChooser.cpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/collectionSetChooser.hpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/concurrentG1Refine.cpp (93%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/concurrentG1Refine.hpp (92%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/concurrentG1RefineThread.cpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/concurrentG1RefineThread.hpp (89%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/concurrentMark.cpp (99%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/concurrentMark.hpp (99%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/concurrentMark.inline.hpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/concurrentMarkThread.cpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/concurrentMarkThread.hpp (90%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/concurrentMarkThread.inline.hpp (77%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/dirtyCardQueue.cpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/dirtyCardQueue.hpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/evacuationInfo.hpp (94%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1AllocRegion.cpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1AllocRegion.hpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1AllocRegion.inline.hpp (90%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1AllocationContext.hpp (85%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1Allocator.cpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1Allocator.hpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1Allocator_ext.cpp (87%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1BiasedArray.cpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1BiasedArray.hpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1BlockOffsetTable.cpp (99%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1BlockOffsetTable.hpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1BlockOffsetTable.inline.hpp (94%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1CardCounts.cpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1CardCounts.hpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1CodeCacheRemSet.cpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1CodeCacheRemSet.hpp (90%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1CollectedHeap.cpp (99%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1CollectedHeap.hpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1CollectedHeap.inline.hpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1CollectedHeap_ext.cpp (91%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1CollectorPolicy.cpp (99%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1CollectorPolicy.hpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1CollectorPolicy_ext.hpp (76%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1ErgoVerbose.cpp (94%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1ErgoVerbose.hpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1EvacFailure.cpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1EvacFailure.hpp (82%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1GCPhaseTimes.cpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1GCPhaseTimes.hpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1HRPrinter.cpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1HRPrinter.hpp (93%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1HotCardCache.cpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1HotCardCache.hpp (94%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1InCSetState.hpp (94%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1Log.cpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1Log.hpp (91%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1MMUTracker.cpp (99%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1MMUTracker.hpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1MarkSweep.cpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1MarkSweep.hpp (88%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1MarkSweep_ext.cpp (91%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1MonitoringSupport.cpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1MonitoringSupport.hpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1OopClosures.cpp (87%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1OopClosures.hpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1OopClosures.inline.hpp (93%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1PageBasedVirtualSpace.cpp (99%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1PageBasedVirtualSpace.hpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1ParScanThreadState.cpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1ParScanThreadState.hpp (92%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1ParScanThreadState.inline.hpp (94%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1RegionToSpaceMapper.cpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1RegionToSpaceMapper.hpp (93%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1RemSet.cpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1RemSet.hpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1RemSet.inline.hpp (87%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1RemSetSummary.cpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1RemSetSummary.hpp (92%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1RootProcessor.cpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1RootProcessor.hpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1SATBCardTableModRefBS.cpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1SATBCardTableModRefBS.hpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1StringDedup.cpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1StringDedup.hpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1StringDedupQueue.cpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1StringDedupQueue.hpp (93%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1StringDedupStat.cpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1StringDedupStat.hpp (93%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1StringDedupTable.cpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1StringDedupTable.hpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1StringDedupThread.cpp (93%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1StringDedupThread.hpp (83%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1YCTypes.hpp (86%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1_globals.cpp (92%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1_globals.hpp (99%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/g1_specialized_oop_closures.hpp (91%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/g1}/hSpaceCounters.cpp (94%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/g1}/hSpaceCounters.hpp (87%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/heapRegion.cpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/heapRegion.hpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/heapRegion.inline.hpp (94%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/heapRegionBounds.hpp (88%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/heapRegionBounds.inline.hpp (83%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/heapRegionManager.cpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/heapRegionManager.hpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/heapRegionManager.inline.hpp (81%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/heapRegionRemSet.cpp (99%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/heapRegionRemSet.hpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/heapRegionSet.cpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/heapRegionSet.hpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/heapRegionSet.inline.hpp (92%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/heapRegionType.cpp (94%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/heapRegionType.hpp (94%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/ptrQueue.cpp (99%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/ptrQueue.hpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/satbQueue.cpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/satbQueue.hpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/sparsePRT.cpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/sparsePRT.hpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/survRateGroup.cpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/survRateGroup.hpp (92%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/g1}/suspendibleThreadSet.cpp (98%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/g1}/suspendibleThreadSet.hpp (94%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/vmStructs_g1.hpp (93%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/vm_operations_g1.cpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/g1/vm_operations_g1.hpp (93%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/adjoiningGenerations.cpp (97%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/adjoiningGenerations.hpp (83%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/adjoiningVirtualSpaces.cpp (95%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/adjoiningVirtualSpaces.hpp (91%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/asPSOldGen.cpp (95%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/asPSOldGen.hpp (79%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/asPSYoungGen.cpp (98%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/asPSYoungGen.hpp (76%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/cardTableExtension.cpp (98%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/cardTableExtension.hpp (94%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/parallel}/gcAdaptivePolicyCounters.cpp (98%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/parallel}/gcAdaptivePolicyCounters.hpp (94%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/gcTaskManager.cpp (99%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/gcTaskManager.hpp (98%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/gcTaskThread.cpp (97%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/gcTaskThread.hpp (92%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/generationSizer.cpp (94%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/generationSizer.hpp (82%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/parallel}/immutableSpace.cpp (93%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/parallel}/immutableSpace.hpp (90%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/parallel}/mutableNUMASpace.cpp (99%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/parallel}/mutableNUMASpace.hpp (96%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/parallel}/mutableSpace.cpp (98%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/parallel}/mutableSpace.hpp (95%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/objectStartArray.cpp (96%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/objectStartArray.hpp (94%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/parMarkBitMap.cpp (97%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/parMarkBitMap.hpp (97%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/parallelScavengeHeap.cpp (96%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/parallelScavengeHeap.hpp (91%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/parallelScavengeHeap.inline.hpp (75%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/pcTasks.cpp (96%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/pcTasks.hpp (94%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psAdaptiveSizePolicy.cpp (99%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psAdaptiveSizePolicy.hpp (96%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psCompactionManager.cpp (95%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psCompactionManager.hpp (96%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psCompactionManager.inline.hpp (90%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psGCAdaptivePolicyCounters.cpp (98%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psGCAdaptivePolicyCounters.hpp (93%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psGenerationCounters.cpp (94%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psGenerationCounters.hpp (79%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psMarkSweep.cpp (96%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psMarkSweep.hpp (90%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psMarkSweepDecorator.cpp (97%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psMarkSweepDecorator.hpp (88%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psOldGen.cpp (97%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psOldGen.hpp (94%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psParallelCompact.cpp (99%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psParallelCompact.hpp (98%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psParallelCompact.inline.hpp (83%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psPromotionLAB.cpp (96%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psPromotionLAB.hpp (92%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psPromotionLAB.inline.hpp (79%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psPromotionManager.cpp (97%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psPromotionManager.hpp (94%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psPromotionManager.inline.hpp (95%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psScavenge.cpp (96%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psScavenge.hpp (92%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psScavenge.inline.hpp (91%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psTasks.cpp (91%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psTasks.hpp (95%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psVirtualspace.cpp (99%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psVirtualspace.hpp (96%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psYoungGen.cpp (98%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/psYoungGen.hpp (91%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/parallel}/spaceCounters.cpp (94%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/parallel}/spaceCounters.hpp (83%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/vmPSOperations.cpp (89%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/vmPSOperations.hpp (80%) rename hotspot/src/share/vm/{gc_implementation/parallelScavenge => gc/parallel}/vmStructs_parallelgc.hpp (97%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/serial}/cSpaceCounters.cpp (98%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/serial}/cSpaceCounters.hpp (88%) rename hotspot/src/share/vm/{memory => gc/serial}/defNewGeneration.cpp (98%) rename hotspot/src/share/vm/{memory => gc/serial}/defNewGeneration.hpp (96%) rename hotspot/src/share/vm/{memory => gc/serial}/defNewGeneration.inline.hpp (89%) rename hotspot/src/share/vm/{memory => gc/serial}/genMarkSweep.cpp (96%) rename hotspot/src/share/vm/{memory => gc/serial}/genMarkSweep.hpp (87%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/serial}/markSweep.cpp (98%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/serial}/markSweep.hpp (95%) rename hotspot/src/share/vm/{gc_implementation/shared => gc/serial}/markSweep.inline.hpp (92%) rename hotspot/src/share/vm/{memory => gc/serial}/tenuredGeneration.cpp (95%) rename hotspot/src/share/vm/{memory => gc/serial}/tenuredGeneration.hpp (91%) rename hotspot/src/share/vm/{memory => gc/serial}/tenuredGeneration.inline.hpp (85%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/adaptiveSizePolicy.cpp (99%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/adaptiveSizePolicy.hpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/ageTable.cpp (93%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/ageTable.hpp (87%) rename hotspot/src/share/vm/{gc_interface => gc/shared}/allocTracer.cpp (93%) rename hotspot/src/share/vm/{gc_interface => gc/shared}/allocTracer.hpp (85%) rename hotspot/src/share/vm/{memory => gc/shared}/barrierSet.cpp (92%) rename hotspot/src/share/vm/{memory => gc/shared}/barrierSet.hpp (98%) rename hotspot/src/share/vm/{memory => gc/shared}/barrierSet.inline.hpp (93%) rename hotspot/src/share/vm/{memory => gc/shared}/blockOffsetTable.cpp (99%) rename hotspot/src/share/vm/{memory => gc/shared}/blockOffsetTable.hpp (99%) rename hotspot/src/share/vm/{memory => gc/shared}/blockOffsetTable.inline.hpp (92%) rename hotspot/src/share/vm/{memory => gc/shared}/cardGeneration.cpp (98%) rename hotspot/src/share/vm/{memory => gc/shared}/cardGeneration.hpp (92%) rename hotspot/src/share/vm/{memory => gc/shared}/cardGeneration.inline.hpp (82%) rename hotspot/src/share/vm/{memory => gc/shared}/cardTableModRefBS.cpp (99%) rename hotspot/src/share/vm/{memory => gc/shared}/cardTableModRefBS.hpp (98%) rename hotspot/src/share/vm/{memory => gc/shared}/cardTableModRefBS.inline.hpp (87%) rename hotspot/src/share/vm/{memory => gc/shared}/cardTableRS.cpp (99%) rename hotspot/src/share/vm/{memory => gc/shared}/cardTableRS.hpp (95%) rename hotspot/src/share/vm/{gc_interface => gc/shared}/collectedHeap.cpp (98%) rename hotspot/src/share/vm/{gc_interface => gc/shared}/collectedHeap.hpp (99%) rename hotspot/src/share/vm/{gc_interface => gc/shared}/collectedHeap.inline.hpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/collectorCounters.cpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/collectorCounters.hpp (90%) rename hotspot/src/share/vm/{memory => gc/shared}/collectorPolicy.cpp (99%) rename hotspot/src/share/vm/{memory => gc/shared}/collectorPolicy.hpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/concurrentGCThread.cpp (99%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/concurrentGCThread.hpp (90%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/copyFailedInfo.hpp (91%) rename hotspot/src/share/vm/{gc_interface => gc/shared}/gcCause.cpp (96%) rename hotspot/src/share/vm/{gc_interface => gc/shared}/gcCause.hpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/gcHeapSummary.hpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/gcId.cpp (91%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/gcId.hpp (86%) rename hotspot/src/share/vm/{memory => gc/shared}/gcLocker.cpp (98%) rename hotspot/src/share/vm/{memory => gc/shared}/gcLocker.hpp (97%) rename hotspot/src/share/vm/{memory => gc/shared}/gcLocker.inline.hpp (87%) rename hotspot/src/share/vm/{gc_interface => gc/shared}/gcName.hpp (90%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/gcPolicyCounters.cpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/gcPolicyCounters.hpp (89%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/gcStats.cpp (90%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/gcStats.hpp (86%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/gcTimer.cpp (99%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/gcTimer.hpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/gcTrace.cpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/gcTrace.hpp (94%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/gcTraceSend.cpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/gcTraceTime.cpp (92%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/gcTraceTime.hpp (81%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/gcUtil.cpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/gcUtil.hpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/gcWhen.hpp (85%) rename hotspot/src/share/vm/{memory => gc/shared}/genCollectedHeap.cpp (98%) rename hotspot/src/share/vm/{memory => gc/shared}/genCollectedHeap.hpp (98%) rename hotspot/src/share/vm/{memory => gc/shared}/genOopClosures.cpp (92%) rename hotspot/src/share/vm/{memory => gc/shared}/genOopClosures.hpp (97%) rename hotspot/src/share/vm/{memory => gc/shared}/genOopClosures.inline.hpp (91%) rename hotspot/src/share/vm/{memory => gc/shared}/genRemSet.cpp (94%) rename hotspot/src/share/vm/{memory => gc/shared}/genRemSet.hpp (96%) rename hotspot/src/share/vm/{memory => gc/shared}/generation.cpp (95%) rename hotspot/src/share/vm/{memory => gc/shared}/generation.hpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/generationCounters.cpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/generationCounters.hpp (93%) rename hotspot/src/share/vm/{memory => gc/shared}/generationSpec.cpp (87%) rename hotspot/src/share/vm/{memory => gc/shared}/generationSpec.hpp (92%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/isGCActiveMark.hpp (83%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/liveRange.hpp (91%) rename hotspot/src/share/vm/{memory => gc/shared}/modRefBarrierSet.hpp (95%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/objectCountEventSender.cpp (91%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/objectCountEventSender.hpp (84%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/plab.cpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/plab.hpp (97%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/plab.inline.hpp (84%) rename hotspot/src/share/vm/{memory => gc/shared}/referencePolicy.cpp (96%) rename hotspot/src/share/vm/{memory => gc/shared}/referencePolicy.hpp (91%) rename hotspot/src/share/vm/{memory => gc/shared}/referenceProcessor.cpp (99%) rename hotspot/src/share/vm/{memory => gc/shared}/referenceProcessor.hpp (98%) rename hotspot/src/share/vm/{memory => gc/shared}/referenceProcessorStats.hpp (92%) rename hotspot/src/share/vm/{memory => gc/shared}/space.cpp (98%) rename hotspot/src/share/vm/{memory => gc/shared}/space.hpp (99%) rename hotspot/src/share/vm/{memory => gc/shared}/space.inline.hpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/spaceDecorator.cpp (96%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/spaceDecorator.hpp (94%) rename hotspot/src/share/vm/{memory => gc/shared}/specialized_oop_closures.hpp (95%) rename hotspot/src/share/vm/{memory => gc/shared}/strongRootsScope.cpp (97%) rename hotspot/src/share/vm/{memory => gc/shared}/strongRootsScope.hpp (90%) rename hotspot/src/share/vm/{utilities => gc/shared}/taskqueue.cpp (99%) rename hotspot/src/share/vm/{utilities => gc/shared}/taskqueue.hpp (99%) rename hotspot/src/share/vm/{utilities => gc/shared}/taskqueue.inline.hpp (98%) rename hotspot/src/share/vm/{memory => gc/shared}/threadLocalAllocBuffer.cpp (98%) rename hotspot/src/share/vm/{memory => gc/shared}/threadLocalAllocBuffer.hpp (97%) rename hotspot/src/share/vm/{memory => gc/shared}/threadLocalAllocBuffer.inline.hpp (91%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/vmGCOperations.cpp (98%) rename hotspot/src/share/vm/{gc_implementation => gc}/shared/vmGCOperations.hpp (97%) rename hotspot/src/share/vm/{memory => gc/shared}/watermark.hpp (90%) rename hotspot/src/share/vm/{utilities => gc/shared}/workgroup.cpp (99%) rename hotspot/src/share/vm/{utilities => gc/shared}/workgroup.hpp (99%) delete mode 100644 hotspot/src/share/vm/memory/genRemSet.inline.hpp rename hotspot/test/gc/{concurrentMarkSweep => cms}/DisableResizePLAB.java (95%) rename hotspot/test/gc/{concurrentMarkSweep => cms}/GuardShrinkWarning.java (100%) rename hotspot/test/gc/{parallelScavenge => parallel}/AdaptiveGCBoundary.java (100%) rename hotspot/test/gc/{parallelScavenge => parallel}/TestDynShrinkHeap.java (100%) rename hotspot/test/gc/{defnew => serial}/HeapChangeLogging.java (100%) diff --git a/hotspot/agent/make/Makefile b/hotspot/agent/make/Makefile index 8462ef68086..f120c60fa68 100644 --- a/hotspot/agent/make/Makefile +++ b/hotspot/agent/make/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -79,11 +79,10 @@ sun.jvm.hotspot.debugger.windbg \ sun.jvm.hotspot.debugger.windbg.amd64 \ sun.jvm.hotspot.debugger.windbg.x86 \ sun.jvm.hotspot.debugger.x86 \ -sun.jvm.hotspot.gc_implementation \ -sun.jvm.hotspot.gc_implementation.g1 \ -sun.jvm.hotspot.gc_implementation.parallelScavenge \ -sun.jvm.hotspot.gc_implementation.shared \ -sun.jvm.hotspot.gc_interface \ +sun.jvm.hotspot.gc \ +sun.jvm.hotspot.gc.g1 \ +sun.jvm.hotspot.gc.parallel \ +sun.jvm.hotspot.gc.shared \ sun.jvm.hotspot.interpreter \ sun.jvm.hotspot.jdi \ sun.jvm.hotspot.memory \ @@ -168,9 +167,9 @@ sun/jvm/hotspot/debugger/win32/coff/*.java \ sun/jvm/hotspot/debugger/windbg/*.java \ sun/jvm/hotspot/debugger/windbg/x86/*.java \ sun/jvm/hotspot/debugger/x86/*.java \ -sun/jvm/hotspot/gc_implementation/g1/*.java \ -sun/jvm/hotspot/gc_implementation/parallelScavenge/*.java \ -sun/jvm/hotspot/gc_implementation/shared/*.java \ +sun/jvm/hotspot/gc/g1/*.java \ +sun/jvm/hotspot/gc/parallel/*.java \ +sun/jvm/hotspot/gc/shared/*.java \ sun/jvm/hotspot/interpreter/*.java \ sun/jvm/hotspot/jdi/*.java \ sun/jvm/hotspot/memory/*.java \ diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/HSDB.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/HSDB.java index c43c5b1b88e..829780ab1a7 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/HSDB.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/HSDB.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,8 +33,8 @@ import java.util.*; import sun.jvm.hotspot.code.*; import sun.jvm.hotspot.compiler.*; import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.gc_implementation.parallelScavenge.*; -import sun.jvm.hotspot.gc_interface.*; +import sun.jvm.hotspot.gc.parallel.*; +import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.interpreter.*; import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.oops.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/G1Allocator.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/G1Allocator.java similarity index 95% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/G1Allocator.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/G1Allocator.java index 1195eed06bb..4307ba24a7d 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/G1Allocator.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/G1Allocator.java @@ -1,4 +1,4 @@ -package sun.jvm.hotspot.gc_implementation.g1; +package sun.jvm.hotspot.gc.g1; import java.util.Observable; import java.util.Observer; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/G1CollectedHeap.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/G1CollectedHeap.java similarity index 95% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/G1CollectedHeap.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/G1CollectedHeap.java index 815a74bc276..516fcf96f79 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/G1CollectedHeap.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/G1CollectedHeap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,15 +22,15 @@ * */ -package sun.jvm.hotspot.gc_implementation.g1; +package sun.jvm.hotspot.gc.g1; import java.util.Iterator; import java.util.Observable; import java.util.Observer; import sun.jvm.hotspot.debugger.Address; -import sun.jvm.hotspot.gc_interface.CollectedHeap; -import sun.jvm.hotspot.gc_interface.CollectedHeapName; +import sun.jvm.hotspot.gc.shared.CollectedHeap; +import sun.jvm.hotspot.gc.shared.CollectedHeapName; import sun.jvm.hotspot.memory.MemRegion; import sun.jvm.hotspot.memory.SpaceClosure; import sun.jvm.hotspot.runtime.VM; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/G1HeapRegionTable.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/G1HeapRegionTable.java similarity index 97% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/G1HeapRegionTable.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/G1HeapRegionTable.java index e8bbaaa0553..da8abd80223 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/G1HeapRegionTable.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/G1HeapRegionTable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.gc_implementation.g1; +package sun.jvm.hotspot.gc.g1; import java.util.Iterator; import java.util.Observable; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/G1MonitoringSupport.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/G1MonitoringSupport.java similarity index 96% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/G1MonitoringSupport.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/G1MonitoringSupport.java index a9ced52b635..e59825dca7c 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/G1MonitoringSupport.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/G1MonitoringSupport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.gc_implementation.g1; +package sun.jvm.hotspot.gc.g1; import java.util.Observable; import java.util.Observer; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegion.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/HeapRegion.java similarity index 95% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegion.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/HeapRegion.java index 8d924973d8f..42e6f8c46ec 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegion.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/HeapRegion.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.gc_implementation.g1; +package sun.jvm.hotspot.gc.g1; import java.util.ArrayList; import java.util.List; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionManager.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/HeapRegionManager.java similarity index 96% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionManager.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/HeapRegionManager.java index 2a2a26f3947..b80c60350f4 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionManager.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/HeapRegionManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.gc_implementation.g1; +package sun.jvm.hotspot.gc.g1; import java.util.Iterator; import java.util.Observable; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionSetBase.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/HeapRegionSetBase.java similarity index 94% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionSetBase.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/HeapRegionSetBase.java index 94c3e239990..bd64e0249e4 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionSetBase.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/HeapRegionSetBase.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.gc_implementation.g1; +package sun.jvm.hotspot.gc.g1; import java.util.Iterator; import java.util.Observable; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionSetCount.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/HeapRegionSetCount.java similarity index 95% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionSetCount.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/HeapRegionSetCount.java index 2a4483a54c8..2c9fd8280c8 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionSetCount.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/HeapRegionSetCount.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.gc_implementation.g1; +package sun.jvm.hotspot.gc.g1; import java.util.Iterator; import java.util.Observable; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/parallelScavenge/PSOldGen.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/PSOldGen.java similarity index 92% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/parallelScavenge/PSOldGen.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/PSOldGen.java index 4735ecc3fd8..682cccda6ae 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/parallelScavenge/PSOldGen.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/PSOldGen.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ * */ -package sun.jvm.hotspot.gc_implementation.parallelScavenge; +package sun.jvm.hotspot.gc.parallel; import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.gc_implementation.shared.*; +import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/parallelScavenge/PSYoungGen.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/PSYoungGen.java similarity index 94% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/parallelScavenge/PSYoungGen.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/PSYoungGen.java index b8c36bc1793..11787a56844 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/parallelScavenge/PSYoungGen.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/PSYoungGen.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ * */ -package sun.jvm.hotspot.gc_implementation.parallelScavenge; +package sun.jvm.hotspot.gc.parallel; import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.gc_implementation.shared.*; +import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/parallelScavenge/ParallelScavengeHeap.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/ParallelScavengeHeap.java similarity index 94% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/parallelScavenge/ParallelScavengeHeap.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/ParallelScavengeHeap.java index e99316718ab..9db4b041acd 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/parallelScavenge/ParallelScavengeHeap.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/ParallelScavengeHeap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ * */ -package sun.jvm.hotspot.gc_implementation.parallelScavenge; +package sun.jvm.hotspot.gc.parallel; import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.gc_interface.*; +import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/CollectedHeap.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/CollectedHeap.java similarity index 98% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/CollectedHeap.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/CollectedHeap.java index c66a791dfd8..7646a2ced6c 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/CollectedHeap.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/CollectedHeap.java @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.gc_interface; +package sun.jvm.hotspot.gc.shared; import java.io.*; import java.util.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/CollectedHeapName.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/CollectedHeapName.java similarity index 97% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/CollectedHeapName.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/CollectedHeapName.java index 7e18cfa5075..13419091e18 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/CollectedHeapName.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/CollectedHeapName.java @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.gc_interface; +package sun.jvm.hotspot.gc.shared; /** Mimics the enums in the VM under CollectedHeap::Name */ diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/G1YCType.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/G1YCType.java similarity index 92% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/G1YCType.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/G1YCType.java index d3d15512b04..871af8aae9d 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/G1YCType.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/G1YCType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.gc_interface; +package sun.jvm.hotspot.gc.shared; //These definitions should be kept in sync with the definitions in the HotSpot //code. diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCCause.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GCCause.java similarity index 95% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCCause.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GCCause.java index fc8f251f919..3b9655b922c 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCCause.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GCCause.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.gc_interface; +package sun.jvm.hotspot.gc.shared; //These definitions should be kept in sync with the definitions in the HotSpot code. diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCName.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GCName.java similarity index 92% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCName.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GCName.java index f8985778d35..9a7a4de3872 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCName.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GCName.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.gc_interface; +package sun.jvm.hotspot.gc.shared; //These definitions should be kept in sync with the definitions in the HotSpot code. diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCWhen.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GCWhen.java similarity index 91% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCWhen.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GCWhen.java index 74d4a83f744..83530d4a502 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/GCWhen.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GCWhen.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.gc_interface; +package sun.jvm.hotspot.gc.shared; //These definitions should be kept in sync with the definitions in the HotSpot code. diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/shared/ImmutableSpace.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/ImmutableSpace.java similarity index 95% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/shared/ImmutableSpace.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/ImmutableSpace.java index 7f173bc3937..c3f6b5c8e3f 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/shared/ImmutableSpace.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/ImmutableSpace.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.gc_implementation.shared; +package sun.jvm.hotspot.gc.shared; import java.io.*; import java.util.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/shared/MutableSpace.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/MutableSpace.java similarity index 94% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/shared/MutableSpace.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/MutableSpace.java index f0f33245434..dc32b41da0e 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/shared/MutableSpace.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/MutableSpace.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.gc_implementation.shared; +package sun.jvm.hotspot.gc.shared; import java.io.*; import java.util.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/GenCollectedHeap.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/GenCollectedHeap.java index 074e7fa286e..6f7b311f105 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/GenCollectedHeap.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/GenCollectedHeap.java @@ -28,7 +28,7 @@ import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.gc_interface.*; +import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; import sun.jvm.hotspot.utilities.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/ReferenceType.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/ReferenceType.java similarity index 93% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/ReferenceType.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/ReferenceType.java index e8bb8bc2119..e5c8f5a1d9a 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_interface/ReferenceType.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/ReferenceType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.gc_interface; +package sun.jvm.hotspot.memory; //These definitions should be kept in sync with the definitions in the HotSpot code. diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java index ee4fbb06594..f26fc452c94 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java @@ -27,9 +27,9 @@ package sun.jvm.hotspot.memory; import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.gc_interface.*; -import sun.jvm.hotspot.gc_implementation.g1.G1CollectedHeap; -import sun.jvm.hotspot.gc_implementation.parallelScavenge.*; +import sun.jvm.hotspot.gc.shared.*; +import sun.jvm.hotspot.gc.g1.G1CollectedHeap; +import sun.jvm.hotspot.gc.parallel.*; import sun.jvm.hotspot.oops.*; import sun.jvm.hotspot.types.*; import sun.jvm.hotspot.runtime.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java index d550a935fa3..297ac14d641 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,9 +32,9 @@ package sun.jvm.hotspot.oops; import java.util.*; import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.gc_interface.*; -import sun.jvm.hotspot.gc_implementation.g1.*; -import sun.jvm.hotspot.gc_implementation.parallelScavenge.*; +import sun.jvm.hotspot.gc.shared.*; +import sun.jvm.hotspot.gc.g1.*; +import sun.jvm.hotspot.gc.parallel.*; import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/HeapSummary.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/HeapSummary.java index eb090565a9b..3eba45c49b7 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/HeapSummary.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/HeapSummary.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,10 +25,10 @@ package sun.jvm.hotspot.tools; import java.util.*; -import sun.jvm.hotspot.gc_interface.*; -import sun.jvm.hotspot.gc_implementation.g1.*; -import sun.jvm.hotspot.gc_implementation.parallelScavenge.*; -import sun.jvm.hotspot.gc_implementation.shared.*; +import sun.jvm.hotspot.gc.shared.*; +import sun.jvm.hotspot.gc.g1.*; +import sun.jvm.hotspot.gc.parallel.*; +import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.debugger.JVMDebugger; import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.oops.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/LivenessAnalysis.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/LivenessAnalysis.java index 1aa3c8c8815..a69f88f5a3c 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/LivenessAnalysis.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/LivenessAnalysis.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ package sun.jvm.hotspot.utilities; import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.gc_interface.*; +import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.oops.*; import sun.jvm.hotspot.runtime.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/MarkBits.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/MarkBits.java index a93fc65455e..5b247573749 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/MarkBits.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/MarkBits.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,7 @@ package sun.jvm.hotspot.utilities; import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.gc_interface.*; +import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.oops.*; import sun.jvm.hotspot.runtime.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/PointerFinder.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/PointerFinder.java index a76457f7f5f..35e8fe003e8 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/PointerFinder.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/PointerFinder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ package sun.jvm.hotspot.utilities; import sun.jvm.hotspot.code.*; import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.gc_interface.*; +import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.interpreter.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.memory.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/PointerLocation.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/PointerLocation.java index 0dd1ea966d5..aa50800de63 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/PointerLocation.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/PointerLocation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ package sun.jvm.hotspot.utilities; import java.io.*; import sun.jvm.hotspot.code.*; import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.gc_interface.*; +import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.interpreter.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.memory.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ReversePtrsAnalysis.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ReversePtrsAnalysis.java index 35afe78f724..50a8d4d62a8 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ReversePtrsAnalysis.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ReversePtrsAnalysis.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ package sun.jvm.hotspot.utilities; import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.gc_interface.*; +import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.oops.*; import sun.jvm.hotspot.runtime.*; diff --git a/hotspot/make/aix/makefiles/vm.make b/hotspot/make/aix/makefiles/vm.make index cf10de3e214..ecd46d1c371 100644 --- a/hotspot/make/aix/makefiles/vm.make +++ b/hotspot/make/aix/makefiles/vm.make @@ -1,5 +1,5 @@ # -# Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. # Copyright 2012, 2013 SAP AG. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # @@ -137,7 +137,7 @@ LIBJVM = lib$(JVM).so LIBJVM_DEBUGINFO = lib$(JVM).debuginfo LIBJVM_DIZ = lib$(JVM).diz -SPECIAL_PATHS:=adlc c1 gc_implementation opto shark libadt +SPECIAL_PATHS:=adlc c1 gc opto shark libadt SOURCE_PATHS=\ $(shell find $(HS_COMMON_SRC)/share/vm/* -type d \! \ diff --git a/hotspot/make/bsd/makefiles/vm.make b/hotspot/make/bsd/makefiles/vm.make index 1adcc796719..b27d88fb556 100644 --- a/hotspot/make/bsd/makefiles/vm.make +++ b/hotspot/make/bsd/makefiles/vm.make @@ -1,5 +1,5 @@ # -# Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -154,7 +154,7 @@ else LIBJVM_DIZ = lib$(JVM).diz endif -SPECIAL_PATHS:=adlc c1 gc_implementation opto shark libadt +SPECIAL_PATHS:=adlc c1 gc opto shark libadt SOURCE_PATHS=\ $(shell find $(HS_COMMON_SRC)/share/vm/* -type d \! \ diff --git a/hotspot/make/excludeSrc.make b/hotspot/make/excludeSrc.make index 5cfdb4d3058..0bc759f25b7 100644 --- a/hotspot/make/excludeSrc.make +++ b/hotspot/make/excludeSrc.make @@ -1,5 +1,5 @@ # -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -81,36 +81,15 @@ ifeq ($(INCLUDE_ALL_GCS), false) CXXFLAGS += -DINCLUDE_ALL_GCS=0 CFLAGS += -DINCLUDE_ALL_GCS=0 - gc_impl := $(HS_COMMON_SRC)/share/vm/gc_implementation - gc_impl_alt := $(HS_ALT_SRC)/share/vm/gc_implementation - gc_subdirs := concurrentMarkSweep g1 parallelScavenge parNew + gc_dir := $(HS_COMMON_SRC)/share/vm/gc + gc_dir_alt := $(HS_ALT_SRC)/share/vm/gc + gc_subdirs := cms g1 parallel gc_exclude := $(foreach gc,$(gc_subdirs), \ - $(notdir $(wildcard $(gc_impl)/$(gc)/*.cpp)) \ - $(notdir $(wildcard $(gc_impl_alt)/$(gc)/*.cpp))) - Src_Files_EXCLUDE += $(gc_exclude) - - # Exclude everything in $(gc_impl)/shared except the files listed - # in $(gc_shared_keep). - gc_shared_all := $(notdir $(wildcard $(gc_impl)/shared/*.cpp)) - gc_shared_keep := \ - adaptiveSizePolicy.cpp \ - ageTable.cpp \ - collectorCounters.cpp \ - cSpaceCounters.cpp \ - gcId.cpp \ - gcPolicyCounters.cpp \ - gcStats.cpp \ - gcTimer.cpp \ - gcTrace.cpp \ - gcTraceSend.cpp \ - gcTraceTime.cpp \ - gcUtil.cpp \ - generationCounters.cpp \ - markSweep.cpp \ - objectCountEventSender.cpp \ - spaceDecorator.cpp \ - vmGCOperations.cpp - Src_Files_EXCLUDE += $(filter-out $(gc_shared_keep),$(gc_shared_all)) + $(notdir $(wildcard $(gc_dir)/$(gc)/*.cpp)) \ + $(notdir $(wildcard $(gc_dir_alt)/$(gc)/*.cpp))) + Src_Files_EXCLUDE += $(gc_exclude) \ + concurrentGCThread.cpp \ + plab.cpp # src/share/vm/services Src_Files_EXCLUDE += \ diff --git a/hotspot/make/linux/makefiles/vm.make b/hotspot/make/linux/makefiles/vm.make index d0737d41c1a..c334309978d 100644 --- a/hotspot/make/linux/makefiles/vm.make +++ b/hotspot/make/linux/makefiles/vm.make @@ -142,7 +142,7 @@ LIBJVM = lib$(JVM).so LIBJVM_DEBUGINFO = lib$(JVM).debuginfo LIBJVM_DIZ = lib$(JVM).diz -SPECIAL_PATHS:=adlc c1 gc_implementation opto shark libadt +SPECIAL_PATHS:=adlc c1 gc opto shark libadt SOURCE_PATHS=\ $(shell find $(HS_COMMON_SRC)/share/vm/* -type d \! \ diff --git a/hotspot/make/pic.make b/hotspot/make/pic.make index 0e61ad93127..9211b5b70d6 100644 --- a/hotspot/make/pic.make +++ b/hotspot/make/pic.make @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -37,7 +37,7 @@ ifneq ($(OSNAME), windows) PARTIAL_NONPIC=0 endif ifeq ($(PARTIAL_NONPIC),1) - NONPIC_DIRS = memory oops gc_implementation gc_interface + NONPIC_DIRS = memory oops gc NONPIC_DIRS := $(foreach dir,$(NONPIC_DIRS), $(GAMMADIR)/src/share/vm/$(dir)) # Look for source files under NONPIC_DIRS NONPIC_FILES := $(foreach dir,$(NONPIC_DIRS),\ diff --git a/hotspot/make/sa.files b/hotspot/make/sa.files index dfe1e53a209..1c73c21c465 100644 --- a/hotspot/make/sa.files +++ b/hotspot/make/sa.files @@ -1,5 +1,5 @@ # -# Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -79,10 +79,9 @@ $(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windbg/x86/*.java \ $(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windows/x86/*.java \ $(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windows/amd64/*.java \ $(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/x86/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/gc_implementation/g1/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/gc_implementation/parallelScavenge/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/gc_implementation/shared/*.java \ -$(AGENT_SRC_DIR)/sun/jvm/hotspot/gc_interface/*.java \ +$(AGENT_SRC_DIR)/sun/jvm/hotspot/gc/g1/*.java \ +$(AGENT_SRC_DIR)/sun/jvm/hotspot/gc/parallel/*.java \ +$(AGENT_SRC_DIR)/sun/jvm/hotspot/gc/shared/*.java \ $(AGENT_SRC_DIR)/sun/jvm/hotspot/interpreter/*.java \ $(AGENT_SRC_DIR)/sun/jvm/hotspot/jdi/*.java \ $(AGENT_SRC_DIR)/sun/jvm/hotspot/memory/*.java \ diff --git a/hotspot/make/solaris/makefiles/vm.make b/hotspot/make/solaris/makefiles/vm.make index 04a2b608b35..75d974e3de6 100644 --- a/hotspot/make/solaris/makefiles/vm.make +++ b/hotspot/make/solaris/makefiles/vm.make @@ -1,5 +1,5 @@ # -# Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -163,7 +163,7 @@ LIBJVM = lib$(JVM).so LIBJVM_DEBUGINFO = lib$(JVM).debuginfo LIBJVM_DIZ = lib$(JVM).diz -SPECIAL_PATHS:=adlc c1 dist gc_implementation opto shark libadt +SPECIAL_PATHS:=adlc c1 dist gc opto shark libadt SOURCE_PATHS=\ $(shell find $(HS_COMMON_SRC)/share/vm/* -type d \! \ diff --git a/hotspot/make/windows/create_obj_files.sh b/hotspot/make/windows/create_obj_files.sh index c17b0690e17..e99ca829e6d 100644 --- a/hotspot/make/windows/create_obj_files.sh +++ b/hotspot/make/windows/create_obj_files.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -57,11 +57,11 @@ ALTSRC_REL=src/closed # Change this to pick up alt sources from somewhere else COMMONSRC=${WorkSpace}/${COMMONSRC_REL} ALTSRC=${WorkSpace}/${ALTSRC_REL} -BASE_PATHS="`if [ -d ${ALTSRC}/share/vm ]; then $FIND ${ALTSRC}/share/vm ! -name vm -prune -type d \! \( -name adlc -o -name c1 -o -name gc_implementation -o -name opto -o -name shark -o -name libadt \); fi`" -BASE_PATHS="${BASE_PATHS} ` $FIND ${COMMONSRC}/share/vm ! -name vm -prune -type d \! \( -name adlc -o -name c1 -o -name gc_implementation -o -name opto -o -name shark -o -name libadt \)`" +BASE_PATHS="`if [ -d ${ALTSRC}/share/vm ]; then $FIND ${ALTSRC}/share/vm ! -name vm -prune -type d \! \( -name adlc -o -name c1 -o -name gc -o -name opto -o -name shark -o -name libadt \); fi`" +BASE_PATHS="${BASE_PATHS} ` $FIND ${COMMONSRC}/share/vm ! -name vm -prune -type d \! \( -name adlc -o -name c1 -o -name gc -o -name opto -o -name shark -o -name libadt \)`" for sd in \ - share/vm/gc_implementation/shared \ + share/vm/gc/shared \ os/${Platform_os_family}/vm \ cpu/${Platform_arch}/vm \ os_cpu/${Platform_os_arch}/vm; do @@ -80,10 +80,10 @@ fi BASE_PATHS="${BASE_PATHS} ${COMMONSRC}/share/vm/prims/wbtestmethods" # shared is already in BASE_PATHS. Should add vm/memory but that one is also in BASE_PATHS. -if [ -d "${ALTSRC}/share/vm/gc_implementation" ]; then - BASE_PATHS="${BASE_PATHS} `$FIND ${ALTSRC}/share/vm/gc_implementation ! -name gc_implementation -prune -type d \! -name shared`" +if [ -d "${ALTSRC}/share/vm/gc" ]; then + BASE_PATHS="${BASE_PATHS} `$FIND ${ALTSRC}/share/vm/gc ! -name gc -prune -type d \! -name shared`" fi -BASE_PATHS="${BASE_PATHS} `$FIND ${COMMONSRC}/share/vm/gc_implementation ! -name gc_implementation -prune -type d \! -name shared`" +BASE_PATHS="${BASE_PATHS} `$FIND ${COMMONSRC}/share/vm/gc ! -name gc -prune -type d \! -name shared`" if [ -d "${ALTSRC}/share/vm/c1" ]; then COMPILER1_PATHS="${ALTSRC}/share/vm/c1" diff --git a/hotspot/make/windows/makefiles/vm.make b/hotspot/make/windows/makefiles/vm.make index 9267a71aac9..65fbf2a0ae7 100644 --- a/hotspot/make/windows/makefiles/vm.make +++ b/hotspot/make/windows/makefiles/vm.make @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -157,12 +157,11 @@ VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/code VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/interpreter VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/ci VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/classfile -VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/gc_implementation/parallelScavenge -VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/gc_implementation/shared -VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/gc_implementation/parNew -VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/gc_implementation/concurrentMarkSweep -VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/gc_implementation/g1 -VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/gc_interface +VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/gc/parallel +VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/gc/shared +VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/gc/serial +VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/gc/cms +VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/gc/g1 VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/asm VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/memory VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/oops @@ -233,22 +232,19 @@ bytecodeInterpreterWithChecks.obj: ..\generated\jvmtifiles\bytecodeInterpreterWi {$(COMMONSRC)\share\vm\classfile}.cpp.obj:: $(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $< -{$(COMMONSRC)\share\vm\gc_implementation\parallelScavenge}.cpp.obj:: +{$(COMMONSRC)\share\vm\gc\parallel}.cpp.obj:: $(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $< -{$(COMMONSRC)\share\vm\gc_implementation\shared}.cpp.obj:: +{$(COMMONSRC)\share\vm\gc\shared}.cpp.obj:: $(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $< -{$(COMMONSRC)\share\vm\gc_implementation\parNew}.cpp.obj:: +{$(COMMONSRC)\share\vm\gc\serial}.cpp.obj:: $(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $< -{$(COMMONSRC)\share\vm\gc_implementation\concurrentMarkSweep}.cpp.obj:: +{$(COMMONSRC)\share\vm\gc\cms}.cpp.obj:: $(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $< -{$(COMMONSRC)\share\vm\gc_implementation\g1}.cpp.obj:: - $(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $< - -{$(COMMONSRC)\share\vm\gc_interface}.cpp.obj:: +{$(COMMONSRC)\share\vm\gc\g1}.cpp.obj:: $(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $< {$(COMMONSRC)\share\vm\asm}.cpp.obj:: @@ -316,22 +312,19 @@ bytecodeInterpreterWithChecks.obj: ..\generated\jvmtifiles\bytecodeInterpreterWi {$(ALTSRC)\share\vm\classfile}.cpp.obj:: $(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $< -{$(ALTSRC)\share\vm\gc_implementation\parallelScavenge}.cpp.obj:: +{$(ALTSRC)\share\vm\gc\parallel}.cpp.obj:: $(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $< -{$(ALTSRC)\share\vm\gc_implementation\shared}.cpp.obj:: +{$(ALTSRC)\share\vm\gc\shared}.cpp.obj:: $(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $< -{$(ALTSRC)\share\vm\gc_implementation\parNew}.cpp.obj:: +{$(ALTSRC)\share\vm\gc\serial}.cpp.obj:: $(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $< -{$(ALTSRC)\share\vm\gc_implementation\concurrentMarkSweep}.cpp.obj:: +{$(ALTSRC)\share\vm\gc\cms}.cpp.obj:: $(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $< -{$(ALTSRC)\share\vm\gc_implementation\g1}.cpp.obj:: - $(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $< - -{$(ALTSRC)\share\vm\gc_interface}.cpp.obj:: +{$(ALTSRC)\share\vm\gc\g1}.cpp.obj:: $(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $< {$(ALTSRC)\share\vm\asm}.cpp.obj:: diff --git a/hotspot/src/cpu/aarch64/vm/aarch64.ad b/hotspot/src/cpu/aarch64/vm/aarch64.ad index 074e498936f..5428534705b 100644 --- a/hotspot/src/cpu/aarch64/vm/aarch64.ad +++ b/hotspot/src/cpu/aarch64/vm/aarch64.ad @@ -1,5 +1,5 @@ // -// Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. +// Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. // Copyright (c) 2014, Red Hat Inc. All rights reserved. // DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. // @@ -758,7 +758,7 @@ definitions %{ source_hpp %{ -#include "memory/cardTableModRefBS.hpp" +#include "gc/shared/cardTableModRefBS.hpp" class CallStubImpl { diff --git a/hotspot/src/cpu/aarch64/vm/c1_CodeStubs_aarch64.cpp b/hotspot/src/cpu/aarch64/vm/c1_CodeStubs_aarch64.cpp index 4b076fcdc45..5cb78d2055d 100644 --- a/hotspot/src/cpu/aarch64/vm/c1_CodeStubs_aarch64.cpp +++ b/hotspot/src/cpu/aarch64/vm/c1_CodeStubs_aarch64.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, Red Hat Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -33,7 +33,7 @@ #include "runtime/sharedRuntime.hpp" #include "vmreg_aarch64.inline.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" #endif diff --git a/hotspot/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp b/hotspot/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp index d5e0184d6ff..353486c402d 100644 --- a/hotspot/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp +++ b/hotspot/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, Red Hat Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -33,9 +33,9 @@ #include "c1/c1_ValueStack.hpp" #include "ci/ciArrayKlass.hpp" #include "ci/ciInstance.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "memory/barrierSet.hpp" -#include "memory/cardTableModRefBS.hpp" +#include "gc/shared/barrierSet.hpp" +#include "gc/shared/cardTableModRefBS.hpp" +#include "gc/shared/collectedHeap.hpp" #include "nativeInst_aarch64.hpp" #include "oops/objArrayKlass.hpp" #include "runtime/sharedRuntime.hpp" diff --git a/hotspot/src/cpu/aarch64/vm/c1_MacroAssembler_aarch64.cpp b/hotspot/src/cpu/aarch64/vm/c1_MacroAssembler_aarch64.cpp index 8886eb33964..046be55e4e5 100644 --- a/hotspot/src/cpu/aarch64/vm/c1_MacroAssembler_aarch64.cpp +++ b/hotspot/src/cpu/aarch64/vm/c1_MacroAssembler_aarch64.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, Red Hat Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -27,7 +27,7 @@ #include "c1/c1_MacroAssembler.hpp" #include "c1/c1_Runtime1.hpp" #include "classfile/systemDictionary.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" #include "interpreter/interpreter.hpp" #include "oops/arrayOop.hpp" #include "oops/markOop.hpp" diff --git a/hotspot/src/cpu/aarch64/vm/c1_Runtime1_aarch64.cpp b/hotspot/src/cpu/aarch64/vm/c1_Runtime1_aarch64.cpp index a290591ad56..cfe2d299ab7 100644 --- a/hotspot/src/cpu/aarch64/vm/c1_Runtime1_aarch64.cpp +++ b/hotspot/src/cpu/aarch64/vm/c1_Runtime1_aarch64.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, Red Hat Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -42,7 +42,7 @@ #include "runtime/vframeArray.hpp" #include "vmreg_aarch64.inline.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" #endif diff --git a/hotspot/src/cpu/aarch64/vm/icBuffer_aarch64.cpp b/hotspot/src/cpu/aarch64/vm/icBuffer_aarch64.cpp index fc0fc8820fd..21c2a3cc770 100644 --- a/hotspot/src/cpu/aarch64/vm/icBuffer_aarch64.cpp +++ b/hotspot/src/cpu/aarch64/vm/icBuffer_aarch64.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, Red Hat Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -27,7 +27,7 @@ #include "asm/macroAssembler.hpp" #include "asm/macroAssembler.inline.hpp" #include "code/icBuffer.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/bytecodes.hpp" #include "memory/resourceArea.hpp" #include "nativeInst_aarch64.hpp" diff --git a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp index bf307e55932..264e54bbe63 100644 --- a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp +++ b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp @@ -41,9 +41,9 @@ #include "runtime/sharedRuntime.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" -#include "gc_implementation/g1/heapRegion.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/heapRegion.hpp" #endif #ifdef PRODUCT diff --git a/hotspot/src/cpu/ppc/vm/assembler_ppc.cpp b/hotspot/src/cpu/ppc/vm/assembler_ppc.cpp index 7b19ddb0018..56564ac7ea7 100644 --- a/hotspot/src/cpu/ppc/vm/assembler_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/assembler_ppc.cpp @@ -25,9 +25,9 @@ #include "precompiled.hpp" #include "asm/assembler.inline.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/cardTableModRefBS.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/interpreter.hpp" -#include "memory/cardTableModRefBS.hpp" #include "memory/resourceArea.hpp" #include "prims/methodHandles.hpp" #include "runtime/biasedLocking.hpp" @@ -38,9 +38,9 @@ #include "runtime/stubRoutines.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" -#include "gc_implementation/g1/heapRegion.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/heapRegion.hpp" #endif // INCLUDE_ALL_GCS #ifdef PRODUCT diff --git a/hotspot/src/cpu/ppc/vm/icBuffer_ppc.cpp b/hotspot/src/cpu/ppc/vm/icBuffer_ppc.cpp index 536e5728bc1..8e16078b3d7 100644 --- a/hotspot/src/cpu/ppc/vm/icBuffer_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/icBuffer_ppc.cpp @@ -27,7 +27,7 @@ #include "asm/assembler.hpp" #include "assembler_ppc.inline.hpp" #include "code/icBuffer.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/bytecodes.hpp" #include "memory/resourceArea.hpp" #include "nativeInst_ppc.hpp" diff --git a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp index 4d0e6df26b5..587000b963f 100644 --- a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp @@ -26,9 +26,9 @@ #include "precompiled.hpp" #include "asm/macroAssembler.inline.hpp" #include "compiler/disassembler.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/cardTableModRefBS.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/interpreter.hpp" -#include "memory/cardTableModRefBS.hpp" #include "memory/resourceArea.hpp" #include "prims/methodHandles.hpp" #include "runtime/biasedLocking.hpp" @@ -40,9 +40,9 @@ #include "runtime/stubRoutines.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" -#include "gc_implementation/g1/heapRegion.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/heapRegion.hpp" #endif // INCLUDE_ALL_GCS #ifdef PRODUCT diff --git a/hotspot/src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp b/hotspot/src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp index 1187443000d..f998a9c3a12 100644 --- a/hotspot/src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp @@ -33,7 +33,7 @@ #include "utilities/macros.hpp" #include "vmreg_sparc.inline.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" #endif // INCLUDE_ALL_GCS #define __ ce->masm()-> diff --git a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp index 69d5987a40d..6efec095dcc 100644 --- a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp @@ -30,9 +30,9 @@ #include "c1/c1_ValueStack.hpp" #include "ci/ciArrayKlass.hpp" #include "ci/ciInstance.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "memory/barrierSet.hpp" -#include "memory/cardTableModRefBS.hpp" +#include "gc/shared/barrierSet.hpp" +#include "gc/shared/cardTableModRefBS.hpp" +#include "gc/shared/collectedHeap.hpp" #include "nativeInst_sparc.hpp" #include "oops/objArrayKlass.hpp" #include "runtime/sharedRuntime.hpp" diff --git a/hotspot/src/cpu/sparc/vm/c1_MacroAssembler_sparc.cpp b/hotspot/src/cpu/sparc/vm/c1_MacroAssembler_sparc.cpp index ca72c6bdc00..2e4bb6bac7d 100644 --- a/hotspot/src/cpu/sparc/vm/c1_MacroAssembler_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/c1_MacroAssembler_sparc.cpp @@ -26,7 +26,7 @@ #include "c1/c1_MacroAssembler.hpp" #include "c1/c1_Runtime1.hpp" #include "classfile/systemDictionary.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" #include "interpreter/interpreter.hpp" #include "oops/arrayOop.hpp" #include "oops/markOop.hpp" diff --git a/hotspot/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp b/hotspot/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp index c27f81abd6d..766b00a6bd8 100644 --- a/hotspot/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp @@ -37,7 +37,7 @@ #include "utilities/macros.hpp" #include "vmreg_sparc.inline.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" #endif // Implementation of StubAssembler diff --git a/hotspot/src/cpu/sparc/vm/icBuffer_sparc.cpp b/hotspot/src/cpu/sparc/vm/icBuffer_sparc.cpp index 21565fb44f5..641da12ab76 100644 --- a/hotspot/src/cpu/sparc/vm/icBuffer_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/icBuffer_sparc.cpp @@ -25,7 +25,7 @@ #include "precompiled.hpp" #include "asm/macroAssembler.inline.hpp" #include "code/icBuffer.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/bytecodes.hpp" #include "memory/resourceArea.hpp" #include "nativeInst_sparc.hpp" diff --git a/hotspot/src/cpu/sparc/vm/macroAssembler_sparc.cpp b/hotspot/src/cpu/sparc/vm/macroAssembler_sparc.cpp index fa90497fb76..d4507cf04b0 100644 --- a/hotspot/src/cpu/sparc/vm/macroAssembler_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/macroAssembler_sparc.cpp @@ -25,9 +25,9 @@ #include "precompiled.hpp" #include "asm/macroAssembler.inline.hpp" #include "compiler/disassembler.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/cardTableModRefBS.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/interpreter.hpp" -#include "memory/cardTableModRefBS.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.hpp" #include "prims/methodHandles.hpp" @@ -39,9 +39,9 @@ #include "runtime/stubRoutines.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" -#include "gc_implementation/g1/heapRegion.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/heapRegion.hpp" #endif // INCLUDE_ALL_GCS #ifdef PRODUCT diff --git a/hotspot/src/cpu/x86/vm/assembler_x86.cpp b/hotspot/src/cpu/x86/vm/assembler_x86.cpp index 2d06abb0086..e2217287b32 100644 --- a/hotspot/src/cpu/x86/vm/assembler_x86.cpp +++ b/hotspot/src/cpu/x86/vm/assembler_x86.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,9 +25,9 @@ #include "precompiled.hpp" #include "asm/assembler.hpp" #include "asm/assembler.inline.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/cardTableModRefBS.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/interpreter.hpp" -#include "memory/cardTableModRefBS.hpp" #include "memory/resourceArea.hpp" #include "prims/methodHandles.hpp" #include "runtime/biasedLocking.hpp" @@ -38,9 +38,9 @@ #include "runtime/stubRoutines.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" -#include "gc_implementation/g1/heapRegion.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/heapRegion.hpp" #endif // INCLUDE_ALL_GCS #ifdef PRODUCT diff --git a/hotspot/src/cpu/x86/vm/c1_CodeStubs_x86.cpp b/hotspot/src/cpu/x86/vm/c1_CodeStubs_x86.cpp index 919c2a6df9c..71684561223 100644 --- a/hotspot/src/cpu/x86/vm/c1_CodeStubs_x86.cpp +++ b/hotspot/src/cpu/x86/vm/c1_CodeStubs_x86.cpp @@ -33,7 +33,7 @@ #include "utilities/macros.hpp" #include "vmreg_x86.inline.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" #endif // INCLUDE_ALL_GCS diff --git a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp index c76408f6af7..d8e9f412d79 100644 --- a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp +++ b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp @@ -32,9 +32,9 @@ #include "c1/c1_ValueStack.hpp" #include "ci/ciArrayKlass.hpp" #include "ci/ciInstance.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "memory/barrierSet.hpp" -#include "memory/cardTableModRefBS.hpp" +#include "gc/shared/barrierSet.hpp" +#include "gc/shared/cardTableModRefBS.hpp" +#include "gc/shared/collectedHeap.hpp" #include "nativeInst_x86.hpp" #include "oops/objArrayKlass.hpp" #include "runtime/sharedRuntime.hpp" diff --git a/hotspot/src/cpu/x86/vm/c1_MacroAssembler_x86.cpp b/hotspot/src/cpu/x86/vm/c1_MacroAssembler_x86.cpp index cf1a59a30b3..76d160ac113 100644 --- a/hotspot/src/cpu/x86/vm/c1_MacroAssembler_x86.cpp +++ b/hotspot/src/cpu/x86/vm/c1_MacroAssembler_x86.cpp @@ -26,7 +26,7 @@ #include "c1/c1_MacroAssembler.hpp" #include "c1/c1_Runtime1.hpp" #include "classfile/systemDictionary.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" #include "interpreter/interpreter.hpp" #include "oops/arrayOop.hpp" #include "oops/markOop.hpp" diff --git a/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp b/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp index 9d0643eeb8d..af41077f40a 100644 --- a/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp +++ b/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp @@ -39,7 +39,7 @@ #include "utilities/macros.hpp" #include "vmreg_x86.inline.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" #endif diff --git a/hotspot/src/cpu/x86/vm/icBuffer_x86.cpp b/hotspot/src/cpu/x86/vm/icBuffer_x86.cpp index 6d10865c32f..dc45fa7f65c 100644 --- a/hotspot/src/cpu/x86/vm/icBuffer_x86.cpp +++ b/hotspot/src/cpu/x86/vm/icBuffer_x86.cpp @@ -26,7 +26,7 @@ #include "asm/macroAssembler.hpp" #include "asm/macroAssembler.inline.hpp" #include "code/icBuffer.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/bytecodes.hpp" #include "memory/resourceArea.hpp" #include "nativeInst_x86.hpp" diff --git a/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp b/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp index ec36f2beaaf..29c67a7e944 100644 --- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp +++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp @@ -26,9 +26,9 @@ #include "asm/assembler.hpp" #include "asm/assembler.inline.hpp" #include "compiler/disassembler.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/cardTableModRefBS.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/interpreter.hpp" -#include "memory/cardTableModRefBS.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.hpp" #include "prims/methodHandles.hpp" @@ -40,9 +40,9 @@ #include "runtime/stubRoutines.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" -#include "gc_implementation/g1/heapRegion.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/heapRegion.hpp" #endif // INCLUDE_ALL_GCS #ifdef PRODUCT diff --git a/hotspot/src/cpu/zero/vm/assembler_zero.cpp b/hotspot/src/cpu/zero/vm/assembler_zero.cpp index 4a60af98fd4..669273d955d 100644 --- a/hotspot/src/cpu/zero/vm/assembler_zero.cpp +++ b/hotspot/src/cpu/zero/vm/assembler_zero.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * Copyright 2007, 2008, 2009 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -25,9 +25,9 @@ #include "precompiled.hpp" #include "assembler_zero.inline.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/cardTableModRefBS.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/interpreter.hpp" -#include "memory/cardTableModRefBS.hpp" #include "memory/resourceArea.hpp" #include "prims/methodHandles.hpp" #include "runtime/biasedLocking.hpp" @@ -38,9 +38,9 @@ #include "runtime/stubRoutines.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" -#include "gc_implementation/g1/heapRegion.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/heapRegion.hpp" #endif // INCLUDE_ALL_GCS int AbstractAssembler::code_fill_byte() { diff --git a/hotspot/src/cpu/zero/vm/icBuffer_zero.cpp b/hotspot/src/cpu/zero/vm/icBuffer_zero.cpp index 924e0836067..8e28fa6eacc 100644 --- a/hotspot/src/cpu/zero/vm/icBuffer_zero.cpp +++ b/hotspot/src/cpu/zero/vm/icBuffer_zero.cpp @@ -27,7 +27,7 @@ #include "asm/assembler.hpp" #include "assembler_zero.inline.hpp" #include "code/icBuffer.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/bytecodes.hpp" #include "memory/resourceArea.hpp" #include "nativeInst_zero.hpp" diff --git a/hotspot/src/os/bsd/dtrace/generateJvmOffsets.cpp b/hotspot/src/os/bsd/dtrace/generateJvmOffsets.cpp index a4fa0d560c7..8fd9e727b17 100644 --- a/hotspot/src/os/bsd/dtrace/generateJvmOffsets.cpp +++ b/hotspot/src/os/bsd/dtrace/generateJvmOffsets.cpp @@ -41,7 +41,7 @@ #include "code/codeBlob.hpp" #include "code/nmethod.hpp" #include "code/pcDesc.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" #include "memory/heap.hpp" #include "memory/memRegion.hpp" #include "memory/universe.hpp" diff --git a/hotspot/src/os/solaris/dtrace/generateJvmOffsets.cpp b/hotspot/src/os/solaris/dtrace/generateJvmOffsets.cpp index c23810915e1..ac66ccba240 100644 --- a/hotspot/src/os/solaris/dtrace/generateJvmOffsets.cpp +++ b/hotspot/src/os/solaris/dtrace/generateJvmOffsets.cpp @@ -41,7 +41,7 @@ #include "code/codeBlob.hpp" #include "code/nmethod.hpp" #include "code/pcDesc.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" #include "memory/heap.hpp" #include "memory/memRegion.hpp" #include "memory/universe.hpp" diff --git a/hotspot/src/share/vm/adlc/main.cpp b/hotspot/src/share/vm/adlc/main.cpp index 6dfbba3e4d2..ef0a71fef25 100644 --- a/hotspot/src/share/vm/adlc/main.cpp +++ b/hotspot/src/share/vm/adlc/main.cpp @@ -215,7 +215,7 @@ int main(int argc, char *argv[]) AD.addInclude(AD._CPP_file, "code/compiledIC.hpp"); AD.addInclude(AD._CPP_file, "code/nativeInst.hpp"); AD.addInclude(AD._CPP_file, "code/vmreg.inline.hpp"); - AD.addInclude(AD._CPP_file, "gc_interface/collectedHeap.inline.hpp"); + AD.addInclude(AD._CPP_file, "gc/shared/collectedHeap.inline.hpp"); AD.addInclude(AD._CPP_file, "oops/compiledICHolder.hpp"); AD.addInclude(AD._CPP_file, "oops/markOop.hpp"); AD.addInclude(AD._CPP_file, "oops/method.hpp"); diff --git a/hotspot/src/share/vm/asm/codeBuffer.cpp b/hotspot/src/share/vm/asm/codeBuffer.cpp index 974a48156f8..c24e0adb1df 100644 --- a/hotspot/src/share/vm/asm/codeBuffer.cpp +++ b/hotspot/src/share/vm/asm/codeBuffer.cpp @@ -25,7 +25,7 @@ #include "precompiled.hpp" #include "asm/codeBuffer.hpp" #include "compiler/disassembler.hpp" -#include "memory/gcLocker.hpp" +#include "gc/shared/gcLocker.hpp" #include "oops/methodData.hpp" #include "oops/oop.inline.hpp" #include "runtime/icache.hpp" diff --git a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp index cc35fc3ae30..c8db5f824b0 100644 --- a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp +++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" -#include "c1/c1_Defs.hpp" #include "c1/c1_Compilation.hpp" +#include "c1/c1_Defs.hpp" #include "c1/c1_FrameMap.hpp" #include "c1/c1_Instruction.hpp" #include "c1/c1_LIRAssembler.hpp" @@ -33,7 +33,7 @@ #include "ci/ciArrayKlass.hpp" #include "ci/ciInstance.hpp" #include "ci/ciObjArray.hpp" -#include "memory/cardTableModRefBS.hpp" +#include "gc/shared/cardTableModRefBS.hpp" #include "runtime/arguments.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" @@ -41,7 +41,7 @@ #include "utilities/bitMap.inline.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/heapRegion.hpp" +#include "gc/g1/heapRegion.hpp" #endif // INCLUDE_ALL_GCS #ifdef ASSERT diff --git a/hotspot/src/share/vm/c1/c1_Runtime1.cpp b/hotspot/src/share/vm/c1/c1_Runtime1.cpp index cb9539ee34f..74d394d0a06 100644 --- a/hotspot/src/share/vm/c1/c1_Runtime1.cpp +++ b/hotspot/src/share/vm/c1/c1_Runtime1.cpp @@ -38,11 +38,11 @@ #include "code/scopeDesc.hpp" #include "code/vtableStubs.hpp" #include "compiler/disassembler.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/barrierSet.hpp" +#include "gc/shared/collectedHeap.hpp" #include "interpreter/bytecode.hpp" #include "interpreter/interpreter.hpp" #include "memory/allocation.inline.hpp" -#include "memory/barrierSet.hpp" #include "memory/oopFactory.hpp" #include "memory/resourceArea.hpp" #include "oops/objArrayKlass.hpp" diff --git a/hotspot/src/share/vm/ci/ciBaseObject.cpp b/hotspot/src/share/vm/ci/ciBaseObject.cpp index 2d1fe71e2d8..8cef3daf72e 100644 --- a/hotspot/src/share/vm/ci/ciBaseObject.cpp +++ b/hotspot/src/share/vm/ci/ciBaseObject.cpp @@ -25,7 +25,7 @@ #include "precompiled.hpp" #include "ci/ciBaseObject.hpp" #include "ci/ciUtilities.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" // ------------------------------------------------------------------ // ciBaseObject::set_ident diff --git a/hotspot/src/share/vm/ci/ciEnv.cpp b/hotspot/src/share/vm/ci/ciEnv.cpp index 9ba708320b1..b95ca80d6dc 100644 --- a/hotspot/src/share/vm/ci/ciEnv.cpp +++ b/hotspot/src/share/vm/ci/ciEnv.cpp @@ -39,7 +39,7 @@ #include "compiler/compileBroker.hpp" #include "compiler/compileLog.hpp" #include "compiler/compilerOracle.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/linkResolver.hpp" #include "memory/allocation.inline.hpp" #include "memory/oopFactory.hpp" diff --git a/hotspot/src/share/vm/ci/ciField.cpp b/hotspot/src/share/vm/ci/ciField.cpp index 57da3a5d628..ba3d07157aa 100644 --- a/hotspot/src/share/vm/ci/ciField.cpp +++ b/hotspot/src/share/vm/ci/ciField.cpp @@ -27,7 +27,7 @@ #include "ci/ciInstanceKlass.hpp" #include "ci/ciUtilities.hpp" #include "classfile/systemDictionary.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/linkResolver.hpp" #include "memory/universe.inline.hpp" #include "oops/oop.inline.hpp" diff --git a/hotspot/src/share/vm/ci/ciMetadata.cpp b/hotspot/src/share/vm/ci/ciMetadata.cpp index f7354c40869..a991d406e02 100644 --- a/hotspot/src/share/vm/ci/ciMetadata.cpp +++ b/hotspot/src/share/vm/ci/ciMetadata.cpp @@ -25,7 +25,7 @@ #include "precompiled.hpp" #include "ci/ciObject.hpp" #include "ci/ciUtilities.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" // ------------------------------------------------------------------ // ciMetadata::print diff --git a/hotspot/src/share/vm/ci/ciObject.cpp b/hotspot/src/share/vm/ci/ciObject.cpp index ae852e68938..2b09567cfca 100644 --- a/hotspot/src/share/vm/ci/ciObject.cpp +++ b/hotspot/src/share/vm/ci/ciObject.cpp @@ -25,7 +25,7 @@ #include "precompiled.hpp" #include "ci/ciObject.hpp" #include "ci/ciUtilities.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "oops/oop.inline.hpp" // ciObject diff --git a/hotspot/src/share/vm/ci/ciObjectFactory.cpp b/hotspot/src/share/vm/ci/ciObjectFactory.cpp index 1b15be7a101..295b7c9282e 100644 --- a/hotspot/src/share/vm/ci/ciObjectFactory.cpp +++ b/hotspot/src/share/vm/ci/ciObjectFactory.cpp @@ -42,13 +42,13 @@ #include "ci/ciUtilities.hpp" #include "classfile/javaClasses.inline.hpp" #include "classfile/systemDictionary.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "memory/allocation.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/fieldType.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -# include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" +# include "gc/g1/g1SATBCardTableModRefBS.hpp" #endif // ciObjectFactory diff --git a/hotspot/src/share/vm/classfile/classFileParser.cpp b/hotspot/src/share/vm/classfile/classFileParser.cpp index 52532918aeb..c42a7d2dcb0 100644 --- a/hotspot/src/share/vm/classfile/classFileParser.cpp +++ b/hotspot/src/share/vm/classfile/classFileParser.cpp @@ -33,8 +33,8 @@ #include "classfile/verificationType.hpp" #include "classfile/verifier.hpp" #include "classfile/vmSymbols.hpp" +#include "gc/shared/gcLocker.hpp" #include "memory/allocation.hpp" -#include "memory/gcLocker.hpp" #include "memory/metadataFactory.hpp" #include "memory/oopFactory.hpp" #include "memory/referenceType.hpp" @@ -59,8 +59,8 @@ #include "services/classLoadingService.hpp" #include "services/threadService.hpp" #include "utilities/array.hpp" -#include "utilities/globalDefinitions.hpp" #include "utilities/exceptions.hpp" +#include "utilities/globalDefinitions.hpp" #include "utilities/macros.hpp" #include "utilities/ostream.hpp" #include "utilities/resourceHash.hpp" diff --git a/hotspot/src/share/vm/classfile/classLoader.cpp b/hotspot/src/share/vm/classfile/classLoader.cpp index a325344ec94..d8c29b3fd90 100644 --- a/hotspot/src/share/vm/classfile/classLoader.cpp +++ b/hotspot/src/share/vm/classfile/classLoader.cpp @@ -26,19 +26,19 @@ #include "classfile/classFileParser.hpp" #include "classfile/classFileStream.hpp" #include "classfile/classLoader.hpp" -#include "classfile/classLoaderExt.hpp" #include "classfile/classLoaderData.inline.hpp" +#include "classfile/classLoaderExt.hpp" #include "classfile/imageFile.hpp" #include "classfile/javaClasses.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" #include "compiler/compileBroker.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/generation.hpp" #include "interpreter/bytecodeStream.hpp" #include "interpreter/oopMapCache.hpp" #include "memory/allocation.inline.hpp" #include "memory/filemap.hpp" -#include "memory/generation.hpp" #include "memory/oopFactory.hpp" #include "memory/universe.inline.hpp" #include "oops/instanceKlass.hpp" @@ -64,8 +64,8 @@ #include "utilities/hashtable.inline.hpp" #include "utilities/macros.hpp" #if INCLUDE_CDS -#include "classfile/sharedPathsMiscInfo.hpp" #include "classfile/sharedClassUtil.hpp" +#include "classfile/sharedPathsMiscInfo.hpp" #endif diff --git a/hotspot/src/share/vm/classfile/classLoaderData.cpp b/hotspot/src/share/vm/classfile/classLoaderData.cpp index a5ed19ffb06..ea2286acc8e 100644 --- a/hotspot/src/share/vm/classfile/classLoaderData.cpp +++ b/hotspot/src/share/vm/classfile/classLoaderData.cpp @@ -53,7 +53,7 @@ #include "classfile/metadataOnStackMark.hpp" #include "classfile/systemDictionary.hpp" #include "code/codeCache.hpp" -#include "memory/gcLocker.hpp" +#include "gc/shared/gcLocker.hpp" #include "memory/metadataFactory.hpp" #include "memory/metaspaceShared.hpp" #include "memory/oopFactory.hpp" diff --git a/hotspot/src/share/vm/classfile/stringTable.cpp b/hotspot/src/share/vm/classfile/stringTable.cpp index ac5e1ce1f8f..feff0b80b60 100644 --- a/hotspot/src/share/vm/classfile/stringTable.cpp +++ b/hotspot/src/share/vm/classfile/stringTable.cpp @@ -28,18 +28,18 @@ #include "classfile/javaClasses.hpp" #include "classfile/stringTable.hpp" #include "classfile/systemDictionary.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/gcLocker.inline.hpp" #include "memory/allocation.inline.hpp" #include "memory/filemap.hpp" -#include "memory/gcLocker.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/mutexLocker.hpp" #include "utilities/hashtable.inline.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" -#include "gc_implementation/g1/g1StringDedup.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/g1StringDedup.hpp" #endif PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC diff --git a/hotspot/src/share/vm/classfile/symbolTable.cpp b/hotspot/src/share/vm/classfile/symbolTable.cpp index ec111a6d4e3..d5788136a35 100644 --- a/hotspot/src/share/vm/classfile/symbolTable.cpp +++ b/hotspot/src/share/vm/classfile/symbolTable.cpp @@ -28,10 +28,10 @@ #include "classfile/javaClasses.hpp" #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/gcLocker.inline.hpp" #include "memory/allocation.inline.hpp" #include "memory/filemap.hpp" -#include "memory/gcLocker.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/mutexLocker.hpp" diff --git a/hotspot/src/share/vm/classfile/systemDictionary.cpp b/hotspot/src/share/vm/classfile/systemDictionary.cpp index 4095681b1ce..c7ba983de31 100644 --- a/hotspot/src/share/vm/classfile/systemDictionary.cpp +++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp @@ -34,10 +34,10 @@ #include "classfile/vmSymbols.hpp" #include "code/codeCache.hpp" #include "compiler/compileBroker.hpp" +#include "gc/shared/gcLocker.hpp" #include "interpreter/bytecodeStream.hpp" #include "interpreter/interpreter.hpp" #include "memory/filemap.hpp" -#include "memory/gcLocker.hpp" #include "memory/oopFactory.hpp" #include "oops/instanceKlass.hpp" #include "oops/instanceRefKlass.hpp" diff --git a/hotspot/src/share/vm/classfile/verifier.hpp b/hotspot/src/share/vm/classfile/verifier.hpp index 012418abe0f..32cc626a536 100644 --- a/hotspot/src/share/vm/classfile/verifier.hpp +++ b/hotspot/src/share/vm/classfile/verifier.hpp @@ -26,12 +26,12 @@ #define SHARE_VM_CLASSFILE_VERIFIER_HPP #include "classfile/verificationType.hpp" -#include "memory/gcLocker.hpp" +#include "gc/shared/gcLocker.hpp" #include "oops/klass.hpp" #include "oops/method.hpp" #include "runtime/handles.hpp" -#include "utilities/growableArray.hpp" #include "utilities/exceptions.hpp" +#include "utilities/growableArray.hpp" // The verifier class class Verifier : AllStatic { diff --git a/hotspot/src/share/vm/code/codeCache.cpp b/hotspot/src/share/vm/code/codeCache.cpp index e3eb0545194..fb3bb83902e 100644 --- a/hotspot/src/share/vm/code/codeCache.cpp +++ b/hotspot/src/share/vm/code/codeCache.cpp @@ -31,22 +31,22 @@ #include "code/nmethod.hpp" #include "code/pcDesc.hpp" #include "compiler/compileBroker.hpp" +#include "gc/shared/gcLocker.hpp" #include "memory/allocation.inline.hpp" -#include "memory/gcLocker.hpp" #include "memory/iterator.hpp" #include "memory/resourceArea.hpp" #include "oops/method.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" #include "oops/verifyOopClosure.hpp" -#include "runtime/handles.inline.hpp" #include "runtime/arguments.hpp" +#include "runtime/compilationPolicy.hpp" #include "runtime/deoptimization.hpp" +#include "runtime/handles.inline.hpp" #include "runtime/icache.hpp" #include "runtime/java.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/sweeper.hpp" -#include "runtime/compilationPolicy.hpp" #include "services/memoryService.hpp" #include "trace/tracing.hpp" #include "utilities/xmlstream.hpp" diff --git a/hotspot/src/share/vm/code/icBuffer.cpp b/hotspot/src/share/vm/code/icBuffer.cpp index f0cccc9a8d9..a08e2e616ae 100644 --- a/hotspot/src/share/vm/code/icBuffer.cpp +++ b/hotspot/src/share/vm/code/icBuffer.cpp @@ -28,7 +28,7 @@ #include "code/icBuffer.hpp" #include "code/nmethod.hpp" #include "code/scopeDesc.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/interpreter.hpp" #include "interpreter/linkResolver.hpp" #include "memory/resourceArea.hpp" diff --git a/hotspot/src/share/vm/compiler/disassembler.cpp b/hotspot/src/share/vm/compiler/disassembler.cpp index fc8758a3b00..49228e592b2 100644 --- a/hotspot/src/share/vm/compiler/disassembler.cpp +++ b/hotspot/src/share/vm/compiler/disassembler.cpp @@ -26,8 +26,8 @@ #include "classfile/javaClasses.hpp" #include "code/codeCache.hpp" #include "compiler/disassembler.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "memory/cardTableModRefBS.hpp" +#include "gc/shared/cardTableModRefBS.hpp" +#include "gc/shared/collectedHeap.hpp" #include "oops/oop.inline.hpp" #include "runtime/fprofiler.hpp" #include "runtime/handles.inline.hpp" diff --git a/hotspot/src/share/vm/compiler/oopMap.cpp b/hotspot/src/share/vm/compiler/oopMap.cpp index fe54ba8211e..a6c74dcb38d 100644 --- a/hotspot/src/share/vm/compiler/oopMap.cpp +++ b/hotspot/src/share/vm/compiler/oopMap.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,7 @@ #include "code/nmethod.hpp" #include "code/scopeDesc.hpp" #include "compiler/oopMap.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" #include "memory/allocation.inline.hpp" #include "memory/resourceArea.hpp" #include "runtime/frame.inline.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/adaptiveFreeList.cpp b/hotspot/src/share/vm/gc/cms/adaptiveFreeList.cpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/adaptiveFreeList.cpp rename to hotspot/src/share/vm/gc/cms/adaptiveFreeList.cpp index 47b90ff5a40..6a37dd01f8b 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/adaptiveFreeList.cpp +++ b/hotspot/src/share/vm/gc/cms/adaptiveFreeList.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,9 +23,9 @@ */ #include "precompiled.hpp" -#include "gc_implementation/concurrentMarkSweep/adaptiveFreeList.hpp" -#include "gc_implementation/concurrentMarkSweep/freeChunk.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/cms/adaptiveFreeList.hpp" +#include "gc/cms/freeChunk.hpp" +#include "gc/shared/collectedHeap.hpp" #include "memory/freeBlockDictionary.hpp" #include "runtime/globals.hpp" #include "runtime/mutex.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/adaptiveFreeList.hpp b/hotspot/src/share/vm/gc/cms/adaptiveFreeList.hpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/adaptiveFreeList.hpp rename to hotspot/src/share/vm/gc/cms/adaptiveFreeList.hpp index 337040b9cd4..d4757eb0c15 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/adaptiveFreeList.hpp +++ b/hotspot/src/share/vm/gc/cms/adaptiveFreeList.hpp @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_ADAPTIVEFREELIST_HPP -#define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_ADAPTIVEFREELIST_HPP +#ifndef SHARE_VM_GC_CMS_ADAPTIVEFREELIST_HPP +#define SHARE_VM_GC_CMS_ADAPTIVEFREELIST_HPP +#include "gc/cms/allocationStats.hpp" #include "memory/freeList.hpp" -#include "gc_implementation/shared/allocationStats.hpp" class CompactibleFreeListSpace; @@ -226,4 +226,4 @@ class AdaptiveFreeList : public FreeList { #endif // NOT PRODUCT }; -#endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_ADAPTIVEFREELIST_HPP +#endif // SHARE_VM_GC_CMS_ADAPTIVEFREELIST_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/allocationStats.cpp b/hotspot/src/share/vm/gc/cms/allocationStats.cpp similarity index 88% rename from hotspot/src/share/vm/gc_implementation/shared/allocationStats.cpp rename to hotspot/src/share/vm/gc/cms/allocationStats.cpp index 1cbfb120aa4..f23fa37c313 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/allocationStats.cpp +++ b/hotspot/src/share/vm/gc/cms/allocationStats.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,11 +23,9 @@ */ #include "precompiled.hpp" +#include "gc/cms/allocationStats.hpp" #include "utilities/macros.hpp" -#if INCLUDE_ALL_GCS -#include "gc_implementation/shared/allocationStats.hpp" #include "utilities/ostream.hpp" -#endif // INCLUDE_ALL_GCS // Technically this should be derived from machine speed, and // ideally it would be dynamically adjusted. diff --git a/hotspot/src/share/vm/gc_implementation/shared/allocationStats.hpp b/hotspot/src/share/vm/gc/cms/allocationStats.hpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/shared/allocationStats.hpp rename to hotspot/src/share/vm/gc/cms/allocationStats.hpp index 9459efbdefd..71ba6149144 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/allocationStats.hpp +++ b/hotspot/src/share/vm/gc/cms/allocationStats.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_ALLOCATIONSTATS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_ALLOCATIONSTATS_HPP +#ifndef SHARE_VM_GC_CMS_ALLOCATIONSTATS_HPP +#define SHARE_VM_GC_CMS_ALLOCATIONSTATS_HPP -#include "utilities/macros.hpp" +#include "gc/shared/gcUtil.hpp" #include "memory/allocation.hpp" #include "utilities/globalDefinitions.hpp" -#include "gc_implementation/shared/gcUtil.hpp" +#include "utilities/macros.hpp" class AllocationStats VALUE_OBJ_CLASS_SPEC { // A duration threshold (in ms) used to filter @@ -167,4 +167,4 @@ class AllocationStats VALUE_OBJ_CLASS_SPEC { ) }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_ALLOCATIONSTATS_HPP +#endif // SHARE_VM_GC_CMS_ALLOCATIONSTATS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp b/hotspot/src/share/vm/gc/cms/cmsCollectorPolicy.cpp similarity index 84% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp rename to hotspot/src/share/vm/gc/cms/cmsCollectorPolicy.cpp index a4960ad4f72..6e49af09f71 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp +++ b/hotspot/src/share/vm/gc/cms/cmsCollectorPolicy.cpp @@ -23,17 +23,17 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/adaptiveSizePolicy.hpp" -#include "gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.hpp" -#include "gc_implementation/parNew/parNewGeneration.hpp" -#include "gc_implementation/shared/gcPolicyCounters.hpp" -#include "gc_implementation/shared/vmGCOperations.hpp" -#include "memory/cardTableRS.hpp" -#include "memory/collectorPolicy.hpp" -#include "memory/gcLocker.inline.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/generationSpec.hpp" -#include "memory/space.hpp" +#include "gc/cms/cmsCollectorPolicy.hpp" +#include "gc/cms/parNewGeneration.hpp" +#include "gc/shared/adaptiveSizePolicy.hpp" +#include "gc/shared/cardTableRS.hpp" +#include "gc/shared/collectorPolicy.hpp" +#include "gc/shared/gcLocker.inline.hpp" +#include "gc/shared/gcPolicyCounters.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/generationSpec.hpp" +#include "gc/shared/space.hpp" +#include "gc/shared/vmGCOperations.hpp" #include "memory/universe.hpp" #include "runtime/arguments.hpp" #include "runtime/globals_extension.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.hpp b/hotspot/src/share/vm/gc/cms/cmsCollectorPolicy.hpp similarity index 81% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.hpp rename to hotspot/src/share/vm/gc/cms/cmsCollectorPolicy.hpp index 0f09d0cf6ac..30d1fc68884 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.hpp +++ b/hotspot/src/share/vm/gc/cms/cmsCollectorPolicy.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSCOLLECTORPOLICY_HPP -#define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSCOLLECTORPOLICY_HPP +#ifndef SHARE_VM_GC_CMS_CMSCOLLECTORPOLICY_HPP +#define SHARE_VM_GC_CMS_CMSCOLLECTORPOLICY_HPP -#include "memory/collectorPolicy.hpp" +#include "gc/shared/collectorPolicy.hpp" class ConcurrentMarkSweepPolicy : public GenCollectorPolicy { protected: @@ -44,4 +44,4 @@ class ConcurrentMarkSweepPolicy : public GenCollectorPolicy { size_t init_survivor_size); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSCOLLECTORPOLICY_HPP +#endif // SHARE_VM_GC_CMS_CMSCOLLECTORPOLICY_HPP diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsLockVerifier.cpp b/hotspot/src/share/vm/gc/cms/cmsLockVerifier.cpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsLockVerifier.cpp rename to hotspot/src/share/vm/gc/cms/cmsLockVerifier.cpp index b6243b73724..11a0fb576a8 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsLockVerifier.cpp +++ b/hotspot/src/share/vm/gc/cms/cmsLockVerifier.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" -#include "gc_implementation/concurrentMarkSweep/cmsLockVerifier.hpp" -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp" +#include "gc/cms/cmsLockVerifier.hpp" +#include "gc/cms/concurrentMarkSweepThread.hpp" #include "runtime/vmThread.hpp" ///////////// Locking verification specific to CMS ////////////// diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsLockVerifier.hpp b/hotspot/src/share/vm/gc/cms/cmsLockVerifier.hpp similarity index 85% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsLockVerifier.hpp rename to hotspot/src/share/vm/gc/cms/cmsLockVerifier.hpp index 632ecc2636a..10825aab999 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsLockVerifier.hpp +++ b/hotspot/src/share/vm/gc/cms/cmsLockVerifier.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSLOCKVERIFIER_HPP -#define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSLOCKVERIFIER_HPP +#ifndef SHARE_VM_GC_CMS_CMSLOCKVERIFIER_HPP +#define SHARE_VM_GC_CMS_CMSLOCKVERIFIER_HPP #include "runtime/mutex.hpp" @@ -44,4 +44,4 @@ class CMSLockVerifier: AllStatic { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSLOCKVERIFIER_HPP +#endif // SHARE_VM_GC_CMS_CMSLOCKVERIFIER_HPP diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.cpp b/hotspot/src/share/vm/gc/cms/cmsOopClosures.cpp similarity index 91% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.cpp rename to hotspot/src/share/vm/gc/cms/cmsOopClosures.cpp index 7cacb77aaf1..43f7d7d3323 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.cpp +++ b/hotspot/src/share/vm/gc/cms/cmsOopClosures.cpp @@ -23,9 +23,9 @@ */ #include "precompiled.hpp" -#include "gc_implementation/concurrentMarkSweep/cmsOopClosures.inline.hpp" +#include "gc/cms/cmsOopClosures.inline.hpp" +#include "gc/shared/specialized_oop_closures.hpp" #include "memory/iterator.inline.hpp" -#include "memory/specialized_oop_closures.hpp" // Generate CMS specialized oop_oop_iterate functions. SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_CMS(ALL_KLASS_OOP_OOP_ITERATE_DEFN) diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp b/hotspot/src/share/vm/gc/cms/cmsOopClosures.hpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp rename to hotspot/src/share/vm/gc/cms/cmsOopClosures.hpp index 5f2b6a6b523..434fc34dd6b 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp +++ b/hotspot/src/share/vm/gc/cms/cmsOopClosures.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSOOPCLOSURES_HPP -#define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSOOPCLOSURES_HPP +#ifndef SHARE_VM_GC_CMS_CMSOOPCLOSURES_HPP +#define SHARE_VM_GC_CMS_CMSOOPCLOSURES_HPP -#include "memory/genOopClosures.hpp" +#include "gc/shared/genOopClosures.hpp" #include "memory/iterator.hpp" ///////////////////////////////////////////////////////////////// @@ -359,4 +359,4 @@ class CMSParKeepAliveClosure: public MetadataAwareOopClosure { virtual void do_oop(narrowOop* p); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSOOPCLOSURES_HPP +#endif // SHARE_VM_GC_CMS_CMSOOPCLOSURES_HPP diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.inline.hpp b/hotspot/src/share/vm/gc/cms/cmsOopClosures.inline.hpp similarity index 81% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.inline.hpp rename to hotspot/src/share/vm/gc/cms/cmsOopClosures.inline.hpp index bc8a6107ccf..6b2214dfce3 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.inline.hpp +++ b/hotspot/src/share/vm/gc/cms/cmsOopClosures.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSOOPCLOSURES_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSOOPCLOSURES_INLINE_HPP +#ifndef SHARE_VM_GC_CMS_CMSOOPCLOSURES_INLINE_HPP +#define SHARE_VM_GC_CMS_CMSOOPCLOSURES_INLINE_HPP -#include "gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp" -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp" +#include "gc/cms/cmsOopClosures.hpp" +#include "gc/cms/concurrentMarkSweepGeneration.hpp" +#include "gc/shared/taskqueue.inline.hpp" #include "oops/oop.inline.hpp" -#include "utilities/taskqueue.inline.hpp" // Trim our work_queue so its length is below max at return inline void Par_MarkRefsIntoAndScanClosure::trim_queue(uint max) { @@ -61,4 +61,4 @@ inline void MetadataAwareOopsInGenClosure::do_class_loader_data(ClassLoaderData* cld->oops_do(_klass_closure._oop_closure, &_klass_closure, claim); } -#endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSOOPCLOSURES_INLINE_HPP +#endif // SHARE_VM_GC_CMS_CMSOOPCLOSURES_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp b/hotspot/src/share/vm/gc/cms/compactibleFreeListSpace.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp rename to hotspot/src/share/vm/gc/cms/compactibleFreeListSpace.cpp index 3076397f64c..628feb99d64 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp +++ b/hotspot/src/share/vm/gc/cms/compactibleFreeListSpace.cpp @@ -23,18 +23,18 @@ */ #include "precompiled.hpp" -#include "gc_implementation/concurrentMarkSweep/cmsLockVerifier.hpp" -#include "gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp" -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.inline.hpp" -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp" -#include "gc_implementation/shared/liveRange.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/cms/cmsLockVerifier.hpp" +#include "gc/cms/compactibleFreeListSpace.hpp" +#include "gc/cms/concurrentMarkSweepGeneration.inline.hpp" +#include "gc/cms/concurrentMarkSweepThread.hpp" +#include "gc/shared/blockOffsetTable.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/liveRange.hpp" +#include "gc/shared/space.inline.hpp" +#include "gc/shared/spaceDecorator.hpp" #include "memory/allocation.inline.hpp" -#include "memory/blockOffsetTable.inline.hpp" -#include "memory/genCollectedHeap.hpp" #include "memory/resourceArea.hpp" -#include "memory/space.inline.hpp" #include "memory/universe.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/globals.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp b/hotspot/src/share/vm/gc/cms/compactibleFreeListSpace.hpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp rename to hotspot/src/share/vm/gc/cms/compactibleFreeListSpace.hpp index 72b0e9e8564..0e4bf630e65 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp +++ b/hotspot/src/share/vm/gc/cms/compactibleFreeListSpace.hpp @@ -22,15 +22,15 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_COMPACTIBLEFREELISTSPACE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_COMPACTIBLEFREELISTSPACE_HPP +#ifndef SHARE_VM_GC_CMS_COMPACTIBLEFREELISTSPACE_HPP +#define SHARE_VM_GC_CMS_COMPACTIBLEFREELISTSPACE_HPP -#include "gc_implementation/concurrentMarkSweep/adaptiveFreeList.hpp" -#include "gc_implementation/concurrentMarkSweep/promotionInfo.hpp" +#include "gc/cms/adaptiveFreeList.hpp" +#include "gc/cms/promotionInfo.hpp" +#include "gc/shared/blockOffsetTable.hpp" +#include "gc/shared/space.hpp" #include "memory/binaryTreeDictionary.hpp" -#include "memory/blockOffsetTable.hpp" #include "memory/freeList.hpp" -#include "memory/space.hpp" // Classes in support of keeping track of promotions into a non-Contiguous // space, in this case a CompactibleFreeListSpace. @@ -720,4 +720,4 @@ size_t PromotionInfo::refillSize() const { return CompactibleFreeListSpace::adjustObjectSize(sz); } -#endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_COMPACTIBLEFREELISTSPACE_HPP +#endif // SHARE_VM_GC_CMS_COMPACTIBLEFREELISTSPACE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp b/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp rename to hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp index 5c056b07361..64d188375ba 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp +++ b/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp @@ -27,34 +27,35 @@ #include "classfile/stringTable.hpp" #include "classfile/systemDictionary.hpp" #include "code/codeCache.hpp" -#include "gc_implementation/shared/adaptiveSizePolicy.hpp" -#include "gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.hpp" -#include "gc_implementation/concurrentMarkSweep/cmsOopClosures.inline.hpp" -#include "gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp" -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.inline.hpp" -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp" -#include "gc_implementation/concurrentMarkSweep/vmCMSOperations.hpp" -#include "gc_implementation/parNew/parNewGeneration.hpp" -#include "gc_implementation/shared/collectorCounters.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/gcTraceTime.hpp" -#include "gc_implementation/shared/isGCActiveMark.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/cms/cmsCollectorPolicy.hpp" +#include "gc/cms/cmsOopClosures.inline.hpp" +#include "gc/cms/compactibleFreeListSpace.hpp" +#include "gc/cms/concurrentMarkSweepGeneration.inline.hpp" +#include "gc/cms/concurrentMarkSweepThread.hpp" +#include "gc/cms/parNewGeneration.hpp" +#include "gc/cms/vmCMSOperations.hpp" +#include "gc/serial/genMarkSweep.hpp" +#include "gc/serial/tenuredGeneration.hpp" +#include "gc/shared/adaptiveSizePolicy.hpp" +#include "gc/shared/cardGeneration.inline.hpp" +#include "gc/shared/cardTableRS.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/collectorCounters.hpp" +#include "gc/shared/collectorPolicy.hpp" +#include "gc/shared/gcLocker.inline.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/gcTraceTime.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/genOopClosures.inline.hpp" +#include "gc/shared/isGCActiveMark.hpp" +#include "gc/shared/referencePolicy.hpp" +#include "gc/shared/strongRootsScope.hpp" +#include "gc/shared/taskqueue.inline.hpp" #include "memory/allocation.hpp" -#include "memory/cardGeneration.inline.hpp" -#include "memory/cardTableRS.hpp" -#include "memory/collectorPolicy.hpp" -#include "memory/gcLocker.inline.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/genMarkSweep.hpp" -#include "memory/genOopClosures.inline.hpp" #include "memory/iterator.inline.hpp" #include "memory/padded.hpp" -#include "memory/referencePolicy.hpp" #include "memory/resourceArea.hpp" -#include "memory/strongRootsScope.hpp" -#include "memory/tenuredGeneration.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "runtime/atomic.inline.hpp" @@ -66,7 +67,6 @@ #include "services/memoryService.hpp" #include "services/runtimeService.hpp" #include "utilities/stack.inline.hpp" -#include "utilities/taskqueue.inline.hpp" // statics CMSCollector* ConcurrentMarkSweepGeneration::_collector = NULL; diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp b/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.hpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp rename to hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.hpp index 0aa8b7f4dce..2f0191252ef 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp +++ b/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.hpp @@ -22,26 +22,26 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CONCURRENTMARKSWEEPGENERATION_HPP -#define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CONCURRENTMARKSWEEPGENERATION_HPP +#ifndef SHARE_VM_GC_CMS_CONCURRENTMARKSWEEPGENERATION_HPP +#define SHARE_VM_GC_CMS_CONCURRENTMARKSWEEPGENERATION_HPP -#include "gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp" -#include "gc_implementation/shared/gcHeapSummary.hpp" -#include "gc_implementation/shared/gSpaceCounters.hpp" -#include "gc_implementation/shared/gcStats.hpp" -#include "gc_implementation/shared/gcWhen.hpp" -#include "gc_implementation/shared/generationCounters.hpp" -#include "memory/cardGeneration.hpp" +#include "gc/cms/cmsOopClosures.hpp" +#include "gc/cms/gSpaceCounters.hpp" +#include "gc/cms/yieldingWorkgroup.hpp" +#include "gc/shared/cardGeneration.hpp" +#include "gc/shared/gcHeapSummary.hpp" +#include "gc/shared/gcStats.hpp" +#include "gc/shared/gcWhen.hpp" +#include "gc/shared/generationCounters.hpp" +#include "gc/shared/space.hpp" +#include "gc/shared/taskqueue.hpp" #include "memory/freeBlockDictionary.hpp" #include "memory/iterator.hpp" -#include "memory/space.hpp" #include "memory/virtualspace.hpp" #include "runtime/mutexLocker.hpp" #include "services/memoryService.hpp" #include "utilities/bitMap.hpp" #include "utilities/stack.hpp" -#include "utilities/taskqueue.hpp" -#include "utilities/yieldingWorkgroup.hpp" // ConcurrentMarkSweepGeneration is in support of a concurrent // mark-sweep old generation in the Detlefs-Printezis--Boehm-Demers-Schenker @@ -1813,4 +1813,4 @@ class TraceCMSMemoryManagerStats : public TraceMemoryManagerStats { }; -#endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CONCURRENTMARKSWEEPGENERATION_HPP +#endif // SHARE_VM_GC_CMS_CONCURRENTMARKSWEEPGENERATION_HPP diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.inline.hpp b/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.inline.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.inline.hpp rename to hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.inline.hpp index bc552f78420..e703c1a75b2 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.inline.hpp +++ b/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,16 +22,16 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CONCURRENTMARKSWEEPGENERATION_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CONCURRENTMARKSWEEPGENERATION_INLINE_HPP +#ifndef SHARE_VM_GC_CMS_CONCURRENTMARKSWEEPGENERATION_INLINE_HPP +#define SHARE_VM_GC_CMS_CONCURRENTMARKSWEEPGENERATION_INLINE_HPP -#include "gc_implementation/concurrentMarkSweep/cmsLockVerifier.hpp" -#include "gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp" -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp" -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp" -#include "gc_implementation/parNew/parNewGeneration.hpp" -#include "gc_implementation/shared/gcUtil.hpp" -#include "memory/genCollectedHeap.hpp" +#include "gc/cms/cmsLockVerifier.hpp" +#include "gc/cms/compactibleFreeListSpace.hpp" +#include "gc/cms/concurrentMarkSweepGeneration.hpp" +#include "gc/cms/concurrentMarkSweepThread.hpp" +#include "gc/cms/parNewGeneration.hpp" +#include "gc/shared/gcUtil.hpp" +#include "gc/shared/genCollectedHeap.hpp" inline void CMSBitMap::clear_all() { assert_locked(); @@ -459,4 +459,4 @@ inline void ModUnionClosurePar::do_MemRegion(MemRegion mr) { _t->par_mark_range(mr2); } -#endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CONCURRENTMARKSWEEPGENERATION_INLINE_HPP +#endif // SHARE_VM_GC_CMS_CONCURRENTMARKSWEEPGENERATION_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.cpp b/hotspot/src/share/vm/gc/cms/concurrentMarkSweepThread.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.cpp rename to hotspot/src/share/vm/gc/cms/concurrentMarkSweepThread.cpp index 41b9e377453..8dc834dddb3 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.cpp +++ b/hotspot/src/share/vm/gc/cms/concurrentMarkSweepThread.cpp @@ -24,9 +24,9 @@ #include "precompiled.hpp" #include "classfile/systemDictionary.hpp" -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.inline.hpp" -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp" -#include "memory/genCollectedHeap.hpp" +#include "gc/cms/concurrentMarkSweepGeneration.inline.hpp" +#include "gc/cms/concurrentMarkSweepThread.hpp" +#include "gc/shared/genCollectedHeap.hpp" #include "oops/instanceRefKlass.hpp" #include "oops/oop.inline.hpp" #include "runtime/init.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp b/hotspot/src/share/vm/gc/cms/concurrentMarkSweepThread.hpp similarity index 93% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp rename to hotspot/src/share/vm/gc/cms/concurrentMarkSweepThread.hpp index 2c41ffeba7f..807284c0edc 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp +++ b/hotspot/src/share/vm/gc/cms/concurrentMarkSweepThread.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CONCURRENTMARKSWEEPTHREAD_HPP -#define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CONCURRENTMARKSWEEPTHREAD_HPP +#ifndef SHARE_VM_GC_CMS_CONCURRENTMARKSWEEPTHREAD_HPP +#define SHARE_VM_GC_CMS_CONCURRENTMARKSWEEPTHREAD_HPP -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp" -#include "gc_implementation/shared/concurrentGCThread.hpp" +#include "gc/cms/concurrentMarkSweepGeneration.hpp" +#include "gc/shared/concurrentGCThread.hpp" #include "runtime/thread.hpp" class ConcurrentMarkSweepGeneration; @@ -178,4 +178,4 @@ class CMSLoopCountWarn: public StackObj { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CONCURRENTMARKSWEEPTHREAD_HPP +#endif // SHARE_VM_GC_CMS_CONCURRENTMARKSWEEPTHREAD_HPP diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.cpp b/hotspot/src/share/vm/gc/cms/freeChunk.cpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.cpp rename to hotspot/src/share/vm/gc/cms/freeChunk.cpp index e58391acfae..bed57245a5a 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.cpp +++ b/hotspot/src/share/vm/gc/cms/freeChunk.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/concurrentMarkSweep/freeChunk.hpp" +#include "gc/cms/freeChunk.hpp" #include "memory/freeBlockDictionary.hpp" #include "utilities/copy.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.hpp b/hotspot/src/share/vm/gc/cms/freeChunk.hpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.hpp rename to hotspot/src/share/vm/gc/cms/freeChunk.hpp index bfabe4bc2cd..96405475489 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.hpp +++ b/hotspot/src/share/vm/gc/cms/freeChunk.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_FREECHUNK_HPP -#define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_FREECHUNK_HPP +#ifndef SHARE_VM_GC_CMS_FREECHUNK_HPP +#define SHARE_VM_GC_CMS_FREECHUNK_HPP #include "memory/allocation.hpp" #include "memory/memRegion.hpp" @@ -148,4 +148,4 @@ class FreeChunk VALUE_OBJ_CLASS_SPEC { extern size_t MinChunkSize; -#endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_FREECHUNK_HPP +#endif // SHARE_VM_GC_CMS_FREECHUNK_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.cpp b/hotspot/src/share/vm/gc/cms/gSpaceCounters.cpp similarity index 93% rename from hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.cpp rename to hotspot/src/share/vm/gc/cms/gSpaceCounters.cpp index b1ae78d3087..dce1f39f6d5 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.cpp +++ b/hotspot/src/share/vm/gc/cms/gSpaceCounters.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,12 +23,10 @@ */ #include "precompiled.hpp" -#include "utilities/macros.hpp" -#if INCLUDE_ALL_GCS -#include "gc_implementation/shared/gSpaceCounters.hpp" -#include "memory/generation.hpp" +#include "gc/cms/gSpaceCounters.hpp" +#include "gc/shared/generation.hpp" #include "memory/resourceArea.hpp" -#endif // INCLUDE_ALL_GCS +#include "utilities/macros.hpp" GSpaceCounters::GSpaceCounters(const char* name, int ordinal, size_t max_size, Generation* g, GenerationCounters* gc, diff --git a/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.hpp b/hotspot/src/share/vm/gc/cms/gSpaceCounters.hpp similarity index 88% rename from hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.hpp rename to hotspot/src/share/vm/gc/cms/gSpaceCounters.hpp index 3e138b3a41a..64ae6c60b26 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.hpp +++ b/hotspot/src/share/vm/gc/cms/gSpaceCounters.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,15 +22,13 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_GSPACECOUNTERS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_GSPACECOUNTERS_HPP +#ifndef SHARE_VM_GC_CMS_GSPACECOUNTERS_HPP +#define SHARE_VM_GC_CMS_GSPACECOUNTERS_HPP -#include "utilities/macros.hpp" -#if INCLUDE_ALL_GCS -#include "gc_implementation/shared/generationCounters.hpp" -#include "memory/generation.hpp" +#include "gc/shared/generation.hpp" +#include "gc/shared/generationCounters.hpp" #include "runtime/perfData.hpp" -#endif // INCLUDE_ALL_GCS +#include "utilities/macros.hpp" // A GSpaceCounter is a holder class for performance counters // that track a space; @@ -111,4 +109,4 @@ class GenerationUsedHelper : public PerfLongSampleHelper { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_GSPACECOUNTERS_HPP +#endif // SHARE_VM_GC_CMS_GSPACECOUNTERS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp b/hotspot/src/share/vm/gc/cms/parCardTableModRefBS.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp rename to hotspot/src/share/vm/gc/cms/parCardTableModRefBS.cpp index 24e7564d941..6d838b28816 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp +++ b/hotspot/src/share/vm/gc/cms/parCardTableModRefBS.cpp @@ -23,12 +23,12 @@ */ #include "precompiled.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/cardTableModRefBS.hpp" +#include "gc/shared/cardTableRS.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/space.inline.hpp" #include "memory/allocation.inline.hpp" -#include "memory/cardTableModRefBS.hpp" -#include "memory/cardTableRS.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/space.inline.hpp" #include "memory/virtualspace.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp b/hotspot/src/share/vm/gc/cms/parNewGeneration.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp rename to hotspot/src/share/vm/gc/cms/parNewGeneration.cpp index 6c72f4c2d2f..3bed483338b 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp +++ b/hotspot/src/share/vm/gc/cms/parNewGeneration.cpp @@ -23,27 +23,29 @@ */ #include "precompiled.hpp" -#include "gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp" -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp" -#include "gc_implementation/parNew/parNewGeneration.hpp" -#include "gc_implementation/parNew/parOopClosures.inline.hpp" -#include "gc_implementation/shared/adaptiveSizePolicy.hpp" -#include "gc_implementation/shared/ageTable.hpp" -#include "gc_implementation/shared/copyFailedInfo.hpp" -#include "gc_implementation/shared/gcHeapSummary.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/gcTraceTime.hpp" -#include "gc_implementation/shared/plab.inline.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" -#include "memory/defNewGeneration.inline.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/genOopClosures.inline.hpp" -#include "memory/generation.hpp" -#include "memory/referencePolicy.hpp" +#include "gc/cms/compactibleFreeListSpace.hpp" +#include "gc/cms/concurrentMarkSweepGeneration.hpp" +#include "gc/cms/parNewGeneration.hpp" +#include "gc/cms/parOopClosures.inline.hpp" +#include "gc/serial/defNewGeneration.inline.hpp" +#include "gc/shared/adaptiveSizePolicy.hpp" +#include "gc/shared/ageTable.hpp" +#include "gc/shared/copyFailedInfo.hpp" +#include "gc/shared/gcHeapSummary.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/gcTraceTime.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/genOopClosures.inline.hpp" +#include "gc/shared/generation.hpp" +#include "gc/shared/plab.inline.hpp" +#include "gc/shared/referencePolicy.hpp" +#include "gc/shared/space.hpp" +#include "gc/shared/spaceDecorator.hpp" +#include "gc/shared/strongRootsScope.hpp" +#include "gc/shared/taskqueue.inline.hpp" +#include "gc/shared/workgroup.hpp" #include "memory/resourceArea.hpp" -#include "memory/strongRootsScope.hpp" -#include "memory/space.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" @@ -54,8 +56,6 @@ #include "utilities/copy.hpp" #include "utilities/globalDefinitions.hpp" #include "utilities/stack.inline.hpp" -#include "utilities/taskqueue.inline.hpp" -#include "utilities/workgroup.hpp" #ifdef _MSC_VER #pragma warning( push ) diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp b/hotspot/src/share/vm/gc/cms/parNewGeneration.hpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp rename to hotspot/src/share/vm/gc/cms/parNewGeneration.hpp index 572d48ed5e6..560d91f7c85 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp +++ b/hotspot/src/share/vm/gc/cms/parNewGeneration.hpp @@ -22,16 +22,16 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARNEW_PARNEWGENERATION_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARNEW_PARNEWGENERATION_HPP +#ifndef SHARE_VM_GC_CMS_PARNEWGENERATION_HPP +#define SHARE_VM_GC_CMS_PARNEWGENERATION_HPP -#include "gc_implementation/parNew/parOopClosures.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/plab.hpp" -#include "gc_implementation/shared/copyFailedInfo.hpp" -#include "memory/defNewGeneration.hpp" +#include "gc/cms/parOopClosures.hpp" +#include "gc/serial/defNewGeneration.hpp" +#include "gc/shared/copyFailedInfo.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/plab.hpp" +#include "gc/shared/taskqueue.hpp" #include "memory/padded.hpp" -#include "utilities/taskqueue.hpp" class ChunkArray; class ParScanWithoutBarrierClosure; @@ -422,4 +422,4 @@ class ParNewGeneration: public DefNewGeneration { static oop real_forwardee(oop obj); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARNEW_PARNEWGENERATION_HPP +#endif // SHARE_VM_GC_CMS_PARNEWGENERATION_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.cpp b/hotspot/src/share/vm/gc/cms/parOopClosures.cpp similarity index 91% rename from hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.cpp rename to hotspot/src/share/vm/gc/cms/parOopClosures.cpp index 4b3f3f26adb..35f0e7e9139 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.cpp +++ b/hotspot/src/share/vm/gc/cms/parOopClosures.cpp @@ -23,9 +23,9 @@ */ #include "precompiled.hpp" +#include "gc/cms/parOopClosures.inline.hpp" +#include "gc/shared/specialized_oop_closures.hpp" #include "memory/iterator.inline.hpp" -#include "memory/specialized_oop_closures.hpp" -#include "gc_implementation/parNew/parOopClosures.inline.hpp" // Generate ParNew specialized oop_oop_iterate functions. SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_P(ALL_KLASS_OOP_OOP_ITERATE_DEFN); diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.hpp b/hotspot/src/share/vm/gc/cms/parOopClosures.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.hpp rename to hotspot/src/share/vm/gc/cms/parOopClosures.hpp index 00b865f2a35..73132650a5a 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.hpp +++ b/hotspot/src/share/vm/gc/cms/parOopClosures.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARNEW_PAROOPCLOSURES_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARNEW_PAROOPCLOSURES_HPP +#ifndef SHARE_VM_GC_CMS_PAROOPCLOSURES_HPP +#define SHARE_VM_GC_CMS_PAROOPCLOSURES_HPP -#include "memory/genOopClosures.hpp" +#include "gc/shared/genOopClosures.hpp" #include "memory/padded.hpp" // Closures for ParNewGeneration @@ -148,4 +148,4 @@ class ParEvacuateFollowersClosure: public VoidClosure { virtual void do_void(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARNEW_PAROOPCLOSURES_HPP +#endif // SHARE_VM_GC_CMS_PAROOPCLOSURES_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.inline.hpp b/hotspot/src/share/vm/gc/cms/parOopClosures.inline.hpp similarity index 93% rename from hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.inline.hpp rename to hotspot/src/share/vm/gc/cms/parOopClosures.inline.hpp index 1c5d8f6e33f..658d3623db0 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.inline.hpp +++ b/hotspot/src/share/vm/gc/cms/parOopClosures.inline.hpp @@ -22,14 +22,14 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARNEW_PAROOPCLOSURES_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARNEW_PAROOPCLOSURES_INLINE_HPP +#ifndef SHARE_VM_GC_CMS_PAROOPCLOSURES_INLINE_HPP +#define SHARE_VM_GC_CMS_PAROOPCLOSURES_INLINE_HPP -#include "gc_implementation/parNew/parNewGeneration.hpp" -#include "gc_implementation/parNew/parOopClosures.hpp" -#include "memory/cardTableRS.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/genOopClosures.inline.hpp" +#include "gc/cms/parNewGeneration.hpp" +#include "gc/cms/parOopClosures.hpp" +#include "gc/shared/cardTableRS.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/genOopClosures.inline.hpp" template inline void ParScanWeakRefClosure::do_oop_work(T* p) { assert (!oopDesc::is_null(*p), "null weak reference?"); @@ -143,4 +143,4 @@ inline void ParScanWithBarrierClosure::do_oop_nv(narrowOop* p) { ParScanClosure: inline void ParScanWithoutBarrierClosure::do_oop_nv(oop* p) { ParScanClosure::do_oop_work(p, false, false); } inline void ParScanWithoutBarrierClosure::do_oop_nv(narrowOop* p) { ParScanClosure::do_oop_work(p, false, false); } -#endif // SHARE_VM_GC_IMPLEMENTATION_PARNEW_PAROOPCLOSURES_INLINE_HPP +#endif // SHARE_VM_GC_CMS_PAROOPCLOSURES_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.cpp b/hotspot/src/share/vm/gc/cms/promotionInfo.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.cpp rename to hotspot/src/share/vm/gc/cms/promotionInfo.cpp index 5c1d2650a19..4e5d8ea9411 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.cpp +++ b/hotspot/src/share/vm/gc/cms/promotionInfo.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,9 +23,9 @@ */ #include "precompiled.hpp" -#include "memory/genOopClosures.hpp" -#include "gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp" -#include "gc_implementation/concurrentMarkSweep/promotionInfo.hpp" +#include "gc/cms/compactibleFreeListSpace.hpp" +#include "gc/cms/promotionInfo.hpp" +#include "gc/shared/genOopClosures.hpp" #include "oops/markOop.inline.hpp" #include "oops/oop.inline.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.hpp b/hotspot/src/share/vm/gc/cms/promotionInfo.hpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.hpp rename to hotspot/src/share/vm/gc/cms/promotionInfo.hpp index 72e0ba3f70a..a58bcb74038 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.hpp +++ b/hotspot/src/share/vm/gc/cms/promotionInfo.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_PROMOTIONINFO_HPP -#define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_PROMOTIONINFO_HPP +#ifndef SHARE_VM_GC_CMS_PROMOTIONINFO_HPP +#define SHARE_VM_GC_CMS_PROMOTIONINFO_HPP -#include "gc_implementation/concurrentMarkSweep/freeChunk.hpp" +#include "gc/cms/freeChunk.hpp" #include "memory/allocation.hpp" // Forward declarations @@ -211,4 +211,4 @@ class PromotionInfo VALUE_OBJ_CLASS_SPEC { }; -#endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_PROMOTIONINFO_HPP +#endif // SHARE_VM_GC_CMS_PROMOTIONINFO_HPP diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp b/hotspot/src/share/vm/gc/cms/vmCMSOperations.cpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp rename to hotspot/src/share/vm/gc/cms/vmCMSOperations.cpp index 423c21ca1ff..539aef1f569 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp +++ b/hotspot/src/share/vm/gc/cms/vmCMSOperations.cpp @@ -23,13 +23,13 @@ */ #include "precompiled.hpp" -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.inline.hpp" -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp" -#include "gc_implementation/concurrentMarkSweep/vmCMSOperations.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTraceTime.hpp" -#include "gc_implementation/shared/isGCActiveMark.hpp" -#include "memory/gcLocker.inline.hpp" +#include "gc/cms/concurrentMarkSweepGeneration.inline.hpp" +#include "gc/cms/concurrentMarkSweepThread.hpp" +#include "gc/cms/vmCMSOperations.hpp" +#include "gc/shared/gcLocker.inline.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTraceTime.hpp" +#include "gc/shared/isGCActiveMark.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/os.hpp" #include "utilities/dtrace.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.hpp b/hotspot/src/share/vm/gc/cms/vmCMSOperations.hpp similarity index 92% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.hpp rename to hotspot/src/share/vm/gc/cms/vmCMSOperations.hpp index 70de0e5f9c8..da3ee8670f6 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.hpp +++ b/hotspot/src/share/vm/gc/cms/vmCMSOperations.hpp @@ -22,12 +22,12 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_VMCMSOPERATIONS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_VMCMSOPERATIONS_HPP +#ifndef SHARE_VM_GC_CMS_VMCMSOPERATIONS_HPP +#define SHARE_VM_GC_CMS_VMCMSOPERATIONS_HPP -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp" -#include "gc_implementation/shared/vmGCOperations.hpp" -#include "gc_interface/gcCause.hpp" +#include "gc/cms/concurrentMarkSweepGeneration.hpp" +#include "gc/shared/gcCause.hpp" +#include "gc/shared/vmGCOperations.hpp" #include "runtime/vm_operations.hpp" // The VM_CMS_Operation is slightly different from @@ -145,4 +145,4 @@ class VM_GenCollectFullConcurrent: public VM_GC_Operation { virtual bool evaluate_at_safepoint() const; }; -#endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_VMCMSOPERATIONS_HPP +#endif // SHARE_VM_GC_CMS_VMCMSOPERATIONS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp b/hotspot/src/share/vm/gc/cms/vmStructs_cms.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp rename to hotspot/src/share/vm/gc/cms/vmStructs_cms.hpp index 2a0a563d5f4..0164b4c502c 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp +++ b/hotspot/src/share/vm/gc/cms/vmStructs_cms.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_VMSTRUCTS_CMS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_VMSTRUCTS_CMS_HPP +#ifndef SHARE_VM_GC_CMS_VMSTRUCTS_CMS_HPP +#define SHARE_VM_GC_CMS_VMSTRUCTS_CMS_HPP #define VM_STRUCTS_CMS(nonstatic_field, \ volatile_nonstatic_field, \ @@ -68,4 +68,4 @@ #define VM_INT_CONSTANTS_CMS(declare_constant) \ declare_constant(Generation::ConcurrentMarkSweep) \ -#endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_VMSTRUCTS_CMS_HPP +#endif // SHARE_VM_GC_CMS_VMSTRUCTS_CMS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parNew/vmStructs_parNew.hpp b/hotspot/src/share/vm/gc/cms/vmStructs_parNew.hpp similarity index 83% rename from hotspot/src/share/vm/gc_implementation/parNew/vmStructs_parNew.hpp rename to hotspot/src/share/vm/gc/cms/vmStructs_parNew.hpp index c07f084c0e4..289d90458ea 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/vmStructs_parNew.hpp +++ b/hotspot/src/share/vm/gc/cms/vmStructs_parNew.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARNEW_VMSTRUCTS_PARNEW_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARNEW_VMSTRUCTS_PARNEW_HPP +#ifndef SHARE_VM_GC_CMS_VMSTRUCTS_PARNEW_HPP +#define SHARE_VM_GC_CMS_VMSTRUCTS_PARNEW_HPP #define VM_TYPES_PARNEW(declare_type) \ declare_type(ParNewGeneration, DefNewGeneration) @@ -31,4 +31,4 @@ #define VM_INT_CONSTANTS_PARNEW(declare_constant) \ declare_constant(Generation::ParNew) -#endif // SHARE_VM_GC_IMPLEMENTATION_PARNEW_VMSTRUCTS_PARNEW_HPP +#endif // SHARE_VM_GC_CMS_VMSTRUCTS_PARNEW_HPP diff --git a/hotspot/src/share/vm/utilities/yieldingWorkgroup.cpp b/hotspot/src/share/vm/gc/cms/yieldingWorkgroup.cpp similarity index 99% rename from hotspot/src/share/vm/utilities/yieldingWorkgroup.cpp rename to hotspot/src/share/vm/gc/cms/yieldingWorkgroup.cpp index 1ea33e643d0..29eb4dbf9c1 100644 --- a/hotspot/src/share/vm/utilities/yieldingWorkgroup.cpp +++ b/hotspot/src/share/vm/gc/cms/yieldingWorkgroup.cpp @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" +#include "gc/cms/yieldingWorkgroup.hpp" #include "utilities/macros.hpp" -#include "utilities/yieldingWorkgroup.hpp" // Forward declaration of classes declared here. diff --git a/hotspot/src/share/vm/utilities/yieldingWorkgroup.hpp b/hotspot/src/share/vm/gc/cms/yieldingWorkgroup.hpp similarity index 96% rename from hotspot/src/share/vm/utilities/yieldingWorkgroup.hpp rename to hotspot/src/share/vm/gc/cms/yieldingWorkgroup.hpp index 98d8f438ea4..2696ce56867 100644 --- a/hotspot/src/share/vm/utilities/yieldingWorkgroup.hpp +++ b/hotspot/src/share/vm/gc/cms/yieldingWorkgroup.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_UTILITIES_YIELDINGWORKGROUP_HPP -#define SHARE_VM_UTILITIES_YIELDINGWORKGROUP_HPP +#ifndef SHARE_VM_GC_CMS_YIELDINGWORKGROUP_HPP +#define SHARE_VM_GC_CMS_YIELDINGWORKGROUP_HPP +#include "gc/shared/workgroup.hpp" #include "utilities/macros.hpp" -#include "utilities/workgroup.hpp" // Forward declarations class YieldingFlexibleWorkGang; @@ -211,4 +211,4 @@ private: void reset(); // NYI }; -#endif // SHARE_VM_UTILITIES_YIELDINGWORKGROUP_HPP +#endif // SHARE_VM_GC_CMS_YIELDINGWORKGROUP_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/bufferingOopClosure.cpp b/hotspot/src/share/vm/gc/g1/bufferingOopClosure.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/g1/bufferingOopClosure.cpp rename to hotspot/src/share/vm/gc/g1/bufferingOopClosure.cpp index d1edd60da9d..1985ee31cc0 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/bufferingOopClosure.cpp +++ b/hotspot/src/share/vm/gc/g1/bufferingOopClosure.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/bufferingOopClosure.hpp" +#include "gc/g1/bufferingOopClosure.hpp" #include "memory/iterator.hpp" #include "utilities/debug.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/bufferingOopClosure.hpp b/hotspot/src/share/vm/gc/g1/bufferingOopClosure.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/g1/bufferingOopClosure.hpp rename to hotspot/src/share/vm/gc/g1/bufferingOopClosure.hpp index ffdc69dfa5c..038aba6f744 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/bufferingOopClosure.hpp +++ b/hotspot/src/share/vm/gc/g1/bufferingOopClosure.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_BUFFERINGOOPCLOSURE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_BUFFERINGOOPCLOSURE_HPP +#ifndef SHARE_VM_GC_G1_BUFFERINGOOPCLOSURE_HPP +#define SHARE_VM_GC_G1_BUFFERINGOOPCLOSURE_HPP #include "memory/iterator.hpp" #include "oops/oopsHierarchy.hpp" @@ -141,4 +141,4 @@ public: _closure_app_seconds(0.0) { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_BUFFERINGOOPCLOSURE_HPP +#endif // SHARE_VM_GC_G1_BUFFERINGOOPCLOSURE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.cpp b/hotspot/src/share/vm/gc/g1/collectionSetChooser.cpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.cpp rename to hotspot/src/share/vm/gc/g1/collectionSetChooser.cpp index 51825bf4243..e9528320b47 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.cpp +++ b/hotspot/src/share/vm/gc/g1/collectionSetChooser.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,11 +23,11 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/collectionSetChooser.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1CollectorPolicy.hpp" -#include "gc_implementation/g1/g1ErgoVerbose.hpp" -#include "memory/space.inline.hpp" +#include "gc/g1/collectionSetChooser.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1CollectorPolicy.hpp" +#include "gc/g1/g1ErgoVerbose.hpp" +#include "gc/shared/space.inline.hpp" #include "runtime/atomic.inline.hpp" // Even though we don't use the GC efficiency in our heuristics as diff --git a/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp b/hotspot/src/share/vm/gc/g1/collectionSetChooser.hpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp rename to hotspot/src/share/vm/gc/g1/collectionSetChooser.hpp index bbe32472cbf..4323652494c 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp +++ b/hotspot/src/share/vm/gc/g1/collectionSetChooser.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_COLLECTIONSETCHOOSER_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_COLLECTIONSETCHOOSER_HPP +#ifndef SHARE_VM_GC_G1_COLLECTIONSETCHOOSER_HPP +#define SHARE_VM_GC_G1_COLLECTIONSETCHOOSER_HPP -#include "gc_implementation/g1/heapRegion.hpp" +#include "gc/g1/heapRegion.hpp" #include "utilities/growableArray.hpp" class CollectionSetChooser: public CHeapObj { @@ -192,5 +192,5 @@ public: bool should_add(HeapRegion* hr) { return _chooser->should_add(hr); } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_COLLECTIONSETCHOOSER_HPP +#endif // SHARE_VM_GC_G1_COLLECTIONSETCHOOSER_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp b/hotspot/src/share/vm/gc/g1/concurrentG1Refine.cpp similarity index 93% rename from hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp rename to hotspot/src/share/vm/gc/g1/concurrentG1Refine.cpp index 635781b1424..aa8174860ba 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp +++ b/hotspot/src/share/vm/gc/g1/concurrentG1Refine.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,10 +23,10 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/concurrentG1Refine.hpp" -#include "gc_implementation/g1/concurrentG1RefineThread.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1HotCardCache.hpp" +#include "gc/g1/concurrentG1Refine.hpp" +#include "gc/g1/concurrentG1RefineThread.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1HotCardCache.hpp" #include "runtime/java.hpp" ConcurrentG1Refine::ConcurrentG1Refine(G1CollectedHeap* g1h, CardTableEntryClosure* refine_closure) : diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp b/hotspot/src/share/vm/gc/g1/concurrentG1Refine.hpp similarity index 92% rename from hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp rename to hotspot/src/share/vm/gc/g1/concurrentG1Refine.hpp index 7f77163818c..ce0e13eaba7 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp +++ b/hotspot/src/share/vm/gc/g1/concurrentG1Refine.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTG1REFINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTG1REFINE_HPP +#ifndef SHARE_VM_GC_G1_CONCURRENTG1REFINE_HPP +#define SHARE_VM_GC_G1_CONCURRENTG1REFINE_HPP -#include "gc_implementation/g1/g1HotCardCache.hpp" +#include "gc/g1/g1HotCardCache.hpp" #include "memory/allocation.hpp" #include "runtime/thread.hpp" #include "utilities/globalDefinitions.hpp" @@ -109,4 +109,4 @@ class ConcurrentG1Refine: public CHeapObj { G1HotCardCache* hot_card_cache() { return &_hot_card_cache; } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTG1REFINE_HPP +#endif // SHARE_VM_GC_G1_CONCURRENTG1REFINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1RefineThread.cpp b/hotspot/src/share/vm/gc/g1/concurrentG1RefineThread.cpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/g1/concurrentG1RefineThread.cpp rename to hotspot/src/share/vm/gc/g1/concurrentG1RefineThread.cpp index 159882b7cc2..7a1c4e46092 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1RefineThread.cpp +++ b/hotspot/src/share/vm/gc/g1/concurrentG1RefineThread.cpp @@ -23,10 +23,10 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/concurrentG1Refine.hpp" -#include "gc_implementation/g1/concurrentG1RefineThread.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1CollectorPolicy.hpp" +#include "gc/g1/concurrentG1Refine.hpp" +#include "gc/g1/concurrentG1RefineThread.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1CollectorPolicy.hpp" #include "memory/resourceArea.hpp" #include "runtime/handles.inline.hpp" #include "runtime/mutexLocker.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1RefineThread.hpp b/hotspot/src/share/vm/gc/g1/concurrentG1RefineThread.hpp similarity index 89% rename from hotspot/src/share/vm/gc_implementation/g1/concurrentG1RefineThread.hpp rename to hotspot/src/share/vm/gc/g1/concurrentG1RefineThread.hpp index 1e599aa335f..cbaf3c3d782 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1RefineThread.hpp +++ b/hotspot/src/share/vm/gc/g1/concurrentG1RefineThread.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTG1REFINETHREAD_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTG1REFINETHREAD_HPP +#ifndef SHARE_VM_GC_G1_CONCURRENTG1REFINETHREAD_HPP +#define SHARE_VM_GC_G1_CONCURRENTG1REFINETHREAD_HPP -#include "gc_implementation/shared/concurrentGCThread.hpp" +#include "gc/shared/concurrentGCThread.hpp" // Forward Decl. class CardTableEntryClosure; @@ -86,4 +86,4 @@ public: void stop(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTG1REFINETHREAD_HPP +#endif // SHARE_VM_GC_G1_CONCURRENTG1REFINETHREAD_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp b/hotspot/src/share/vm/gc/g1/concurrentMark.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp rename to hotspot/src/share/vm/gc/g1/concurrentMark.cpp index a6c95d383a4..6fd97a6d6bd 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp +++ b/hotspot/src/share/vm/gc/g1/concurrentMark.cpp @@ -26,35 +26,35 @@ #include "classfile/metadataOnStackMark.hpp" #include "classfile/symbolTable.hpp" #include "code/codeCache.hpp" -#include "gc_implementation/g1/concurrentMark.inline.hpp" -#include "gc_implementation/g1/concurrentMarkThread.inline.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1CollectorPolicy.hpp" -#include "gc_implementation/g1/g1ErgoVerbose.hpp" -#include "gc_implementation/g1/g1Log.hpp" -#include "gc_implementation/g1/g1OopClosures.inline.hpp" -#include "gc_implementation/g1/g1RemSet.hpp" -#include "gc_implementation/g1/g1StringDedup.hpp" -#include "gc_implementation/g1/heapRegion.inline.hpp" -#include "gc_implementation/g1/heapRegionManager.inline.hpp" -#include "gc_implementation/g1/heapRegionRemSet.hpp" -#include "gc_implementation/g1/heapRegionSet.inline.hpp" -#include "gc_implementation/shared/vmGCOperations.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/gcTraceTime.hpp" +#include "gc/g1/concurrentMark.inline.hpp" +#include "gc/g1/concurrentMarkThread.inline.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1CollectorPolicy.hpp" +#include "gc/g1/g1ErgoVerbose.hpp" +#include "gc/g1/g1Log.hpp" +#include "gc/g1/g1OopClosures.inline.hpp" +#include "gc/g1/g1RemSet.hpp" +#include "gc/g1/g1StringDedup.hpp" +#include "gc/g1/heapRegion.inline.hpp" +#include "gc/g1/heapRegionManager.inline.hpp" +#include "gc/g1/heapRegionRemSet.hpp" +#include "gc/g1/heapRegionSet.inline.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/gcTraceTime.hpp" +#include "gc/shared/genOopClosures.inline.hpp" +#include "gc/shared/referencePolicy.hpp" +#include "gc/shared/strongRootsScope.hpp" +#include "gc/shared/taskqueue.inline.hpp" +#include "gc/shared/vmGCOperations.hpp" #include "memory/allocation.hpp" -#include "memory/genOopClosures.inline.hpp" -#include "memory/referencePolicy.hpp" #include "memory/resourceArea.hpp" -#include "memory/strongRootsScope.hpp" #include "oops/oop.inline.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/java.hpp" -#include "runtime/atomic.inline.hpp" #include "runtime/prefetch.inline.hpp" #include "services/memTracker.hpp" -#include "utilities/taskqueue.inline.hpp" // Concurrent marking bit map wrapper diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp b/hotspot/src/share/vm/gc/g1/concurrentMark.hpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp rename to hotspot/src/share/vm/gc/g1/concurrentMark.hpp index ace60573da1..fdae961f333 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp +++ b/hotspot/src/share/vm/gc/g1/concurrentMark.hpp @@ -22,14 +22,14 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTMARK_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTMARK_HPP +#ifndef SHARE_VM_GC_G1_CONCURRENTMARK_HPP +#define SHARE_VM_GC_G1_CONCURRENTMARK_HPP #include "classfile/javaClasses.hpp" -#include "gc_implementation/g1/heapRegionSet.hpp" -#include "gc_implementation/g1/g1RegionToSpaceMapper.hpp" -#include "gc_implementation/shared/gcId.hpp" -#include "utilities/taskqueue.hpp" +#include "gc/g1/g1RegionToSpaceMapper.hpp" +#include "gc/g1/heapRegionSet.hpp" +#include "gc/shared/gcId.hpp" +#include "gc/shared/taskqueue.hpp" class G1CollectedHeap; class CMBitMap; @@ -1224,4 +1224,4 @@ public: ~G1PrintRegionLivenessInfoClosure(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTMARK_HPP +#endif // SHARE_VM_GC_G1_CONCURRENTMARK_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp b/hotspot/src/share/vm/gc/g1/concurrentMark.inline.hpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp rename to hotspot/src/share/vm/gc/g1/concurrentMark.inline.hpp index 61e627c21fa..13acd6baef8 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp +++ b/hotspot/src/share/vm/gc/g1/concurrentMark.inline.hpp @@ -22,12 +22,12 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTMARK_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTMARK_INLINE_HPP +#ifndef SHARE_VM_GC_G1_CONCURRENTMARK_INLINE_HPP +#define SHARE_VM_GC_G1_CONCURRENTMARK_INLINE_HPP -#include "gc_implementation/g1/concurrentMark.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "utilities/taskqueue.inline.hpp" +#include "gc/g1/concurrentMark.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/shared/taskqueue.inline.hpp" // Utility routine to set an exclusive range of cards on the given // card liveness bitmap @@ -404,4 +404,4 @@ inline void ConcurrentMark::grayRoot(oop obj, size_t word_size, } } -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTMARK_INLINE_HPP +#endif // SHARE_VM_GC_G1_CONCURRENTMARK_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp b/hotspot/src/share/vm/gc/g1/concurrentMarkThread.cpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp rename to hotspot/src/share/vm/gc/g1/concurrentMarkThread.cpp index 878bbc63691..3e1a08e9377 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp +++ b/hotspot/src/share/vm/gc/g1/concurrentMarkThread.cpp @@ -23,13 +23,13 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/concurrentMarkThread.inline.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1CollectorPolicy.hpp" -#include "gc_implementation/g1/g1Log.hpp" -#include "gc_implementation/g1/g1MMUTracker.hpp" -#include "gc_implementation/g1/vm_operations_g1.hpp" -#include "gc_implementation/shared/gcTrace.hpp" +#include "gc/g1/concurrentMarkThread.inline.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1CollectorPolicy.hpp" +#include "gc/g1/g1Log.hpp" +#include "gc/g1/g1MMUTracker.hpp" +#include "gc/g1/vm_operations_g1.hpp" +#include "gc/shared/gcTrace.hpp" #include "memory/resourceArea.hpp" #include "runtime/vmThread.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.hpp b/hotspot/src/share/vm/gc/g1/concurrentMarkThread.hpp similarity index 90% rename from hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.hpp rename to hotspot/src/share/vm/gc/g1/concurrentMarkThread.hpp index 237e022084b..b6e7fa75acb 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.hpp +++ b/hotspot/src/share/vm/gc/g1/concurrentMarkThread.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTMARKTHREAD_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTMARKTHREAD_HPP +#ifndef SHARE_VM_GC_G1_CONCURRENTMARKTHREAD_HPP +#define SHARE_VM_GC_G1_CONCURRENTMARKTHREAD_HPP -#include "gc_implementation/shared/concurrentGCThread.hpp" +#include "gc/shared/concurrentGCThread.hpp" // The Concurrent Mark GC Thread (could be several in the future). // This is copied from the Concurrent Mark Sweep GC Thread @@ -89,4 +89,4 @@ class ConcurrentMarkThread: public ConcurrentGCThread { void stop(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTMARKTHREAD_HPP +#endif // SHARE_VM_GC_G1_CONCURRENTMARKTHREAD_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.inline.hpp b/hotspot/src/share/vm/gc/g1/concurrentMarkThread.inline.hpp similarity index 77% rename from hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.inline.hpp rename to hotspot/src/share/vm/gc/g1/concurrentMarkThread.inline.hpp index 320daf9b8d3..e31475fedd6 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.inline.hpp +++ b/hotspot/src/share/vm/gc/g1/concurrentMarkThread.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTMARKTHREAD_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTMARKTHREAD_INLINE_HPP +#ifndef SHARE_VM_GC_G1_CONCURRENTMARKTHREAD_INLINE_HPP +#define SHARE_VM_GC_G1_CONCURRENTMARKTHREAD_INLINE_HPP -#include "gc_implementation/g1/concurrentMark.hpp" -#include "gc_implementation/g1/concurrentMarkThread.hpp" +#include "gc/g1/concurrentMark.hpp" +#include "gc/g1/concurrentMarkThread.hpp" // Total virtual time so far. inline double ConcurrentMarkThread::vtime_accum() { @@ -38,4 +38,4 @@ inline double ConcurrentMarkThread::vtime_mark_accum() { return _vtime_mark_accum + _cm->all_task_accum_vtime(); } -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_CONCURRENTMARKTHREAD_INLINE_HPP +#endif // SHARE_VM_GC_G1_CONCURRENTMARKTHREAD_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.cpp b/hotspot/src/share/vm/gc/g1/dirtyCardQueue.cpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.cpp rename to hotspot/src/share/vm/gc/g1/dirtyCardQueue.cpp index 32b1f763f25..94a60746a1f 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.cpp +++ b/hotspot/src/share/vm/gc/g1/dirtyCardQueue.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,14 +23,14 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/dirtyCardQueue.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/heapRegionRemSet.hpp" +#include "gc/g1/dirtyCardQueue.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/heapRegionRemSet.hpp" +#include "gc/shared/workgroup.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/safepoint.hpp" #include "runtime/thread.inline.hpp" -#include "utilities/workgroup.hpp" bool DirtyCardQueue::apply_closure(CardTableEntryClosure* cl, bool consume, diff --git a/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp b/hotspot/src/share/vm/gc/g1/dirtyCardQueue.hpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp rename to hotspot/src/share/vm/gc/g1/dirtyCardQueue.hpp index 27d287ea962..84a02b8f1d2 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp +++ b/hotspot/src/share/vm/gc/g1/dirtyCardQueue.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_DIRTYCARDQUEUE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_DIRTYCARDQUEUE_HPP +#ifndef SHARE_VM_GC_G1_DIRTYCARDQUEUE_HPP +#define SHARE_VM_GC_G1_DIRTYCARDQUEUE_HPP -#include "gc_implementation/g1/ptrQueue.hpp" +#include "gc/g1/ptrQueue.hpp" #include "memory/allocation.hpp" class FreeIdSet; @@ -172,4 +172,4 @@ public: }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_DIRTYCARDQUEUE_HPP +#endif // SHARE_VM_GC_G1_DIRTYCARDQUEUE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/evacuationInfo.hpp b/hotspot/src/share/vm/gc/g1/evacuationInfo.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/g1/evacuationInfo.hpp rename to hotspot/src/share/vm/gc/g1/evacuationInfo.hpp index 06bbefff93e..17677537835 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/evacuationInfo.hpp +++ b/hotspot/src/share/vm/gc/g1/evacuationInfo.hpp @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_EVACUATIONINFO_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_EVACUATIONINFO_HPP +#ifndef SHARE_VM_GC_G1_EVACUATIONINFO_HPP +#define SHARE_VM_GC_G1_EVACUATIONINFO_HPP #include "memory/allocation.hpp" @@ -78,4 +78,4 @@ public: uint regions_freed() { return _regions_freed; } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_EVACUATIONINFO_HPP +#endif // SHARE_VM_GC_G1_EVACUATIONINFO_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.cpp b/hotspot/src/share/vm/gc/g1/g1AllocRegion.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.cpp rename to hotspot/src/share/vm/gc/g1/g1AllocRegion.cpp index 697a4027577..ea5f98c6859 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.cpp +++ b/hotspot/src/share/vm/gc/g1/g1AllocRegion.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1AllocRegion.inline.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1AllocRegion.inline.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" #include "runtime/orderAccess.inline.hpp" G1CollectedHeap* G1AllocRegion::_g1h = NULL; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.hpp b/hotspot/src/share/vm/gc/g1/g1AllocRegion.hpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.hpp rename to hotspot/src/share/vm/gc/g1/g1AllocRegion.hpp index 2edc6545ce6..fe303a5a02e 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.hpp +++ b/hotspot/src/share/vm/gc/g1/g1AllocRegion.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1ALLOCREGION_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1ALLOCREGION_HPP +#ifndef SHARE_VM_GC_G1_G1ALLOCREGION_HPP +#define SHARE_VM_GC_G1_G1ALLOCREGION_HPP -#include "gc_implementation/g1/heapRegion.hpp" +#include "gc/g1/heapRegion.hpp" class G1CollectedHeap; @@ -233,4 +233,4 @@ public: } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1ALLOCREGION_HPP +#endif // SHARE_VM_GC_G1_G1ALLOCREGION_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.inline.hpp b/hotspot/src/share/vm/gc/g1/g1AllocRegion.inline.hpp similarity index 90% rename from hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.inline.hpp rename to hotspot/src/share/vm/gc/g1/g1AllocRegion.inline.hpp index 2f3529d3e3c..68b959f1dbe 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.inline.hpp +++ b/hotspot/src/share/vm/gc/g1/g1AllocRegion.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1ALLOCREGION_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1ALLOCREGION_INLINE_HPP +#ifndef SHARE_VM_GC_G1_G1ALLOCREGION_INLINE_HPP +#define SHARE_VM_GC_G1_G1ALLOCREGION_INLINE_HPP -#include "gc_implementation/g1/g1AllocRegion.hpp" -#include "gc_implementation/g1/heapRegion.inline.hpp" +#include "gc/g1/g1AllocRegion.hpp" +#include "gc/g1/heapRegion.inline.hpp" inline HeapWord* G1AllocRegion::allocate(HeapRegion* alloc_region, size_t word_size, @@ -104,4 +104,4 @@ inline HeapWord* G1AllocRegion::attempt_allocation_force(size_t word_size, return NULL; } -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1ALLOCREGION_INLINE_HPP +#endif // SHARE_VM_GC_G1_G1ALLOCREGION_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1AllocationContext.hpp b/hotspot/src/share/vm/gc/g1/g1AllocationContext.hpp similarity index 85% rename from hotspot/src/share/vm/gc_implementation/g1/g1AllocationContext.hpp rename to hotspot/src/share/vm/gc/g1/g1AllocationContext.hpp index c1089268ca6..b740b375573 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1AllocationContext.hpp +++ b/hotspot/src/share/vm/gc/g1/g1AllocationContext.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1ALLOCATIONCONTEXT_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1ALLOCATIONCONTEXT_HPP +#ifndef SHARE_VM_GC_G1_G1ALLOCATIONCONTEXT_HPP +#define SHARE_VM_GC_G1_G1ALLOCATIONCONTEXT_HPP #include "memory/allocation.hpp" @@ -49,4 +49,4 @@ public: inline bool available() { return false; } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1ALLOCATIONCONTEXT_HPP +#endif // SHARE_VM_GC_G1_G1ALLOCATIONCONTEXT_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1Allocator.cpp b/hotspot/src/share/vm/gc/g1/g1Allocator.cpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/g1/g1Allocator.cpp rename to hotspot/src/share/vm/gc/g1/g1Allocator.cpp index 16e0bcbcfe1..c3703ced3c1 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1Allocator.cpp +++ b/hotspot/src/share/vm/gc/g1/g1Allocator.cpp @@ -23,11 +23,11 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1Allocator.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1CollectorPolicy.hpp" -#include "gc_implementation/g1/heapRegion.inline.hpp" -#include "gc_implementation/g1/heapRegionSet.inline.hpp" +#include "gc/g1/g1Allocator.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1CollectorPolicy.hpp" +#include "gc/g1/heapRegion.inline.hpp" +#include "gc/g1/heapRegionSet.inline.hpp" void G1DefaultAllocator::init_mutator_alloc_region() { assert(_mutator_alloc_region.get() == NULL, "pre-condition"); diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1Allocator.hpp b/hotspot/src/share/vm/gc/g1/g1Allocator.hpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/g1/g1Allocator.hpp rename to hotspot/src/share/vm/gc/g1/g1Allocator.hpp index 2830a80ae91..be1d2215857 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1Allocator.hpp +++ b/hotspot/src/share/vm/gc/g1/g1Allocator.hpp @@ -22,14 +22,14 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1ALLOCATOR_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1ALLOCATOR_HPP +#ifndef SHARE_VM_GC_G1_G1ALLOCATOR_HPP +#define SHARE_VM_GC_G1_G1ALLOCATOR_HPP -#include "gc_implementation/g1/g1AllocationContext.hpp" -#include "gc_implementation/g1/g1AllocRegion.hpp" -#include "gc_implementation/g1/g1InCSetState.hpp" -#include "gc_implementation/shared/plab.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/g1/g1AllocRegion.hpp" +#include "gc/g1/g1AllocationContext.hpp" +#include "gc/g1/g1InCSetState.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/plab.hpp" class EvacuationInfo; @@ -269,4 +269,4 @@ public: virtual void waste(size_t& wasted, size_t& undo_wasted); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1ALLOCATOR_HPP +#endif // SHARE_VM_GC_G1_G1ALLOCATOR_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1Allocator_ext.cpp b/hotspot/src/share/vm/gc/g1/g1Allocator_ext.cpp similarity index 87% rename from hotspot/src/share/vm/gc_implementation/g1/g1Allocator_ext.cpp rename to hotspot/src/share/vm/gc/g1/g1Allocator_ext.cpp index e852b37f37b..3491ece62ab 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1Allocator_ext.cpp +++ b/hotspot/src/share/vm/gc/g1/g1Allocator_ext.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1Allocator.hpp" -#include "gc_implementation/g1/g1CollectedHeap.hpp" +#include "gc/g1/g1Allocator.hpp" +#include "gc/g1/g1CollectedHeap.hpp" G1Allocator* G1Allocator::create_allocator(G1CollectedHeap* g1h) { return new G1DefaultAllocator(g1h); diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1BiasedArray.cpp b/hotspot/src/share/vm/gc/g1/g1BiasedArray.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/g1/g1BiasedArray.cpp rename to hotspot/src/share/vm/gc/g1/g1BiasedArray.cpp index 8c5bef77122..a0b9901a01f 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1BiasedArray.cpp +++ b/hotspot/src/share/vm/gc/g1/g1BiasedArray.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1BiasedArray.hpp" +#include "gc/g1/g1BiasedArray.hpp" #include "memory/padded.inline.hpp" // Allocate a new array, generic version. diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1BiasedArray.hpp b/hotspot/src/share/vm/gc/g1/g1BiasedArray.hpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/g1/g1BiasedArray.hpp rename to hotspot/src/share/vm/gc/g1/g1BiasedArray.hpp index f7ec3e39f2d..45e6981f2b3 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1BiasedArray.hpp +++ b/hotspot/src/share/vm/gc/g1/g1BiasedArray.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1BIASEDARRAY_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1BIASEDARRAY_HPP +#ifndef SHARE_VM_GC_G1_G1BIASEDARRAY_HPP +#define SHARE_VM_GC_G1_G1BIASEDARRAY_HPP #include "memory/allocation.hpp" #include "utilities/debug.hpp" @@ -174,4 +174,4 @@ public: } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1BIASEDARRAY_HPP +#endif // SHARE_VM_GC_G1_G1BIASEDARRAY_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp b/hotspot/src/share/vm/gc/g1/g1BlockOffsetTable.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp rename to hotspot/src/share/vm/gc/g1/g1BlockOffsetTable.cpp index 1add1f34369..a37b2578364 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp +++ b/hotspot/src/share/vm/gc/g1/g1BlockOffsetTable.cpp @@ -23,10 +23,10 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1BlockOffsetTable.inline.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/heapRegion.hpp" -#include "memory/space.hpp" +#include "gc/g1/g1BlockOffsetTable.inline.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/heapRegion.hpp" +#include "gc/shared/space.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" #include "services/memTracker.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp b/hotspot/src/share/vm/gc/g1/g1BlockOffsetTable.hpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp rename to hotspot/src/share/vm/gc/g1/g1BlockOffsetTable.hpp index bda43d23140..6f10a94392c 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp +++ b/hotspot/src/share/vm/gc/g1/g1BlockOffsetTable.hpp @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1BLOCKOFFSETTABLE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1BLOCKOFFSETTABLE_HPP +#ifndef SHARE_VM_GC_G1_G1BLOCKOFFSETTABLE_HPP +#define SHARE_VM_GC_G1_G1BLOCKOFFSETTABLE_HPP -#include "gc_implementation/g1/g1RegionToSpaceMapper.hpp" +#include "gc/g1/g1RegionToSpaceMapper.hpp" #include "memory/memRegion.hpp" #include "memory/virtualspace.hpp" #include "utilities/globalDefinitions.hpp" @@ -377,4 +377,4 @@ class G1BlockOffsetArrayContigSpace: public G1BlockOffsetArray { virtual void print_on(outputStream* out) PRODUCT_RETURN; }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1BLOCKOFFSETTABLE_HPP +#endif // SHARE_VM_GC_G1_G1BLOCKOFFSETTABLE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.inline.hpp b/hotspot/src/share/vm/gc/g1/g1BlockOffsetTable.inline.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.inline.hpp rename to hotspot/src/share/vm/gc/g1/g1BlockOffsetTable.inline.hpp index 2d9a453a6f0..fd513bed1fb 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.inline.hpp +++ b/hotspot/src/share/vm/gc/g1/g1BlockOffsetTable.inline.hpp @@ -22,12 +22,12 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1BLOCKOFFSETTABLE_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1BLOCKOFFSETTABLE_INLINE_HPP +#ifndef SHARE_VM_GC_G1_G1BLOCKOFFSETTABLE_INLINE_HPP +#define SHARE_VM_GC_G1_G1BLOCKOFFSETTABLE_INLINE_HPP -#include "gc_implementation/g1/g1BlockOffsetTable.hpp" -#include "gc_implementation/g1/heapRegion.inline.hpp" -#include "memory/space.hpp" +#include "gc/g1/g1BlockOffsetTable.hpp" +#include "gc/g1/heapRegion.inline.hpp" +#include "gc/shared/space.hpp" inline HeapWord* G1BlockOffsetTable::block_start(const void* addr) { if (addr >= _bottom && addr < _end) { @@ -172,4 +172,4 @@ G1BlockOffsetArray::forward_to_block_containing_addr(HeapWord* q, return q; } -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1BLOCKOFFSETTABLE_INLINE_HPP +#endif // SHARE_VM_GC_G1_G1BLOCKOFFSETTABLE_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.cpp b/hotspot/src/share/vm/gc/g1/g1CardCounts.cpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.cpp rename to hotspot/src/share/vm/gc/g1/g1CardCounts.cpp index 440c7fbc256..0ed901aa242 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.cpp +++ b/hotspot/src/share/vm/gc/g1/g1CardCounts.cpp @@ -23,11 +23,11 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1CardCounts.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1CollectorPolicy.hpp" -#include "gc_implementation/g1/g1GCPhaseTimes.hpp" -#include "memory/cardTableModRefBS.hpp" +#include "gc/g1/g1CardCounts.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1CollectorPolicy.hpp" +#include "gc/g1/g1GCPhaseTimes.hpp" +#include "gc/shared/cardTableModRefBS.hpp" #include "services/memTracker.hpp" #include "utilities/copy.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.hpp b/hotspot/src/share/vm/gc/g1/g1CardCounts.hpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.hpp rename to hotspot/src/share/vm/gc/g1/g1CardCounts.hpp index be509cee874..bb8ab72f0cb 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.hpp +++ b/hotspot/src/share/vm/gc/g1/g1CardCounts.hpp @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1CARDCOUNTS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1CARDCOUNTS_HPP +#ifndef SHARE_VM_GC_G1_G1CARDCOUNTS_HPP +#define SHARE_VM_GC_G1_G1CARDCOUNTS_HPP -#include "gc_implementation/g1/g1RegionToSpaceMapper.hpp" +#include "gc/g1/g1RegionToSpaceMapper.hpp" #include "memory/allocation.hpp" #include "memory/virtualspace.hpp" #include "utilities/globalDefinitions.hpp" @@ -129,4 +129,4 @@ class G1CardCounts: public CHeapObj { void clear_all(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1CARDCOUNTS_HPP +#endif // SHARE_VM_GC_G1_G1CARDCOUNTS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CodeCacheRemSet.cpp b/hotspot/src/share/vm/gc/g1/g1CodeCacheRemSet.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/g1/g1CodeCacheRemSet.cpp rename to hotspot/src/share/vm/gc/g1/g1CodeCacheRemSet.cpp index b09d8a8a31e..a9690ac2318 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CodeCacheRemSet.cpp +++ b/hotspot/src/share/vm/gc/g1/g1CodeCacheRemSet.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,8 +25,8 @@ #include "precompiled.hpp" #include "code/codeCache.hpp" #include "code/nmethod.hpp" -#include "gc_implementation/g1/g1CodeCacheRemSet.hpp" -#include "gc_implementation/g1/heapRegion.hpp" +#include "gc/g1/g1CodeCacheRemSet.hpp" +#include "gc/g1/heapRegion.hpp" #include "memory/heap.hpp" #include "memory/iterator.hpp" #include "oops/oop.inline.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CodeCacheRemSet.hpp b/hotspot/src/share/vm/gc/g1/g1CodeCacheRemSet.hpp similarity index 90% rename from hotspot/src/share/vm/gc_implementation/g1/g1CodeCacheRemSet.hpp rename to hotspot/src/share/vm/gc/g1/g1CodeCacheRemSet.hpp index 87eb52a5b64..fcd82187909 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CodeCacheRemSet.hpp +++ b/hotspot/src/share/vm/gc/g1/g1CodeCacheRemSet.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1CODECACHEREMSET_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1CODECACHEREMSET_HPP +#ifndef SHARE_VM_GC_G1_G1CODECACHEREMSET_HPP +#define SHARE_VM_GC_G1_G1CODECACHEREMSET_HPP #include "memory/allocation.hpp" @@ -86,4 +86,4 @@ class G1CodeRootSet VALUE_OBJ_CLASS_SPEC { }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1CODECACHEREMSET_HPP +#endif // SHARE_VM_GC_G1_G1CODECACHEREMSET_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp rename to hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp index 52eb65cda8a..19095c5f887 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp +++ b/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp @@ -27,46 +27,46 @@ #include "classfile/stringTable.hpp" #include "code/codeCache.hpp" #include "code/icBuffer.hpp" -#include "gc_implementation/g1/bufferingOopClosure.hpp" -#include "gc_implementation/g1/concurrentG1Refine.hpp" -#include "gc_implementation/g1/concurrentG1RefineThread.hpp" -#include "gc_implementation/g1/concurrentMarkThread.inline.hpp" -#include "gc_implementation/g1/g1AllocRegion.inline.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1CollectorPolicy.hpp" -#include "gc_implementation/g1/g1ErgoVerbose.hpp" -#include "gc_implementation/g1/g1EvacFailure.hpp" -#include "gc_implementation/g1/g1GCPhaseTimes.hpp" -#include "gc_implementation/g1/g1Log.hpp" -#include "gc_implementation/g1/g1MarkSweep.hpp" -#include "gc_implementation/g1/g1OopClosures.inline.hpp" -#include "gc_implementation/g1/g1ParScanThreadState.inline.hpp" -#include "gc_implementation/g1/g1RegionToSpaceMapper.hpp" -#include "gc_implementation/g1/g1RemSet.inline.hpp" -#include "gc_implementation/g1/g1RootProcessor.hpp" -#include "gc_implementation/g1/g1StringDedup.hpp" -#include "gc_implementation/g1/g1YCTypes.hpp" -#include "gc_implementation/g1/heapRegion.inline.hpp" -#include "gc_implementation/g1/heapRegionRemSet.hpp" -#include "gc_implementation/g1/heapRegionSet.inline.hpp" -#include "gc_implementation/g1/vm_operations_g1.hpp" -#include "gc_implementation/shared/gcHeapSummary.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/gcTraceTime.hpp" -#include "gc_implementation/shared/isGCActiveMark.hpp" +#include "gc/g1/bufferingOopClosure.hpp" +#include "gc/g1/concurrentG1Refine.hpp" +#include "gc/g1/concurrentG1RefineThread.hpp" +#include "gc/g1/concurrentMarkThread.inline.hpp" +#include "gc/g1/g1AllocRegion.inline.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1CollectorPolicy.hpp" +#include "gc/g1/g1ErgoVerbose.hpp" +#include "gc/g1/g1EvacFailure.hpp" +#include "gc/g1/g1GCPhaseTimes.hpp" +#include "gc/g1/g1Log.hpp" +#include "gc/g1/g1MarkSweep.hpp" +#include "gc/g1/g1OopClosures.inline.hpp" +#include "gc/g1/g1ParScanThreadState.inline.hpp" +#include "gc/g1/g1RegionToSpaceMapper.hpp" +#include "gc/g1/g1RemSet.inline.hpp" +#include "gc/g1/g1RootProcessor.hpp" +#include "gc/g1/g1StringDedup.hpp" +#include "gc/g1/g1YCTypes.hpp" +#include "gc/g1/heapRegion.inline.hpp" +#include "gc/g1/heapRegionRemSet.hpp" +#include "gc/g1/heapRegionSet.inline.hpp" +#include "gc/g1/vm_operations_g1.hpp" +#include "gc/shared/gcHeapSummary.hpp" +#include "gc/shared/gcLocker.inline.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/gcTraceTime.hpp" +#include "gc/shared/generationSpec.hpp" +#include "gc/shared/isGCActiveMark.hpp" +#include "gc/shared/referenceProcessor.hpp" +#include "gc/shared/taskqueue.inline.hpp" #include "memory/allocation.hpp" -#include "memory/gcLocker.inline.hpp" -#include "memory/generationSpec.hpp" #include "memory/iterator.hpp" -#include "memory/referenceProcessor.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/orderAccess.inline.hpp" #include "runtime/vmThread.hpp" #include "utilities/globalDefinitions.hpp" #include "utilities/stack.inline.hpp" -#include "utilities/taskqueue.inline.hpp" size_t G1CollectedHeap::_humongous_object_threshold_in_words = 0; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp b/hotspot/src/share/vm/gc/g1/g1CollectedHeap.hpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp rename to hotspot/src/share/vm/gc/g1/g1CollectedHeap.hpp index 483eb8f3482..fdd0f83c48e 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp +++ b/hotspot/src/share/vm/gc/g1/g1CollectedHeap.hpp @@ -22,25 +22,25 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1COLLECTEDHEAP_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1COLLECTEDHEAP_HPP +#ifndef SHARE_VM_GC_G1_G1COLLECTEDHEAP_HPP +#define SHARE_VM_GC_G1_G1COLLECTEDHEAP_HPP -#include "gc_implementation/g1/g1AllocationContext.hpp" -#include "gc_implementation/g1/g1Allocator.hpp" -#include "gc_implementation/g1/concurrentMark.hpp" -#include "gc_implementation/g1/evacuationInfo.hpp" -#include "gc_implementation/g1/g1AllocRegion.hpp" -#include "gc_implementation/g1/g1BiasedArray.hpp" -#include "gc_implementation/g1/g1HRPrinter.hpp" -#include "gc_implementation/g1/g1InCSetState.hpp" -#include "gc_implementation/g1/g1MonitoringSupport.hpp" -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" -#include "gc_implementation/g1/g1YCTypes.hpp" -#include "gc_implementation/g1/heapRegionManager.hpp" -#include "gc_implementation/g1/heapRegionSet.hpp" -#include "gc_implementation/shared/hSpaceCounters.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "memory/barrierSet.hpp" +#include "gc/g1/concurrentMark.hpp" +#include "gc/g1/evacuationInfo.hpp" +#include "gc/g1/g1AllocRegion.hpp" +#include "gc/g1/g1AllocationContext.hpp" +#include "gc/g1/g1Allocator.hpp" +#include "gc/g1/g1BiasedArray.hpp" +#include "gc/g1/g1HRPrinter.hpp" +#include "gc/g1/g1InCSetState.hpp" +#include "gc/g1/g1MonitoringSupport.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/g1YCTypes.hpp" +#include "gc/g1/hSpaceCounters.hpp" +#include "gc/g1/heapRegionManager.hpp" +#include "gc/g1/heapRegionSet.hpp" +#include "gc/shared/barrierSet.hpp" +#include "gc/shared/collectedHeap.hpp" #include "memory/memRegion.hpp" #include "utilities/stack.hpp" @@ -1591,4 +1591,4 @@ protected: size_t _max_heap_capacity; }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1COLLECTEDHEAP_HPP +#endif // SHARE_VM_GC_G1_G1COLLECTEDHEAP_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp b/hotspot/src/share/vm/gc/g1/g1CollectedHeap.inline.hpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp rename to hotspot/src/share/vm/gc/g1/g1CollectedHeap.inline.hpp index 466c20e2147..6cd15d0fa7e 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp +++ b/hotspot/src/share/vm/gc/g1/g1CollectedHeap.inline.hpp @@ -22,18 +22,18 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1COLLECTEDHEAP_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1COLLECTEDHEAP_INLINE_HPP +#ifndef SHARE_VM_GC_G1_G1COLLECTEDHEAP_INLINE_HPP +#define SHARE_VM_GC_G1_G1COLLECTEDHEAP_INLINE_HPP -#include "gc_implementation/g1/concurrentMark.hpp" -#include "gc_implementation/g1/g1CollectedHeap.hpp" -#include "gc_implementation/g1/g1AllocRegion.inline.hpp" -#include "gc_implementation/g1/g1CollectorPolicy.hpp" -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" -#include "gc_implementation/g1/heapRegionManager.inline.hpp" -#include "gc_implementation/g1/heapRegionSet.inline.hpp" +#include "gc/g1/concurrentMark.hpp" +#include "gc/g1/g1AllocRegion.inline.hpp" +#include "gc/g1/g1CollectedHeap.hpp" +#include "gc/g1/g1CollectorPolicy.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/heapRegionManager.inline.hpp" +#include "gc/g1/heapRegionSet.inline.hpp" +#include "gc/shared/taskqueue.hpp" #include "runtime/orderAccess.inline.hpp" -#include "utilities/taskqueue.hpp" PLABStats* G1CollectedHeap::alloc_buffer_stats(InCSetState dest) { switch (dest.value()) { @@ -380,4 +380,4 @@ inline void G1CollectedHeap::set_humongous_is_live(oop obj) { } } -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1COLLECTEDHEAP_INLINE_HPP +#endif // SHARE_VM_GC_G1_G1COLLECTEDHEAP_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap_ext.cpp b/hotspot/src/share/vm/gc/g1/g1CollectedHeap_ext.cpp similarity index 91% rename from hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap_ext.cpp rename to hotspot/src/share/vm/gc/g1/g1CollectedHeap_ext.cpp index 7f71451b6ca..5c429bafda2 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap_ext.cpp +++ b/hotspot/src/share/vm/gc/g1/g1CollectedHeap_ext.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1CollectedHeap.hpp" +#include "gc/g1/g1CollectedHeap.hpp" bool G1CollectedHeap::copy_allocation_context_stats(const jint* contexts, jlong* totals, diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp b/hotspot/src/share/vm/gc/g1/g1CollectorPolicy.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp rename to hotspot/src/share/vm/gc/g1/g1CollectorPolicy.cpp index 41943dd1ca0..72fdeb5ee21 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp +++ b/hotspot/src/share/vm/gc/g1/g1CollectorPolicy.cpp @@ -23,16 +23,16 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/concurrentG1Refine.hpp" -#include "gc_implementation/g1/concurrentMark.hpp" -#include "gc_implementation/g1/concurrentMarkThread.inline.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1CollectorPolicy.hpp" -#include "gc_implementation/g1/g1ErgoVerbose.hpp" -#include "gc_implementation/g1/g1GCPhaseTimes.hpp" -#include "gc_implementation/g1/g1Log.hpp" -#include "gc_implementation/g1/heapRegionRemSet.hpp" -#include "gc_implementation/shared/gcPolicyCounters.hpp" +#include "gc/g1/concurrentG1Refine.hpp" +#include "gc/g1/concurrentMark.hpp" +#include "gc/g1/concurrentMarkThread.inline.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1CollectorPolicy.hpp" +#include "gc/g1/g1ErgoVerbose.hpp" +#include "gc/g1/g1GCPhaseTimes.hpp" +#include "gc/g1/g1Log.hpp" +#include "gc/g1/heapRegionRemSet.hpp" +#include "gc/shared/gcPolicyCounters.hpp" #include "runtime/arguments.hpp" #include "runtime/java.hpp" #include "runtime/mutexLocker.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp b/hotspot/src/share/vm/gc/g1/g1CollectorPolicy.hpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp rename to hotspot/src/share/vm/gc/g1/g1CollectorPolicy.hpp index 3cee9369634..c94ada50fa4 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp +++ b/hotspot/src/share/vm/gc/g1/g1CollectorPolicy.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1COLLECTORPOLICY_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1COLLECTORPOLICY_HPP +#ifndef SHARE_VM_GC_G1_G1COLLECTORPOLICY_HPP +#define SHARE_VM_GC_G1_G1COLLECTORPOLICY_HPP -#include "gc_implementation/g1/collectionSetChooser.hpp" -#include "gc_implementation/g1/g1Allocator.hpp" -#include "gc_implementation/g1/g1MMUTracker.hpp" -#include "memory/collectorPolicy.hpp" +#include "gc/g1/collectionSetChooser.hpp" +#include "gc/g1/g1Allocator.hpp" +#include "gc/g1/g1MMUTracker.hpp" +#include "gc/shared/collectorPolicy.hpp" // A G1CollectorPolicy makes policy decisions that determine the // characteristics of the collector. Examples include: @@ -942,4 +942,4 @@ inline double variance(int n, double sum_of_squares, double sum) { return (sum_of_squares - 2.0 * avg * sum + n_d * avg * avg) / n_d; } -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1COLLECTORPOLICY_HPP +#endif // SHARE_VM_GC_G1_G1COLLECTORPOLICY_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy_ext.hpp b/hotspot/src/share/vm/gc/g1/g1CollectorPolicy_ext.hpp similarity index 76% rename from hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy_ext.hpp rename to hotspot/src/share/vm/gc/g1/g1CollectorPolicy_ext.hpp index c0b90985606..667fbcb68af 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy_ext.hpp +++ b/hotspot/src/share/vm/gc/g1/g1CollectorPolicy_ext.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1COLLECTORPOLICY_EXT_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1COLLECTORPOLICY_EXT_HPP +#ifndef SHARE_VM_GC_G1_G1COLLECTORPOLICY_EXT_HPP +#define SHARE_VM_GC_G1_G1COLLECTORPOLICY_EXT_HPP -#include "gc_implementation/g1/g1CollectorPolicy.hpp" +#include "gc/g1/g1CollectorPolicy.hpp" class G1CollectorPolicyExt : public G1CollectorPolicy { }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1COLLECTORPOLICY_EXT_HPP +#endif // SHARE_VM_GC_G1_G1COLLECTORPOLICY_EXT_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1ErgoVerbose.cpp b/hotspot/src/share/vm/gc/g1/g1ErgoVerbose.cpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/g1/g1ErgoVerbose.cpp rename to hotspot/src/share/vm/gc/g1/g1ErgoVerbose.cpp index 167d19c2e22..1480c2d5087 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1ErgoVerbose.cpp +++ b/hotspot/src/share/vm/gc/g1/g1ErgoVerbose.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1ErgoVerbose.hpp" +#include "gc/g1/g1ErgoVerbose.hpp" #include "utilities/ostream.hpp" ErgoLevel G1ErgoVerbose::_level; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1ErgoVerbose.hpp b/hotspot/src/share/vm/gc/g1/g1ErgoVerbose.hpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/g1/g1ErgoVerbose.hpp rename to hotspot/src/share/vm/gc/g1/g1ErgoVerbose.hpp index 92df3a0d291..d0ae71812e9 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1ErgoVerbose.hpp +++ b/hotspot/src/share/vm/gc/g1/g1ErgoVerbose.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1ERGOVERBOSE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1ERGOVERBOSE_HPP +#ifndef SHARE_VM_GC_G1_G1ERGOVERBOSE_HPP +#define SHARE_VM_GC_G1_G1ERGOVERBOSE_HPP #include "memory/allocation.hpp" #include "utilities/debug.hpp" @@ -199,4 +199,4 @@ public: ergo_verbose0(_tag_, _action_, "") -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1ERGOVERBOSE_HPP +#endif // SHARE_VM_GC_G1_G1ERGOVERBOSE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1EvacFailure.cpp b/hotspot/src/share/vm/gc/g1/g1EvacFailure.cpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/g1/g1EvacFailure.cpp rename to hotspot/src/share/vm/gc/g1/g1EvacFailure.cpp index a369a5b7ae1..66292cfcdac 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1EvacFailure.cpp +++ b/hotspot/src/share/vm/gc/g1/g1EvacFailure.cpp @@ -23,14 +23,14 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/concurrentMark.inline.hpp" -#include "gc_implementation/g1/dirtyCardQueue.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1EvacFailure.hpp" -#include "gc_implementation/g1/g1_globals.hpp" -#include "gc_implementation/g1/g1OopClosures.inline.hpp" -#include "gc_implementation/g1/heapRegion.hpp" -#include "gc_implementation/g1/heapRegionRemSet.hpp" +#include "gc/g1/concurrentMark.inline.hpp" +#include "gc/g1/dirtyCardQueue.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1EvacFailure.hpp" +#include "gc/g1/g1OopClosures.inline.hpp" +#include "gc/g1/g1_globals.hpp" +#include "gc/g1/heapRegion.hpp" +#include "gc/g1/heapRegionRemSet.hpp" class UpdateRSetDeferred : public OopsInHeapRegionClosure { private: diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1EvacFailure.hpp b/hotspot/src/share/vm/gc/g1/g1EvacFailure.hpp similarity index 82% rename from hotspot/src/share/vm/gc_implementation/g1/g1EvacFailure.hpp rename to hotspot/src/share/vm/gc/g1/g1EvacFailure.hpp index 709bd03a7d7..4385fd02acd 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1EvacFailure.hpp +++ b/hotspot/src/share/vm/gc/g1/g1EvacFailure.hpp @@ -22,13 +22,13 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1EVACFAILURE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1EVACFAILURE_HPP +#ifndef SHARE_VM_GC_G1_G1EVACFAILURE_HPP +#define SHARE_VM_GC_G1_G1EVACFAILURE_HPP -#include "gc_implementation/g1/g1OopClosures.hpp" -#include "gc_implementation/g1/heapRegionManager.hpp" +#include "gc/g1/g1OopClosures.hpp" +#include "gc/g1/heapRegionManager.hpp" +#include "gc/shared/workgroup.hpp" #include "utilities/globalDefinitions.hpp" -#include "utilities/workgroup.hpp" class G1CollectedHeap; @@ -45,4 +45,4 @@ public: void work(uint worker_id); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1EVACFAILURE_HPP +#endif // SHARE_VM_GC_G1_G1EVACFAILURE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp b/hotspot/src/share/vm/gc/g1/g1GCPhaseTimes.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp rename to hotspot/src/share/vm/gc/g1/g1GCPhaseTimes.cpp index 8f51050a7e8..cb17b953e47 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp +++ b/hotspot/src/share/vm/gc/g1/g1GCPhaseTimes.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,10 +23,10 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1GCPhaseTimes.hpp" -#include "gc_implementation/g1/g1Log.hpp" -#include "gc_implementation/g1/g1StringDedup.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1GCPhaseTimes.hpp" +#include "gc/g1/g1Log.hpp" +#include "gc/g1/g1StringDedup.hpp" #include "memory/allocation.hpp" #include "runtime/os.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.hpp b/hotspot/src/share/vm/gc/g1/g1GCPhaseTimes.hpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.hpp rename to hotspot/src/share/vm/gc/g1/g1GCPhaseTimes.hpp index 1ab1ba62871..ac64f6a88eb 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.hpp +++ b/hotspot/src/share/vm/gc/g1/g1GCPhaseTimes.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1GCPHASETIMES_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1GCPHASETIMES_HPP +#ifndef SHARE_VM_GC_G1_G1GCPHASETIMES_HPP +#define SHARE_VM_GC_G1_G1GCPHASETIMES_HPP #include "memory/allocation.hpp" @@ -286,4 +286,4 @@ public: ~G1GCParPhaseTimesTracker(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1GCPHASETIMES_HPP +#endif // SHARE_VM_GC_G1_G1GCPHASETIMES_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1HRPrinter.cpp b/hotspot/src/share/vm/gc/g1/g1HRPrinter.cpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/g1/g1HRPrinter.cpp rename to hotspot/src/share/vm/gc/g1/g1HRPrinter.cpp index 68a2a96d73d..83344c140cc 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1HRPrinter.cpp +++ b/hotspot/src/share/vm/gc/g1/g1HRPrinter.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1HRPrinter.hpp" -#include "gc_implementation/g1/heapRegion.hpp" +#include "gc/g1/g1HRPrinter.hpp" +#include "gc/g1/heapRegion.hpp" #include "utilities/ostream.hpp" const char* G1HRPrinter::action_name(ActionType action) { diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1HRPrinter.hpp b/hotspot/src/share/vm/gc/g1/g1HRPrinter.hpp similarity index 93% rename from hotspot/src/share/vm/gc_implementation/g1/g1HRPrinter.hpp rename to hotspot/src/share/vm/gc/g1/g1HRPrinter.hpp index 425cbaca2a3..b97f2168544 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1HRPrinter.hpp +++ b/hotspot/src/share/vm/gc/g1/g1HRPrinter.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1HRPRINTER_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1HRPRINTER_HPP +#ifndef SHARE_VM_GC_G1_G1HRPRINTER_HPP +#define SHARE_VM_GC_G1_G1HRPRINTER_HPP +#include "gc/g1/heapRegion.hpp" #include "memory/allocation.hpp" -#include "gc_implementation/g1/heapRegion.hpp" #define SKIP_RETIRED_FULL_REGIONS 1 @@ -179,4 +179,4 @@ public: G1HRPrinter() : _active(false) { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1HRPRINTER_HPP +#endif // SHARE_VM_GC_G1_G1HRPRINTER_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1HotCardCache.cpp b/hotspot/src/share/vm/gc/g1/g1HotCardCache.cpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/g1/g1HotCardCache.cpp rename to hotspot/src/share/vm/gc/g1/g1HotCardCache.cpp index a32ffae41d9..2b45155f552 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1HotCardCache.cpp +++ b/hotspot/src/share/vm/gc/g1/g1HotCardCache.cpp @@ -23,10 +23,10 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/dirtyCardQueue.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1HotCardCache.hpp" -#include "gc_implementation/g1/g1RemSet.hpp" +#include "gc/g1/dirtyCardQueue.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1HotCardCache.hpp" +#include "gc/g1/g1RemSet.hpp" #include "runtime/atomic.inline.hpp" G1HotCardCache::G1HotCardCache(G1CollectedHeap *g1h): diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1HotCardCache.hpp b/hotspot/src/share/vm/gc/g1/g1HotCardCache.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/g1/g1HotCardCache.hpp rename to hotspot/src/share/vm/gc/g1/g1HotCardCache.hpp index ee329a77ef1..09edcd8bc00 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1HotCardCache.hpp +++ b/hotspot/src/share/vm/gc/g1/g1HotCardCache.hpp @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1HOTCARDCACHE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1HOTCARDCACHE_HPP +#ifndef SHARE_VM_GC_G1_G1HOTCARDCACHE_HPP +#define SHARE_VM_GC_G1_G1HOTCARDCACHE_HPP -#include "gc_implementation/g1/g1_globals.hpp" -#include "gc_implementation/g1/g1CardCounts.hpp" +#include "gc/g1/g1CardCounts.hpp" +#include "gc/g1/g1_globals.hpp" #include "memory/allocation.hpp" #include "runtime/safepoint.hpp" #include "runtime/thread.hpp" @@ -145,4 +145,4 @@ class G1HotCardCache: public CHeapObj { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1HOTCARDCACHE_HPP +#endif // SHARE_VM_GC_G1_G1HOTCARDCACHE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1InCSetState.hpp b/hotspot/src/share/vm/gc/g1/g1InCSetState.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/g1/g1InCSetState.hpp rename to hotspot/src/share/vm/gc/g1/g1InCSetState.hpp index 8cc45ad15e5..f945153e395 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1InCSetState.hpp +++ b/hotspot/src/share/vm/gc/g1/g1InCSetState.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1INCSETSTATE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1INCSETSTATE_HPP +#ifndef SHARE_VM_GC_G1_G1INCSETSTATE_HPP +#define SHARE_VM_GC_G1_G1INCSETSTATE_HPP -#include "gc_implementation/g1/heapRegion.hpp" -#include "gc_implementation/g1/g1BiasedArray.hpp" +#include "gc/g1/g1BiasedArray.hpp" +#include "gc/g1/heapRegion.hpp" #include "memory/allocation.hpp" // Per-region state during garbage collection. @@ -132,4 +132,4 @@ class G1InCSetStateFastTestBiasedMappedArray : public G1BiasedMappedArrayhrm_index(), InCSetState::NotInCSet); } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1INCSETSTATE_HPP +#endif // SHARE_VM_GC_G1_G1INCSETSTATE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1Log.cpp b/hotspot/src/share/vm/gc/g1/g1Log.cpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/g1/g1Log.cpp rename to hotspot/src/share/vm/gc/g1/g1Log.cpp index dc3b4d1e64f..40c1da28812 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1Log.cpp +++ b/hotspot/src/share/vm/gc/g1/g1Log.cpp @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1_globals.hpp" -#include "gc_implementation/g1/g1Log.hpp" +#include "gc/g1/g1Log.hpp" +#include "gc/g1/g1_globals.hpp" #include "runtime/globals_extension.hpp" G1Log::LogLevel G1Log::_level = G1Log::LevelNone; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1Log.hpp b/hotspot/src/share/vm/gc/g1/g1Log.hpp similarity index 91% rename from hotspot/src/share/vm/gc_implementation/g1/g1Log.hpp rename to hotspot/src/share/vm/gc/g1/g1Log.hpp index 4bdc99b2af5..7a313e360cd 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1Log.hpp +++ b/hotspot/src/share/vm/gc/g1/g1Log.hpp @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1LOG_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1LOG_HPP +#ifndef SHARE_VM_GC_G1_G1LOG_HPP +#define SHARE_VM_GC_G1_G1LOG_HPP #include "memory/allocation.hpp" @@ -62,4 +62,4 @@ class G1Log : public AllStatic { static void update_level(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1LOG_HPP +#endif // SHARE_VM_GC_G1_G1LOG_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.cpp b/hotspot/src/share/vm/gc/g1/g1MMUTracker.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.cpp rename to hotspot/src/share/vm/gc/g1/g1MMUTracker.cpp index d1b38a733aa..1760fd3ce34 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.cpp +++ b/hotspot/src/share/vm/gc/g1/g1MMUTracker.cpp @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1MMUTracker.hpp" +#include "gc/g1/g1MMUTracker.hpp" #include "runtime/mutexLocker.hpp" #include "utilities/ostream.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp b/hotspot/src/share/vm/gc/g1/g1MMUTracker.hpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp rename to hotspot/src/share/vm/gc/g1/g1MMUTracker.hpp index c4890d97dc0..212706dbea0 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp +++ b/hotspot/src/share/vm/gc/g1/g1MMUTracker.hpp @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1MMUTRACKER_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1MMUTRACKER_HPP +#ifndef SHARE_VM_GC_G1_G1MMUTRACKER_HPP +#define SHARE_VM_GC_G1_G1MMUTRACKER_HPP #include "memory/allocation.hpp" #include "utilities/debug.hpp" @@ -131,4 +131,4 @@ public: virtual double when_sec(double current_time, double pause_time); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1MMUTRACKER_HPP +#endif // SHARE_VM_GC_G1_G1MMUTRACKER_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp b/hotspot/src/share/vm/gc/g1/g1MarkSweep.cpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp rename to hotspot/src/share/vm/gc/g1/g1MarkSweep.cpp index 64af265d3ec..22662210e29 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp +++ b/hotspot/src/share/vm/gc/g1/g1MarkSweep.cpp @@ -29,20 +29,20 @@ #include "classfile/vmSymbols.hpp" #include "code/codeCache.hpp" #include "code/icBuffer.hpp" -#include "gc_implementation/g1/g1Log.hpp" -#include "gc_implementation/g1/g1MarkSweep.hpp" -#include "gc_implementation/g1/g1RootProcessor.hpp" -#include "gc_implementation/g1/g1StringDedup.hpp" -#include "gc_implementation/shared/markSweep.inline.hpp" -#include "gc_implementation/shared/gcHeapSummary.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/gcTraceTime.hpp" -#include "memory/gcLocker.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/modRefBarrierSet.hpp" -#include "memory/referencePolicy.hpp" -#include "memory/space.hpp" +#include "gc/g1/g1Log.hpp" +#include "gc/g1/g1MarkSweep.hpp" +#include "gc/g1/g1RootProcessor.hpp" +#include "gc/g1/g1StringDedup.hpp" +#include "gc/serial/markSweep.inline.hpp" +#include "gc/shared/gcHeapSummary.hpp" +#include "gc/shared/gcLocker.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/gcTraceTime.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/modRefBarrierSet.hpp" +#include "gc/shared/referencePolicy.hpp" +#include "gc/shared/space.hpp" #include "oops/instanceRefKlass.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.hpp b/hotspot/src/share/vm/gc/g1/g1MarkSweep.hpp similarity index 88% rename from hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.hpp rename to hotspot/src/share/vm/gc/g1/g1MarkSweep.hpp index 58a84ce49a2..b3681edd860 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.hpp +++ b/hotspot/src/share/vm/gc/g1/g1MarkSweep.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1MARKSWEEP_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1MARKSWEEP_HPP +#ifndef SHARE_VM_GC_G1_G1MARKSWEEP_HPP +#define SHARE_VM_GC_G1_G1MARKSWEEP_HPP -#include "gc_implementation/g1/g1CollectedHeap.hpp" -#include "gc_implementation/g1/heapRegion.hpp" -#include "memory/genMarkSweep.hpp" -#include "memory/generation.hpp" +#include "gc/g1/g1CollectedHeap.hpp" +#include "gc/g1/heapRegion.hpp" +#include "gc/serial/genMarkSweep.hpp" +#include "gc/shared/generation.hpp" #include "memory/universe.hpp" #include "oops/markOop.hpp" #include "oops/oop.hpp" @@ -93,4 +93,4 @@ class G1PrepareCompactClosure : public HeapRegionClosure { bool doHeapRegion(HeapRegion* hr); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1MARKSWEEP_HPP +#endif // SHARE_VM_GC_G1_G1MARKSWEEP_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep_ext.cpp b/hotspot/src/share/vm/gc/g1/g1MarkSweep_ext.cpp similarity index 91% rename from hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep_ext.cpp rename to hotspot/src/share/vm/gc/g1/g1MarkSweep_ext.cpp index 006e787bee3..9ba0d92a337 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep_ext.cpp +++ b/hotspot/src/share/vm/gc/g1/g1MarkSweep_ext.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1MarkSweep.hpp" +#include "gc/g1/g1MarkSweep.hpp" void G1MarkSweep::prepare_compaction() { G1PrepareCompactClosure blk; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.cpp b/hotspot/src/share/vm/gc/g1/g1MonitoringSupport.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.cpp rename to hotspot/src/share/vm/gc/g1/g1MonitoringSupport.cpp index 1c4f29d88c3..4be78e3db95 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.cpp +++ b/hotspot/src/share/vm/gc/g1/g1MonitoringSupport.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,9 +23,9 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1MonitoringSupport.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1CollectorPolicy.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1CollectorPolicy.hpp" +#include "gc/g1/g1MonitoringSupport.hpp" G1GenerationCounters::G1GenerationCounters(G1MonitoringSupport* g1mm, const char* name, diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp b/hotspot/src/share/vm/gc/g1/g1MonitoringSupport.hpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp rename to hotspot/src/share/vm/gc/g1/g1MonitoringSupport.hpp index d354c746cb0..3c1d7444108 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp +++ b/hotspot/src/share/vm/gc/g1/g1MonitoringSupport.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1MONITORINGSUPPORT_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1MONITORINGSUPPORT_HPP +#ifndef SHARE_VM_GC_G1_G1MONITORINGSUPPORT_HPP +#define SHARE_VM_GC_G1_G1MONITORINGSUPPORT_HPP -#include "gc_implementation/shared/hSpaceCounters.hpp" +#include "gc/g1/hSpaceCounters.hpp" class G1CollectedHeap; @@ -266,4 +266,4 @@ public: virtual void update_all(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1MONITORINGSUPPORT_HPP +#endif // SHARE_VM_GC_G1_G1MONITORINGSUPPORT_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.cpp b/hotspot/src/share/vm/gc/g1/g1OopClosures.cpp similarity index 87% rename from hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.cpp rename to hotspot/src/share/vm/gc/g1/g1OopClosures.cpp index e2b22d5a142..57ce7a58299 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.cpp +++ b/hotspot/src/share/vm/gc/g1/g1OopClosures.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,10 +23,10 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1_specialized_oop_closures.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1OopClosures.inline.hpp" -#include "gc_implementation/g1/g1ParScanThreadState.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1OopClosures.inline.hpp" +#include "gc/g1/g1ParScanThreadState.hpp" +#include "gc/g1/g1_specialized_oop_closures.hpp" #include "memory/iterator.inline.hpp" #include "utilities/stack.inline.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp b/hotspot/src/share/vm/gc/g1/g1OopClosures.hpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp rename to hotspot/src/share/vm/gc/g1/g1OopClosures.hpp index 44a6c1220d2..d991aa9ddd0 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp +++ b/hotspot/src/share/vm/gc/g1/g1OopClosures.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1OOPCLOSURES_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1OOPCLOSURES_HPP +#ifndef SHARE_VM_GC_G1_G1OOPCLOSURES_HPP +#define SHARE_VM_GC_G1_G1OOPCLOSURES_HPP #include "memory/iterator.hpp" #include "oops/markOop.hpp" @@ -281,4 +281,4 @@ public: virtual void do_oop(oop* p) { do_oop_nv(p); } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1OOPCLOSURES_HPP +#endif // SHARE_VM_GC_G1_G1OOPCLOSURES_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp b/hotspot/src/share/vm/gc/g1/g1OopClosures.inline.hpp similarity index 93% rename from hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp rename to hotspot/src/share/vm/gc/g1/g1OopClosures.inline.hpp index 11c22ca004b..c8b594f14e7 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp +++ b/hotspot/src/share/vm/gc/g1/g1OopClosures.inline.hpp @@ -22,16 +22,16 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1OOPCLOSURES_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1OOPCLOSURES_INLINE_HPP +#ifndef SHARE_VM_GC_G1_G1OOPCLOSURES_INLINE_HPP +#define SHARE_VM_GC_G1_G1OOPCLOSURES_INLINE_HPP -#include "gc_implementation/g1/concurrentMark.inline.hpp" -#include "gc_implementation/g1/g1CollectedHeap.hpp" -#include "gc_implementation/g1/g1OopClosures.hpp" -#include "gc_implementation/g1/g1ParScanThreadState.inline.hpp" -#include "gc_implementation/g1/g1RemSet.hpp" -#include "gc_implementation/g1/g1RemSet.inline.hpp" -#include "gc_implementation/g1/heapRegionRemSet.hpp" +#include "gc/g1/concurrentMark.inline.hpp" +#include "gc/g1/g1CollectedHeap.hpp" +#include "gc/g1/g1OopClosures.hpp" +#include "gc/g1/g1ParScanThreadState.inline.hpp" +#include "gc/g1/g1RemSet.hpp" +#include "gc/g1/g1RemSet.inline.hpp" +#include "gc/g1/heapRegionRemSet.hpp" #include "memory/iterator.inline.hpp" #include "runtime/prefetch.inline.hpp" @@ -224,4 +224,4 @@ inline void G1UpdateRSOrPushRefOopClosure::do_oop_nv(T* p) { } } -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1OOPCLOSURES_INLINE_HPP +#endif // SHARE_VM_GC_G1_G1OOPCLOSURES_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.cpp b/hotspot/src/share/vm/gc/g1/g1PageBasedVirtualSpace.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.cpp rename to hotspot/src/share/vm/gc/g1/g1PageBasedVirtualSpace.cpp index 9144d3c7246..f586dfdb088 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.cpp +++ b/hotspot/src/share/vm/gc/g1/g1PageBasedVirtualSpace.cpp @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1PageBasedVirtualSpace.hpp" +#include "gc/g1/g1PageBasedVirtualSpace.hpp" #include "oops/markOop.hpp" #include "oops/oop.inline.hpp" #include "services/memTracker.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.hpp b/hotspot/src/share/vm/gc/g1/g1PageBasedVirtualSpace.hpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.hpp rename to hotspot/src/share/vm/gc/g1/g1PageBasedVirtualSpace.hpp index edf4d6972a8..23a7d53d85f 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.hpp +++ b/hotspot/src/share/vm/gc/g1/g1PageBasedVirtualSpace.hpp @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1PAGEBASEDVIRTUALSPACE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1PAGEBASEDVIRTUALSPACE_HPP +#ifndef SHARE_VM_GC_G1_G1PAGEBASEDVIRTUALSPACE_HPP +#define SHARE_VM_GC_G1_G1PAGEBASEDVIRTUALSPACE_HPP #include "memory/allocation.hpp" #include "memory/memRegion.hpp" @@ -148,4 +148,4 @@ class G1PageBasedVirtualSpace VALUE_OBJ_CLASS_SPEC { void print(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1PAGEBASEDVIRTUALSPACE_HPP +#endif // SHARE_VM_GC_G1_G1PAGEBASEDVIRTUALSPACE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1ParScanThreadState.cpp b/hotspot/src/share/vm/gc/g1/g1ParScanThreadState.cpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/g1/g1ParScanThreadState.cpp rename to hotspot/src/share/vm/gc/g1/g1ParScanThreadState.cpp index eed032ab4f3..1d38d9832fa 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1ParScanThreadState.cpp +++ b/hotspot/src/share/vm/gc/g1/g1ParScanThreadState.cpp @@ -23,13 +23,13 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1OopClosures.inline.hpp" -#include "gc_implementation/g1/g1ParScanThreadState.inline.hpp" -#include "gc_implementation/g1/g1StringDedup.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1OopClosures.inline.hpp" +#include "gc/g1/g1ParScanThreadState.inline.hpp" +#include "gc/g1/g1StringDedup.hpp" +#include "gc/shared/taskqueue.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/prefetch.inline.hpp" -#include "utilities/taskqueue.inline.hpp" G1ParScanThreadState::G1ParScanThreadState(G1CollectedHeap* g1h, uint queue_num, ReferenceProcessor* rp) : _g1h(g1h), diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1ParScanThreadState.hpp b/hotspot/src/share/vm/gc/g1/g1ParScanThreadState.hpp similarity index 92% rename from hotspot/src/share/vm/gc_implementation/g1/g1ParScanThreadState.hpp rename to hotspot/src/share/vm/gc/g1/g1ParScanThreadState.hpp index 9a1f52799f0..77ce22666d8 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1ParScanThreadState.hpp +++ b/hotspot/src/share/vm/gc/g1/g1ParScanThreadState.hpp @@ -22,16 +22,16 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1PARSCANTHREADSTATE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1PARSCANTHREADSTATE_HPP +#ifndef SHARE_VM_GC_G1_G1PARSCANTHREADSTATE_HPP +#define SHARE_VM_GC_G1_G1PARSCANTHREADSTATE_HPP -#include "gc_implementation/g1/dirtyCardQueue.hpp" -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" -#include "gc_implementation/g1/g1CollectedHeap.hpp" -#include "gc_implementation/g1/g1CollectorPolicy.hpp" -#include "gc_implementation/g1/g1OopClosures.hpp" -#include "gc_implementation/g1/g1RemSet.hpp" -#include "gc_implementation/shared/ageTable.hpp" +#include "gc/g1/dirtyCardQueue.hpp" +#include "gc/g1/g1CollectedHeap.hpp" +#include "gc/g1/g1CollectorPolicy.hpp" +#include "gc/g1/g1OopClosures.hpp" +#include "gc/g1/g1RemSet.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/shared/ageTable.hpp" #include "memory/allocation.hpp" #include "oops/oop.hpp" @@ -213,4 +213,4 @@ class G1ParScanThreadState : public StackObj { inline void steal_and_trim_queue(RefToScanQueueSet *task_queues); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1PARSCANTHREADSTATE_HPP +#endif // SHARE_VM_GC_G1_G1PARSCANTHREADSTATE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1ParScanThreadState.inline.hpp b/hotspot/src/share/vm/gc/g1/g1ParScanThreadState.inline.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/g1/g1ParScanThreadState.inline.hpp rename to hotspot/src/share/vm/gc/g1/g1ParScanThreadState.inline.hpp index c0ff1e5b426..0a1b3d055c2 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1ParScanThreadState.inline.hpp +++ b/hotspot/src/share/vm/gc/g1/g1ParScanThreadState.inline.hpp @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1PARSCANTHREADSTATE_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1PARSCANTHREADSTATE_INLINE_HPP +#ifndef SHARE_VM_GC_G1_G1PARSCANTHREADSTATE_INLINE_HPP +#define SHARE_VM_GC_G1_G1PARSCANTHREADSTATE_INLINE_HPP -#include "gc_implementation/g1/g1ParScanThreadState.hpp" -#include "gc_implementation/g1/g1RemSet.inline.hpp" +#include "gc/g1/g1ParScanThreadState.hpp" +#include "gc/g1/g1RemSet.inline.hpp" #include "oops/oop.inline.hpp" template void G1ParScanThreadState::do_oop_evac(T* p, HeapRegion* from) { @@ -147,5 +147,5 @@ void G1ParScanThreadState::steal_and_trim_queue(RefToScanQueueSet *task_queues) } } -#endif /* SHARE_VM_GC_IMPLEMENTATION_G1_G1PARSCANTHREADSTATE_INLINE_HPP */ +#endif /* SHARE_VM_GC_G1_G1PARSCANTHREADSTATE_INLINE_HPP */ diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1RegionToSpaceMapper.cpp b/hotspot/src/share/vm/gc/g1/g1RegionToSpaceMapper.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/g1/g1RegionToSpaceMapper.cpp rename to hotspot/src/share/vm/gc/g1/g1RegionToSpaceMapper.cpp index b78f37d8cc9..374ca385abf 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1RegionToSpaceMapper.cpp +++ b/hotspot/src/share/vm/gc/g1/g1RegionToSpaceMapper.cpp @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1BiasedArray.hpp" -#include "gc_implementation/g1/g1RegionToSpaceMapper.hpp" +#include "gc/g1/g1BiasedArray.hpp" +#include "gc/g1/g1RegionToSpaceMapper.hpp" #include "memory/allocation.inline.hpp" #include "memory/virtualspace.hpp" #include "services/memTracker.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1RegionToSpaceMapper.hpp b/hotspot/src/share/vm/gc/g1/g1RegionToSpaceMapper.hpp similarity index 93% rename from hotspot/src/share/vm/gc_implementation/g1/g1RegionToSpaceMapper.hpp rename to hotspot/src/share/vm/gc/g1/g1RegionToSpaceMapper.hpp index 6623a37f9d0..fff6ec7605b 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1RegionToSpaceMapper.hpp +++ b/hotspot/src/share/vm/gc/g1/g1RegionToSpaceMapper.hpp @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1REGIONTOSPACEMAPPER_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1REGIONTOSPACEMAPPER_HPP +#ifndef SHARE_VM_GC_G1_G1REGIONTOSPACEMAPPER_HPP +#define SHARE_VM_GC_G1_G1REGIONTOSPACEMAPPER_HPP -#include "gc_implementation/g1/g1PageBasedVirtualSpace.hpp" +#include "gc/g1/g1PageBasedVirtualSpace.hpp" #include "memory/allocation.hpp" #include "utilities/debug.hpp" @@ -89,4 +89,4 @@ class G1RegionToSpaceMapper : public CHeapObj { MemoryType type); }; -#endif /* SHARE_VM_GC_IMPLEMENTATION_G1_G1REGIONTOSPACEMAPPER_HPP */ +#endif /* SHARE_VM_GC_G1_G1REGIONTOSPACEMAPPER_HPP */ diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp b/hotspot/src/share/vm/gc/g1/g1RemSet.cpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp rename to hotspot/src/share/vm/gc/g1/g1RemSet.cpp index 1bc162f328d..decdbba888e 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp +++ b/hotspot/src/share/vm/gc/g1/g1RemSet.cpp @@ -23,17 +23,17 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/concurrentG1Refine.hpp" -#include "gc_implementation/g1/concurrentG1RefineThread.hpp" -#include "gc_implementation/g1/g1BlockOffsetTable.inline.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1CollectorPolicy.hpp" -#include "gc_implementation/g1/g1HotCardCache.hpp" -#include "gc_implementation/g1/g1GCPhaseTimes.hpp" -#include "gc_implementation/g1/g1OopClosures.inline.hpp" -#include "gc_implementation/g1/g1RemSet.inline.hpp" -#include "gc_implementation/g1/heapRegionManager.inline.hpp" -#include "gc_implementation/g1/heapRegionRemSet.hpp" +#include "gc/g1/concurrentG1Refine.hpp" +#include "gc/g1/concurrentG1RefineThread.hpp" +#include "gc/g1/g1BlockOffsetTable.inline.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1CollectorPolicy.hpp" +#include "gc/g1/g1GCPhaseTimes.hpp" +#include "gc/g1/g1HotCardCache.hpp" +#include "gc/g1/g1OopClosures.inline.hpp" +#include "gc/g1/g1RemSet.inline.hpp" +#include "gc/g1/heapRegionManager.inline.hpp" +#include "gc/g1/heapRegionRemSet.hpp" #include "memory/iterator.hpp" #include "oops/oop.inline.hpp" #include "utilities/globalDefinitions.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp b/hotspot/src/share/vm/gc/g1/g1RemSet.hpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp rename to hotspot/src/share/vm/gc/g1/g1RemSet.hpp index 77eed43ac87..a71bc2bbd9c 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp +++ b/hotspot/src/share/vm/gc/g1/g1RemSet.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSET_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSET_HPP +#ifndef SHARE_VM_GC_G1_G1REMSET_HPP +#define SHARE_VM_GC_G1_G1REMSET_HPP -#include "gc_implementation/g1/g1RemSetSummary.hpp" +#include "gc/g1/g1RemSetSummary.hpp" // A G1RemSet provides ways of iterating over pointers into a selected // collection set. @@ -175,4 +175,4 @@ public: bool apply_to_weak_ref_discovered_field() { return true; } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSET_HPP +#endif // SHARE_VM_GC_G1_G1REMSET_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.inline.hpp b/hotspot/src/share/vm/gc/g1/g1RemSet.inline.hpp similarity index 87% rename from hotspot/src/share/vm/gc_implementation/g1/g1RemSet.inline.hpp rename to hotspot/src/share/vm/gc/g1/g1RemSet.inline.hpp index ee32c64a426..4fd438ab61f 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.inline.hpp +++ b/hotspot/src/share/vm/gc/g1/g1RemSet.inline.hpp @@ -22,12 +22,12 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSET_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSET_INLINE_HPP +#ifndef SHARE_VM_GC_G1_G1REMSET_INLINE_HPP +#define SHARE_VM_GC_G1_G1REMSET_INLINE_HPP -#include "gc_implementation/g1/g1RemSet.hpp" -#include "gc_implementation/g1/heapRegion.hpp" -#include "gc_implementation/g1/heapRegionRemSet.hpp" +#include "gc/g1/g1RemSet.hpp" +#include "gc/g1/heapRegion.hpp" +#include "gc/g1/heapRegionRemSet.hpp" #include "oops/oop.inline.hpp" inline uint G1RemSet::n_workers() { @@ -75,4 +75,4 @@ inline void UpdateRSOopClosure::do_oop_work(T* p) { _rs->par_write_ref(_from, p, _worker_i); } -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSET_INLINE_HPP +#endif // SHARE_VM_GC_G1_G1REMSET_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp b/hotspot/src/share/vm/gc/g1/g1RemSetSummary.cpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp rename to hotspot/src/share/vm/gc/g1/g1RemSetSummary.cpp index 4f8a35254c3..f8308611d29 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp +++ b/hotspot/src/share/vm/gc/g1/g1RemSetSummary.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,13 +23,13 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/concurrentG1Refine.hpp" -#include "gc_implementation/g1/concurrentG1RefineThread.hpp" -#include "gc_implementation/g1/heapRegion.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1RemSet.inline.hpp" -#include "gc_implementation/g1/g1RemSetSummary.hpp" -#include "gc_implementation/g1/heapRegionRemSet.hpp" +#include "gc/g1/concurrentG1Refine.hpp" +#include "gc/g1/concurrentG1RefineThread.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1RemSet.inline.hpp" +#include "gc/g1/g1RemSetSummary.hpp" +#include "gc/g1/heapRegion.hpp" +#include "gc/g1/heapRegionRemSet.hpp" #include "runtime/thread.inline.hpp" class GetRSThreadVTimeClosure : public ThreadClosure { diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.hpp b/hotspot/src/share/vm/gc/g1/g1RemSetSummary.hpp similarity index 92% rename from hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.hpp rename to hotspot/src/share/vm/gc/g1/g1RemSetSummary.hpp index 2b083388fbc..b18fedd98ee 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.hpp +++ b/hotspot/src/share/vm/gc/g1/g1RemSetSummary.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSETSUMMARY_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSETSUMMARY_HPP +#ifndef SHARE_VM_GC_G1_G1REMSETSUMMARY_HPP +#define SHARE_VM_GC_G1_G1REMSETSUMMARY_HPP #include "utilities/ostream.hpp" @@ -115,4 +115,4 @@ public: } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSETSUMMARY_HPP +#endif // SHARE_VM_GC_G1_G1REMSETSUMMARY_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1RootProcessor.cpp b/hotspot/src/share/vm/gc/g1/g1RootProcessor.cpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/g1/g1RootProcessor.cpp rename to hotspot/src/share/vm/gc/g1/g1RootProcessor.cpp index cf1708146cd..2c2c68be549 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1RootProcessor.cpp +++ b/hotspot/src/share/vm/gc/g1/g1RootProcessor.cpp @@ -27,12 +27,12 @@ #include "classfile/stringTable.hpp" #include "classfile/systemDictionary.hpp" #include "code/codeCache.hpp" -#include "gc_implementation/g1/bufferingOopClosure.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1CollectorPolicy.hpp" -#include "gc_implementation/g1/g1GCPhaseTimes.hpp" -#include "gc_implementation/g1/g1RemSet.inline.hpp" -#include "gc_implementation/g1/g1RootProcessor.hpp" +#include "gc/g1/bufferingOopClosure.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1CollectorPolicy.hpp" +#include "gc/g1/g1GCPhaseTimes.hpp" +#include "gc/g1/g1RemSet.inline.hpp" +#include "gc/g1/g1RootProcessor.hpp" #include "memory/allocation.inline.hpp" #include "runtime/fprofiler.hpp" #include "runtime/mutex.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1RootProcessor.hpp b/hotspot/src/share/vm/gc/g1/g1RootProcessor.hpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/g1/g1RootProcessor.hpp rename to hotspot/src/share/vm/gc/g1/g1RootProcessor.hpp index 35ba27578f0..9be26d5259b 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1RootProcessor.hpp +++ b/hotspot/src/share/vm/gc/g1/g1RootProcessor.hpp @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1ROOTPROCESSOR_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1ROOTPROCESSOR_HPP +#ifndef SHARE_VM_GC_G1_G1ROOTPROCESSOR_HPP +#define SHARE_VM_GC_G1_G1ROOTPROCESSOR_HPP +#include "gc/shared/strongRootsScope.hpp" #include "memory/allocation.hpp" -#include "memory/strongRootsScope.hpp" #include "runtime/mutex.hpp" class CLDClosure; @@ -118,4 +118,4 @@ public: void set_num_workers(uint active_workers); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1ROOTPROCESSOR_HPP +#endif // SHARE_VM_GC_G1_G1ROOTPROCESSOR_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp b/hotspot/src/share/vm/gc/g1/g1SATBCardTableModRefBS.cpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp rename to hotspot/src/share/vm/gc/g1/g1SATBCardTableModRefBS.cpp index 1778abd10a7..4a4c91e9de7 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp +++ b/hotspot/src/share/vm/gc/g1/g1SATBCardTableModRefBS.cpp @@ -23,10 +23,10 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" -#include "gc_implementation/g1/heapRegion.hpp" -#include "gc_implementation/g1/satbQueue.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/heapRegion.hpp" +#include "gc/g1/satbQueue.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/mutexLocker.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp b/hotspot/src/share/vm/gc/g1/g1SATBCardTableModRefBS.hpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp rename to hotspot/src/share/vm/gc/g1/g1SATBCardTableModRefBS.hpp index 2abdf30d237..7f0f26c7d36 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp +++ b/hotspot/src/share/vm/gc/g1/g1SATBCardTableModRefBS.hpp @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1SATBCARDTABLEMODREFBS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1SATBCARDTABLEMODREFBS_HPP +#ifndef SHARE_VM_GC_G1_G1SATBCARDTABLEMODREFBS_HPP +#define SHARE_VM_GC_G1_G1SATBCARDTABLEMODREFBS_HPP -#include "gc_implementation/g1/g1RegionToSpaceMapper.hpp" -#include "memory/cardTableModRefBS.hpp" +#include "gc/g1/g1RegionToSpaceMapper.hpp" +#include "gc/shared/cardTableModRefBS.hpp" #include "memory/memRegion.hpp" #include "oops/oop.hpp" #include "utilities/macros.hpp" @@ -183,4 +183,4 @@ struct BarrierSet::GetName { static const BarrierSet::Name value = BarrierSet::G1SATBCTLogging; }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1SATBCARDTABLEMODREFBS_HPP +#endif // SHARE_VM_GC_G1_G1SATBCARDTABLEMODREFBS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedup.cpp b/hotspot/src/share/vm/gc/g1/g1StringDedup.cpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/g1/g1StringDedup.cpp rename to hotspot/src/share/vm/gc/g1/g1StringDedup.cpp index 4b3819800c3..fa99207ff35 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedup.cpp +++ b/hotspot/src/share/vm/gc/g1/g1StringDedup.cpp @@ -24,13 +24,13 @@ #include "precompiled.hpp" #include "classfile/javaClasses.inline.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1GCPhaseTimes.hpp" -#include "gc_implementation/g1/g1StringDedup.hpp" -#include "gc_implementation/g1/g1StringDedupQueue.hpp" -#include "gc_implementation/g1/g1StringDedupStat.hpp" -#include "gc_implementation/g1/g1StringDedupTable.hpp" -#include "gc_implementation/g1/g1StringDedupThread.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1GCPhaseTimes.hpp" +#include "gc/g1/g1StringDedup.hpp" +#include "gc/g1/g1StringDedupQueue.hpp" +#include "gc/g1/g1StringDedupStat.hpp" +#include "gc/g1/g1StringDedupTable.hpp" +#include "gc/g1/g1StringDedupThread.hpp" #include "runtime/atomic.inline.hpp" bool G1StringDedup::_enabled = false; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedup.hpp b/hotspot/src/share/vm/gc/g1/g1StringDedup.hpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/g1/g1StringDedup.hpp rename to hotspot/src/share/vm/gc/g1/g1StringDedup.hpp index 71c75bc2bbf..9191613787b 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedup.hpp +++ b/hotspot/src/share/vm/gc/g1/g1StringDedup.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1STRINGDEDUP_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1STRINGDEDUP_HPP +#ifndef SHARE_VM_GC_G1_G1STRINGDEDUP_HPP +#define SHARE_VM_GC_G1_G1STRINGDEDUP_HPP // // String Deduplication @@ -201,4 +201,4 @@ public: } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1STRINGDEDUP_HPP +#endif // SHARE_VM_GC_G1_G1STRINGDEDUP_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp b/hotspot/src/share/vm/gc/g1/g1StringDedupQueue.cpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp rename to hotspot/src/share/vm/gc/g1/g1StringDedupQueue.cpp index 1e2c5e4970f..8216889c8af 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp +++ b/hotspot/src/share/vm/gc/g1/g1StringDedupQueue.cpp @@ -24,10 +24,10 @@ #include "precompiled.hpp" #include "classfile/javaClasses.inline.hpp" -#include "gc_implementation/g1/g1CollectedHeap.hpp" -#include "gc_implementation/g1/g1StringDedup.hpp" -#include "gc_implementation/g1/g1StringDedupQueue.hpp" -#include "memory/gcLocker.hpp" +#include "gc/g1/g1CollectedHeap.hpp" +#include "gc/g1/g1StringDedup.hpp" +#include "gc/g1/g1StringDedupQueue.hpp" +#include "gc/shared/gcLocker.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/mutexLocker.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.hpp b/hotspot/src/share/vm/gc/g1/g1StringDedupQueue.hpp similarity index 93% rename from hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.hpp rename to hotspot/src/share/vm/gc/g1/g1StringDedupQueue.hpp index 99f555b7076..3c9bbd1360f 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.hpp +++ b/hotspot/src/share/vm/gc/g1/g1StringDedupQueue.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1STRINGDEDUPQUEUE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1STRINGDEDUPQUEUE_HPP +#ifndef SHARE_VM_GC_G1_G1STRINGDEDUPQUEUE_HPP +#define SHARE_VM_GC_G1_G1STRINGDEDUPQUEUE_HPP #include "memory/allocation.hpp" #include "oops/oop.hpp" @@ -98,4 +98,4 @@ public: static void verify(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1STRINGDEDUPQUEUE_HPP +#endif // SHARE_VM_GC_G1_G1STRINGDEDUPQUEUE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupStat.cpp b/hotspot/src/share/vm/gc/g1/g1StringDedupStat.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/g1/g1StringDedupStat.cpp rename to hotspot/src/share/vm/gc/g1/g1StringDedupStat.cpp index 2d5523cce9e..1e555875d78 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupStat.cpp +++ b/hotspot/src/share/vm/gc/g1/g1StringDedupStat.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1StringDedupStat.hpp" +#include "gc/g1/g1StringDedupStat.hpp" G1StringDedupStat::G1StringDedupStat() : _inspected(0), diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupStat.hpp b/hotspot/src/share/vm/gc/g1/g1StringDedupStat.hpp similarity index 93% rename from hotspot/src/share/vm/gc_implementation/g1/g1StringDedupStat.hpp rename to hotspot/src/share/vm/gc/g1/g1StringDedupStat.hpp index bfb55caa720..1e0367c013b 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupStat.hpp +++ b/hotspot/src/share/vm/gc/g1/g1StringDedupStat.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1STRINGDEDUPSTAT_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1STRINGDEDUPSTAT_HPP +#ifndef SHARE_VM_GC_G1_G1STRINGDEDUPSTAT_HPP +#define SHARE_VM_GC_G1_G1STRINGDEDUPSTAT_HPP #include "memory/allocation.hpp" #include "runtime/os.hpp" @@ -139,4 +139,4 @@ public: static void print_statistics(outputStream* st, const G1StringDedupStat& stat, bool total); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1STRINGDEDUPSTAT_HPP +#endif // SHARE_VM_GC_G1_G1STRINGDEDUPSTAT_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp b/hotspot/src/share/vm/gc/g1/g1StringDedupTable.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp rename to hotspot/src/share/vm/gc/g1/g1StringDedupTable.cpp index 7c998fa51e8..30dcb659757 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp +++ b/hotspot/src/share/vm/gc/g1/g1StringDedupTable.cpp @@ -25,14 +25,14 @@ #include "precompiled.hpp" #include "classfile/altHashing.hpp" #include "classfile/javaClasses.inline.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" -#include "gc_implementation/g1/g1StringDedup.hpp" -#include "gc_implementation/g1/g1StringDedupTable.hpp" -#include "memory/gcLocker.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/g1StringDedup.hpp" +#include "gc/g1/g1StringDedupTable.hpp" +#include "gc/shared/gcLocker.hpp" #include "memory/padded.inline.hpp" -#include "oops/typeArrayOop.hpp" #include "oops/oop.inline.hpp" +#include "oops/typeArrayOop.hpp" #include "runtime/mutexLocker.hpp" // diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.hpp b/hotspot/src/share/vm/gc/g1/g1StringDedupTable.hpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.hpp rename to hotspot/src/share/vm/gc/g1/g1StringDedupTable.hpp index 75f25f3db0c..56f1c2d1c06 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.hpp +++ b/hotspot/src/share/vm/gc/g1/g1StringDedupTable.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1STRINGDEDUPTABLE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1STRINGDEDUPTABLE_HPP +#ifndef SHARE_VM_GC_G1_G1STRINGDEDUPTABLE_HPP +#define SHARE_VM_GC_G1_G1STRINGDEDUPTABLE_HPP -#include "gc_implementation/g1/g1StringDedupStat.hpp" +#include "gc/g1/g1StringDedupStat.hpp" #include "runtime/mutexLocker.hpp" class G1StringDedupEntryCache; @@ -228,4 +228,4 @@ public: static void verify(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1STRINGDEDUPTABLE_HPP +#endif // SHARE_VM_GC_G1_G1STRINGDEDUPTABLE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupThread.cpp b/hotspot/src/share/vm/gc/g1/g1StringDedupThread.cpp similarity index 93% rename from hotspot/src/share/vm/gc_implementation/g1/g1StringDedupThread.cpp rename to hotspot/src/share/vm/gc/g1/g1StringDedupThread.cpp index 97cd68e5109..1a40c863a61 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupThread.cpp +++ b/hotspot/src/share/vm/gc/g1/g1StringDedupThread.cpp @@ -23,11 +23,11 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1Log.hpp" -#include "gc_implementation/g1/g1StringDedup.hpp" -#include "gc_implementation/g1/g1StringDedupTable.hpp" -#include "gc_implementation/g1/g1StringDedupThread.hpp" -#include "gc_implementation/g1/g1StringDedupQueue.hpp" +#include "gc/g1/g1Log.hpp" +#include "gc/g1/g1StringDedup.hpp" +#include "gc/g1/g1StringDedupQueue.hpp" +#include "gc/g1/g1StringDedupTable.hpp" +#include "gc/g1/g1StringDedupThread.hpp" #include "runtime/atomic.inline.hpp" G1StringDedupThread* G1StringDedupThread::_thread = NULL; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupThread.hpp b/hotspot/src/share/vm/gc/g1/g1StringDedupThread.hpp similarity index 83% rename from hotspot/src/share/vm/gc_implementation/g1/g1StringDedupThread.hpp rename to hotspot/src/share/vm/gc/g1/g1StringDedupThread.hpp index 9ae86042950..90d463db692 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupThread.hpp +++ b/hotspot/src/share/vm/gc/g1/g1StringDedupThread.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1STRINGDEDUPTHREAD_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1STRINGDEDUPTHREAD_HPP +#ifndef SHARE_VM_GC_G1_G1STRINGDEDUPTHREAD_HPP +#define SHARE_VM_GC_G1_G1STRINGDEDUPTHREAD_HPP -#include "gc_implementation/g1/g1StringDedupStat.hpp" -#include "gc_implementation/shared/concurrentGCThread.hpp" +#include "gc/g1/g1StringDedupStat.hpp" +#include "gc/shared/concurrentGCThread.hpp" // // The deduplication thread is where the actual deduplication occurs. It waits for @@ -54,4 +54,4 @@ public: virtual void run(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1STRINGDEDUPTHREAD_HPP +#endif // SHARE_VM_GC_G1_G1STRINGDEDUPTHREAD_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1YCTypes.hpp b/hotspot/src/share/vm/gc/g1/g1YCTypes.hpp similarity index 86% rename from hotspot/src/share/vm/gc_implementation/g1/g1YCTypes.hpp rename to hotspot/src/share/vm/gc/g1/g1YCTypes.hpp index 7d2216059cb..7fd99270bb7 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1YCTypes.hpp +++ b/hotspot/src/share/vm/gc/g1/g1YCTypes.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1YCTYPES_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1YCTYPES_HPP +#ifndef SHARE_VM_GC_G1_G1YCTYPES_HPP +#define SHARE_VM_GC_G1_G1YCTYPES_HPP #include "utilities/debug.hpp" @@ -48,4 +48,4 @@ class G1YCTypeHelper { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1YCTYPES_HPP +#endif // SHARE_VM_GC_G1_G1YCTYPES_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.cpp b/hotspot/src/share/vm/gc/g1/g1_globals.cpp similarity index 92% rename from hotspot/src/share/vm/gc_implementation/g1/g1_globals.cpp rename to hotspot/src/share/vm/gc/g1/g1_globals.cpp index af7405df214..6e869d2d1e0 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.cpp +++ b/hotspot/src/share/vm/gc/g1/g1_globals.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1_globals.hpp" +#include "gc/g1/g1_globals.hpp" G1_FLAGS(MATERIALIZE_DEVELOPER_FLAG, MATERIALIZE_PD_DEVELOPER_FLAG, \ MATERIALIZE_PRODUCT_FLAG, MATERIALIZE_PD_PRODUCT_FLAG, \ diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp b/hotspot/src/share/vm/gc/g1/g1_globals.hpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp rename to hotspot/src/share/vm/gc/g1/g1_globals.hpp index 859cfc2fdbe..bfeeea94ca1 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp +++ b/hotspot/src/share/vm/gc/g1/g1_globals.hpp @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1_GLOBALS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1_GLOBALS_HPP +#ifndef SHARE_VM_GC_G1_G1_GLOBALS_HPP +#define SHARE_VM_GC_G1_G1_GLOBALS_HPP #include "runtime/globals.hpp" // @@ -316,4 +316,4 @@ G1_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_EXPERIMENTAL_FLAG, DECLARE_NOTPRODUCT_FLAG, DECLARE_MANAGEABLE_FLAG, DECLARE_PRODUCT_RW_FLAG) -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1_GLOBALS_HPP +#endif // SHARE_VM_GC_G1_G1_GLOBALS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1_specialized_oop_closures.hpp b/hotspot/src/share/vm/gc/g1/g1_specialized_oop_closures.hpp similarity index 91% rename from hotspot/src/share/vm/gc_implementation/g1/g1_specialized_oop_closures.hpp rename to hotspot/src/share/vm/gc/g1/g1_specialized_oop_closures.hpp index f3c49d7fc15..68708b891cc 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1_specialized_oop_closures.hpp +++ b/hotspot/src/share/vm/gc/g1/g1_specialized_oop_closures.hpp @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1_SPECIALIZED_OOP_CLOSURES_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_G1_SPECIALIZED_OOP_CLOSURES_HPP +#ifndef SHARE_VM_GC_G1_G1_SPECIALIZED_OOP_CLOSURES_HPP +#define SHARE_VM_GC_G1_G1_SPECIALIZED_OOP_CLOSURES_HPP // The following OopClosure types get specialized versions of // "oop_oop_iterate" that invoke the closures' do_oop methods @@ -58,4 +58,4 @@ class G1UpdateRSOrPushRefOopClosure; f(G1InvokeIfNotTriggeredClosure,_nv) \ f(G1UpdateRSOrPushRefOopClosure,_nv) -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1_SPECIALIZED_OOP_CLOSURES_HPP +#endif // SHARE_VM_GC_G1_G1_SPECIALIZED_OOP_CLOSURES_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.cpp b/hotspot/src/share/vm/gc/g1/hSpaceCounters.cpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.cpp rename to hotspot/src/share/vm/gc/g1/hSpaceCounters.cpp index 9aa76f31736..7a5afddfedf 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.cpp +++ b/hotspot/src/share/vm/gc/g1/hSpaceCounters.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/hSpaceCounters.hpp" -#include "memory/generation.hpp" +#include "gc/g1/hSpaceCounters.hpp" +#include "gc/shared/generation.hpp" #include "memory/resourceArea.hpp" HSpaceCounters::HSpaceCounters(const char* name, diff --git a/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.hpp b/hotspot/src/share/vm/gc/g1/hSpaceCounters.hpp similarity index 87% rename from hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.hpp rename to hotspot/src/share/vm/gc/g1/hSpaceCounters.hpp index f1722677775..fd7ed263415 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.hpp +++ b/hotspot/src/share/vm/gc/g1/hSpaceCounters.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_HSPACECOUNTERS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_HSPACECOUNTERS_HPP +#ifndef SHARE_VM_GC_G1_HSPACECOUNTERS_HPP +#define SHARE_VM_GC_G1_HSPACECOUNTERS_HPP -#include "utilities/macros.hpp" -#include "gc_implementation/shared/generationCounters.hpp" -#include "memory/generation.hpp" +#include "gc/shared/generation.hpp" +#include "gc/shared/generationCounters.hpp" #include "runtime/perfData.hpp" +#include "utilities/macros.hpp" // A HSpaceCounter is a holder class for performance counters // that track a collections (logical spaces) in a heap; @@ -83,4 +83,4 @@ class HSpaceCounters: public CHeapObj { const char* name_space() const { return _name_space; } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_HSPACECOUNTERS_HPP +#endif // SHARE_VM_GC_G1_HSPACECOUNTERS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp b/hotspot/src/share/vm/gc/g1/heapRegion.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp rename to hotspot/src/share/vm/gc/g1/heapRegion.cpp index 77f6c413287..f336738ea97 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp +++ b/hotspot/src/share/vm/gc/g1/heapRegion.cpp @@ -24,17 +24,17 @@ #include "precompiled.hpp" #include "code/nmethod.hpp" -#include "gc_implementation/g1/g1BlockOffsetTable.inline.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1OopClosures.inline.hpp" -#include "gc_implementation/g1/heapRegion.inline.hpp" -#include "gc_implementation/g1/heapRegionBounds.inline.hpp" -#include "gc_implementation/g1/heapRegionRemSet.hpp" -#include "gc_implementation/g1/heapRegionManager.inline.hpp" -#include "gc_implementation/shared/liveRange.hpp" -#include "memory/genOopClosures.inline.hpp" +#include "gc/g1/g1BlockOffsetTable.inline.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1OopClosures.inline.hpp" +#include "gc/g1/heapRegion.inline.hpp" +#include "gc/g1/heapRegionBounds.inline.hpp" +#include "gc/g1/heapRegionManager.inline.hpp" +#include "gc/g1/heapRegionRemSet.hpp" +#include "gc/shared/genOopClosures.inline.hpp" +#include "gc/shared/liveRange.hpp" +#include "gc/shared/space.inline.hpp" #include "memory/iterator.hpp" -#include "memory/space.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/orderAccess.inline.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp b/hotspot/src/share/vm/gc/g1/heapRegion.hpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp rename to hotspot/src/share/vm/gc/g1/heapRegion.hpp index 2e971906650..7ea1fe95259 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp +++ b/hotspot/src/share/vm/gc/g1/heapRegion.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,16 +22,16 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGION_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGION_HPP +#ifndef SHARE_VM_GC_G1_HEAPREGION_HPP +#define SHARE_VM_GC_G1_HEAPREGION_HPP -#include "gc_implementation/g1/g1AllocationContext.hpp" -#include "gc_implementation/g1/g1BlockOffsetTable.hpp" -#include "gc_implementation/g1/heapRegionType.hpp" -#include "gc_implementation/g1/survRateGroup.hpp" -#include "gc_implementation/shared/ageTable.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" -#include "memory/watermark.hpp" +#include "gc/g1/g1AllocationContext.hpp" +#include "gc/g1/g1BlockOffsetTable.hpp" +#include "gc/g1/heapRegionType.hpp" +#include "gc/g1/survRateGroup.hpp" +#include "gc/shared/ageTable.hpp" +#include "gc/shared/spaceDecorator.hpp" +#include "gc/shared/watermark.hpp" #include "utilities/macros.hpp" // A HeapRegion is the smallest piece of a G1CollectedHeap that @@ -790,4 +790,4 @@ class HeapRegionClosure : public StackObj { bool complete() { return _complete; } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGION_HPP +#endif // SHARE_VM_GC_G1_HEAPREGION_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.inline.hpp b/hotspot/src/share/vm/gc/g1/heapRegion.inline.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/g1/heapRegion.inline.hpp rename to hotspot/src/share/vm/gc/g1/heapRegion.inline.hpp index 955b8489cc0..e7e36501fd4 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.inline.hpp +++ b/hotspot/src/share/vm/gc/g1/heapRegion.inline.hpp @@ -22,13 +22,13 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGION_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGION_INLINE_HPP +#ifndef SHARE_VM_GC_G1_HEAPREGION_INLINE_HPP +#define SHARE_VM_GC_G1_HEAPREGION_INLINE_HPP -#include "gc_implementation/g1/g1BlockOffsetTable.inline.hpp" -#include "gc_implementation/g1/g1CollectedHeap.hpp" -#include "gc_implementation/g1/heapRegion.hpp" -#include "memory/space.hpp" +#include "gc/g1/g1BlockOffsetTable.inline.hpp" +#include "gc/g1/g1CollectedHeap.hpp" +#include "gc/g1/heapRegion.hpp" +#include "gc/shared/space.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" @@ -200,4 +200,4 @@ inline bool HeapRegion::in_collection_set() const { return G1CollectedHeap::heap()->is_in_cset(this); } -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGION_INLINE_HPP +#endif // SHARE_VM_GC_G1_HEAPREGION_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionBounds.hpp b/hotspot/src/share/vm/gc/g1/heapRegionBounds.hpp similarity index 88% rename from hotspot/src/share/vm/gc_implementation/g1/heapRegionBounds.hpp rename to hotspot/src/share/vm/gc/g1/heapRegionBounds.hpp index 1da7f24c1d8..30d353454f3 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionBounds.hpp +++ b/hotspot/src/share/vm/gc/g1/heapRegionBounds.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONBOUNDS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONBOUNDS_HPP +#ifndef SHARE_VM_GC_G1_HEAPREGIONBOUNDS_HPP +#define SHARE_VM_GC_G1_HEAPREGIONBOUNDS_HPP class HeapRegionBounds : public AllStatic { private: @@ -49,4 +49,4 @@ public: static inline size_t target_number(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONBOUNDS_HPP +#endif // SHARE_VM_GC_G1_HEAPREGIONBOUNDS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionBounds.inline.hpp b/hotspot/src/share/vm/gc/g1/heapRegionBounds.inline.hpp similarity index 83% rename from hotspot/src/share/vm/gc_implementation/g1/heapRegionBounds.inline.hpp rename to hotspot/src/share/vm/gc/g1/heapRegionBounds.inline.hpp index 061d1a30712..29530a1077a 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionBounds.inline.hpp +++ b/hotspot/src/share/vm/gc/g1/heapRegionBounds.inline.hpp @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONBOUNDS_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONBOUNDS_INLINE_HPP +#ifndef SHARE_VM_GC_G1_HEAPREGIONBOUNDS_INLINE_HPP +#define SHARE_VM_GC_G1_HEAPREGIONBOUNDS_INLINE_HPP -#include "gc_implementation/g1/heapRegionBounds.hpp" +#include "gc/g1/heapRegionBounds.hpp" size_t HeapRegionBounds::min_size() { return MIN_REGION_SIZE; @@ -39,4 +39,4 @@ size_t HeapRegionBounds::target_number() { return TARGET_REGION_NUMBER; } -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONBOUNDS_INLINE_HPP +#endif // SHARE_VM_GC_G1_HEAPREGIONBOUNDS_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.cpp b/hotspot/src/share/vm/gc/g1/heapRegionManager.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.cpp rename to hotspot/src/share/vm/gc/g1/heapRegionManager.cpp index 1c28a8e1f5d..7406e6342ec 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.cpp +++ b/hotspot/src/share/vm/gc/g1/heapRegionManager.cpp @@ -23,11 +23,11 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/heapRegion.hpp" -#include "gc_implementation/g1/heapRegionManager.inline.hpp" -#include "gc_implementation/g1/heapRegionSet.inline.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/concurrentG1Refine.hpp" +#include "gc/g1/concurrentG1Refine.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/heapRegion.hpp" +#include "gc/g1/heapRegionManager.inline.hpp" +#include "gc/g1/heapRegionSet.inline.hpp" #include "memory/allocation.hpp" void HeapRegionManager::initialize(G1RegionToSpaceMapper* heap_storage, diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.hpp b/hotspot/src/share/vm/gc/g1/heapRegionManager.hpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.hpp rename to hotspot/src/share/vm/gc/g1/heapRegionManager.hpp index 1ac538608d3..d287216c1d0 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.hpp +++ b/hotspot/src/share/vm/gc/g1/heapRegionManager.hpp @@ -22,12 +22,12 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONMANAGER_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONMANAGER_HPP +#ifndef SHARE_VM_GC_G1_HEAPREGIONMANAGER_HPP +#define SHARE_VM_GC_G1_HEAPREGIONMANAGER_HPP -#include "gc_implementation/g1/g1BiasedArray.hpp" -#include "gc_implementation/g1/g1RegionToSpaceMapper.hpp" -#include "gc_implementation/g1/heapRegionSet.hpp" +#include "gc/g1/g1BiasedArray.hpp" +#include "gc/g1/g1RegionToSpaceMapper.hpp" +#include "gc/g1/heapRegionSet.hpp" #include "services/memoryUsage.hpp" class HeapRegion; @@ -265,5 +265,5 @@ class HeapRegionClaimer : public StackObj { // Claim the given region, returns true if successfully claimed. bool claim_region(uint region_index); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONMANAGER_HPP +#endif // SHARE_VM_GC_G1_HEAPREGIONMANAGER_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.inline.hpp b/hotspot/src/share/vm/gc/g1/heapRegionManager.inline.hpp similarity index 81% rename from hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.inline.hpp rename to hotspot/src/share/vm/gc/g1/heapRegionManager.inline.hpp index 96bc92fcec2..8120758be8b 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.inline.hpp +++ b/hotspot/src/share/vm/gc/g1/heapRegionManager.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,12 +22,12 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONMANAGER_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONMANAGER_INLINE_HPP +#ifndef SHARE_VM_GC_G1_HEAPREGIONMANAGER_INLINE_HPP +#define SHARE_VM_GC_G1_HEAPREGIONMANAGER_INLINE_HPP -#include "gc_implementation/g1/heapRegion.hpp" -#include "gc_implementation/g1/heapRegionManager.hpp" -#include "gc_implementation/g1/heapRegionSet.inline.hpp" +#include "gc/g1/heapRegion.hpp" +#include "gc/g1/heapRegionManager.hpp" +#include "gc/g1/heapRegionSet.inline.hpp" inline HeapRegion* HeapRegionManager::addr_to_region(HeapWord* addr) const { assert(addr < heap_end(), @@ -55,4 +55,4 @@ inline void HeapRegionManager::allocate_free_regions_starting_at(uint first, uin _free_list.remove_starting_at(at(first), num_regions); } -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONMANAGER_INLINE_HPP +#endif // SHARE_VM_GC_G1_HEAPREGIONMANAGER_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp b/hotspot/src/share/vm/gc/g1/heapRegionRemSet.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp rename to hotspot/src/share/vm/gc/g1/heapRegionRemSet.cpp index a8416bc9984..02ac68eee8d 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp +++ b/hotspot/src/share/vm/gc/g1/heapRegionRemSet.cpp @@ -23,14 +23,14 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/concurrentG1Refine.hpp" -#include "gc_implementation/g1/g1BlockOffsetTable.inline.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/heapRegionRemSet.hpp" -#include "gc_implementation/g1/heapRegionManager.inline.hpp" +#include "gc/g1/concurrentG1Refine.hpp" +#include "gc/g1/g1BlockOffsetTable.inline.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/heapRegionManager.inline.hpp" +#include "gc/g1/heapRegionRemSet.hpp" +#include "gc/shared/space.inline.hpp" #include "memory/allocation.hpp" #include "memory/padded.inline.hpp" -#include "memory/space.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" #include "utilities/bitMap.inline.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp b/hotspot/src/share/vm/gc/g1/heapRegionRemSet.hpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp rename to hotspot/src/share/vm/gc/g1/heapRegionRemSet.hpp index adbee92d06a..3b07c65d1bf 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp +++ b/hotspot/src/share/vm/gc/g1/heapRegionRemSet.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONREMSET_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONREMSET_HPP +#ifndef SHARE_VM_GC_G1_HEAPREGIONREMSET_HPP +#define SHARE_VM_GC_G1_HEAPREGIONREMSET_HPP -#include "gc_implementation/g1/g1CodeCacheRemSet.hpp" -#include "gc_implementation/g1/sparsePRT.hpp" +#include "gc/g1/g1CodeCacheRemSet.hpp" +#include "gc/g1/sparsePRT.hpp" // Remembered set for a heap region. Represent a set of "cards" that // contain pointers into the owner heap region. Cards are defined somewhat @@ -487,4 +487,4 @@ class HeapRegionRemSetIterator : public StackObj { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONREMSET_HPP +#endif // SHARE_VM_GC_G1_HEAPREGIONREMSET_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.cpp b/hotspot/src/share/vm/gc/g1/heapRegionSet.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.cpp rename to hotspot/src/share/vm/gc/g1/heapRegionSet.cpp index 7f55ac0540d..2f844fd7eb3 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.cpp +++ b/hotspot/src/share/vm/gc/g1/heapRegionSet.cpp @@ -23,9 +23,9 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/heapRegionRemSet.hpp" -#include "gc_implementation/g1/heapRegionSet.inline.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/heapRegionRemSet.hpp" +#include "gc/g1/heapRegionSet.inline.hpp" uint FreeRegionList::_unrealistically_long_length = 0; diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.hpp b/hotspot/src/share/vm/gc/g1/heapRegionSet.hpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.hpp rename to hotspot/src/share/vm/gc/g1/heapRegionSet.hpp index 9a9267c4b9b..f5325e552ee 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.hpp +++ b/hotspot/src/share/vm/gc/g1/heapRegionSet.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSET_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSET_HPP +#ifndef SHARE_VM_GC_G1_HEAPREGIONSET_HPP +#define SHARE_VM_GC_G1_HEAPREGIONSET_HPP -#include "gc_implementation/g1/heapRegion.hpp" +#include "gc/g1/heapRegion.hpp" // Large buffer for some cases where the output might be larger than normal. #define HRS_ERR_MSG_BUFSZ 512 @@ -292,4 +292,4 @@ public: } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSET_HPP +#endif // SHARE_VM_GC_G1_HEAPREGIONSET_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.inline.hpp b/hotspot/src/share/vm/gc/g1/heapRegionSet.inline.hpp similarity index 92% rename from hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.inline.hpp rename to hotspot/src/share/vm/gc/g1/heapRegionSet.inline.hpp index f1fce751a2e..c9936421a5f 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.inline.hpp +++ b/hotspot/src/share/vm/gc/g1/heapRegionSet.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSET_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSET_INLINE_HPP +#ifndef SHARE_VM_GC_G1_HEAPREGIONSET_INLINE_HPP +#define SHARE_VM_GC_G1_HEAPREGIONSET_INLINE_HPP -#include "gc_implementation/g1/heapRegionSet.hpp" +#include "gc/g1/heapRegionSet.hpp" inline void HeapRegionSetBase::add(HeapRegion* hr) { check_mt_safety(); @@ -148,5 +148,5 @@ inline HeapRegion* FreeRegionList::remove_region(bool from_head) { return hr; } -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSET_INLINE_HPP +#endif // SHARE_VM_GC_G1_HEAPREGIONSET_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionType.cpp b/hotspot/src/share/vm/gc/g1/heapRegionType.cpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/g1/heapRegionType.cpp rename to hotspot/src/share/vm/gc/g1/heapRegionType.cpp index 952056067fd..cee1b9f5146 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionType.cpp +++ b/hotspot/src/share/vm/gc/g1/heapRegionType.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/heapRegionType.hpp" +#include "gc/g1/heapRegionType.hpp" bool HeapRegionType::is_valid(Tag tag) { switch (tag) { diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionType.hpp b/hotspot/src/share/vm/gc/g1/heapRegionType.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/g1/heapRegionType.hpp rename to hotspot/src/share/vm/gc/g1/heapRegionType.hpp index ef65a172d81..199502adcf4 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionType.hpp +++ b/hotspot/src/share/vm/gc/g1/heapRegionType.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONTYPE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONTYPE_HPP +#ifndef SHARE_VM_GC_G1_HEAPREGIONTYPE_HPP +#define SHARE_VM_GC_G1_HEAPREGIONTYPE_HPP #include "memory/allocation.hpp" @@ -131,4 +131,4 @@ public: HeapRegionType() : _tag(FreeTag) { hrt_assert_is_valid(_tag); } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONTYPE_HPP +#endif // SHARE_VM_GC_G1_HEAPREGIONTYPE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp b/hotspot/src/share/vm/gc/g1/ptrQueue.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp rename to hotspot/src/share/vm/gc/g1/ptrQueue.cpp index aae06af1622..42aa91175b0 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp +++ b/hotspot/src/share/vm/gc/g1/ptrQueue.cpp @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/ptrQueue.hpp" +#include "gc/g1/ptrQueue.hpp" #include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" #include "runtime/mutex.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.hpp b/hotspot/src/share/vm/gc/g1/ptrQueue.hpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/g1/ptrQueue.hpp rename to hotspot/src/share/vm/gc/g1/ptrQueue.hpp index 988e90ba8c9..b4071450f40 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.hpp +++ b/hotspot/src/share/vm/gc/g1/ptrQueue.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_PTRQUEUE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_PTRQUEUE_HPP +#ifndef SHARE_VM_GC_G1_PTRQUEUE_HPP +#define SHARE_VM_GC_G1_PTRQUEUE_HPP #include "memory/allocation.hpp" #include "utilities/sizes.hpp" @@ -316,4 +316,4 @@ public: void notify_if_necessary(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_PTRQUEUE_HPP +#endif // SHARE_VM_GC_G1_PTRQUEUE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp b/hotspot/src/share/vm/gc/g1/satbQueue.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp rename to hotspot/src/share/vm/gc/g1/satbQueue.cpp index ddaa28cf140..b35f294e672 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp +++ b/hotspot/src/share/vm/gc/g1/satbQueue.cpp @@ -23,9 +23,9 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/satbQueue.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/satbQueue.hpp" +#include "gc/shared/collectedHeap.hpp" #include "memory/allocation.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/mutexLocker.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/satbQueue.hpp b/hotspot/src/share/vm/gc/g1/satbQueue.hpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/g1/satbQueue.hpp rename to hotspot/src/share/vm/gc/g1/satbQueue.hpp index 5948959190f..2e916a7c9a8 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/satbQueue.hpp +++ b/hotspot/src/share/vm/gc/g1/satbQueue.hpp @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_SATBQUEUE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_SATBQUEUE_HPP +#ifndef SHARE_VM_GC_G1_SATBQUEUE_HPP +#define SHARE_VM_GC_G1_SATBQUEUE_HPP +#include "gc/g1/ptrQueue.hpp" #include "memory/allocation.hpp" -#include "gc_implementation/g1/ptrQueue.hpp" class JavaThread; class SATBMarkQueueSet; @@ -120,4 +120,4 @@ public: void abandon_partial_marking(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_SATBQUEUE_HPP +#endif // SHARE_VM_GC_G1_SATBQUEUE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp b/hotspot/src/share/vm/gc/g1/sparsePRT.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp rename to hotspot/src/share/vm/gc/g1/sparsePRT.cpp index 62646b00f3b..f5be62e366a 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp +++ b/hotspot/src/share/vm/gc/g1/sparsePRT.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,12 +23,12 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/heapRegion.hpp" -#include "gc_implementation/g1/heapRegionRemSet.hpp" -#include "gc_implementation/g1/sparsePRT.hpp" +#include "gc/g1/heapRegion.hpp" +#include "gc/g1/heapRegionRemSet.hpp" +#include "gc/g1/sparsePRT.hpp" +#include "gc/shared/cardTableModRefBS.hpp" +#include "gc/shared/space.inline.hpp" #include "memory/allocation.inline.hpp" -#include "memory/cardTableModRefBS.hpp" -#include "memory/space.inline.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/mutexLocker.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp b/hotspot/src/share/vm/gc/g1/sparsePRT.hpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp rename to hotspot/src/share/vm/gc/g1/sparsePRT.hpp index a534ceca5f1..b5ea3cde9a9 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp +++ b/hotspot/src/share/vm/gc/g1/sparsePRT.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_SPARSEPRT_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_SPARSEPRT_HPP +#ifndef SHARE_VM_GC_G1_SPARSEPRT_HPP +#define SHARE_VM_GC_G1_SPARSEPRT_HPP -#include "gc_implementation/g1/g1CollectedHeap.hpp" -#include "gc_implementation/g1/heapRegion.hpp" +#include "gc/g1/g1CollectedHeap.hpp" +#include "gc/g1/heapRegion.hpp" +#include "gc/shared/cardTableModRefBS.hpp" #include "memory/allocation.hpp" -#include "memory/cardTableModRefBS.hpp" #include "runtime/mutex.hpp" #include "utilities/globalDefinitions.hpp" @@ -331,4 +331,4 @@ public: SparsePRT* tail() { return _tail; } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_SPARSEPRT_HPP +#endif // SHARE_VM_GC_G1_SPARSEPRT_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp b/hotspot/src/share/vm/gc/g1/survRateGroup.cpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp rename to hotspot/src/share/vm/gc/g1/survRateGroup.cpp index 13c812499d3..a4a58aa4e28 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp +++ b/hotspot/src/share/vm/gc/g1/survRateGroup.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,10 +23,10 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1CollectorPolicy.hpp" -#include "gc_implementation/g1/heapRegion.hpp" -#include "gc_implementation/g1/survRateGroup.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1CollectorPolicy.hpp" +#include "gc/g1/heapRegion.hpp" +#include "gc/g1/survRateGroup.hpp" #include "memory/allocation.hpp" SurvRateGroup::SurvRateGroup(G1CollectorPolicy* g1p, diff --git a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp b/hotspot/src/share/vm/gc/g1/survRateGroup.hpp similarity index 92% rename from hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp rename to hotspot/src/share/vm/gc/g1/survRateGroup.hpp index fade2442d97..cb5d2872680 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp +++ b/hotspot/src/share/vm/gc/g1/survRateGroup.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_SURVRATEGROUP_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_SURVRATEGROUP_HPP +#ifndef SHARE_VM_GC_G1_SURVRATEGROUP_HPP +#define SHARE_VM_GC_G1_SURVRATEGROUP_HPP #include "utilities/numberSeq.hpp" @@ -98,4 +98,4 @@ public: #endif // PRODUCT }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_SURVRATEGROUP_HPP +#endif // SHARE_VM_GC_G1_SURVRATEGROUP_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/suspendibleThreadSet.cpp b/hotspot/src/share/vm/gc/g1/suspendibleThreadSet.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/shared/suspendibleThreadSet.cpp rename to hotspot/src/share/vm/gc/g1/suspendibleThreadSet.cpp index 6e9992a047a..d15bef9254a 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/suspendibleThreadSet.cpp +++ b/hotspot/src/share/vm/gc/g1/suspendibleThreadSet.cpp @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/suspendibleThreadSet.hpp" +#include "gc/g1/suspendibleThreadSet.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/thread.inline.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/shared/suspendibleThreadSet.hpp b/hotspot/src/share/vm/gc/g1/suspendibleThreadSet.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/shared/suspendibleThreadSet.hpp rename to hotspot/src/share/vm/gc/g1/suspendibleThreadSet.hpp index c171d405f72..33cbe00f40c 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/suspendibleThreadSet.hpp +++ b/hotspot/src/share/vm/gc/g1/suspendibleThreadSet.hpp @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_SUSPENDIBLETHREADSET_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_SUSPENDIBLETHREADSET_HPP +#ifndef SHARE_VM_GC_G1_SUSPENDIBLETHREADSET_HPP +#define SHARE_VM_GC_G1_SUSPENDIBLETHREADSET_HPP #include "memory/allocation.hpp" @@ -114,4 +114,4 @@ public: } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_SUSPENDIBLETHREADSET_HPP +#endif // SHARE_VM_GC_G1_SUSPENDIBLETHREADSET_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/vmStructs_g1.hpp b/hotspot/src/share/vm/gc/g1/vmStructs_g1.hpp similarity index 93% rename from hotspot/src/share/vm/gc_implementation/g1/vmStructs_g1.hpp rename to hotspot/src/share/vm/gc/g1/vmStructs_g1.hpp index 58f70a363bd..bd333c20868 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/vmStructs_g1.hpp +++ b/hotspot/src/share/vm/gc/g1/vmStructs_g1.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,12 +22,12 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_VMSTRUCTS_G1_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_VMSTRUCTS_G1_HPP +#ifndef SHARE_VM_GC_G1_VMSTRUCTS_G1_HPP +#define SHARE_VM_GC_G1_VMSTRUCTS_G1_HPP -#include "gc_implementation/g1/heapRegion.hpp" -#include "gc_implementation/g1/heapRegionManager.hpp" -#include "gc_implementation/g1/g1CollectedHeap.hpp" +#include "gc/g1/g1CollectedHeap.hpp" +#include "gc/g1/heapRegion.hpp" +#include "gc/g1/heapRegionManager.hpp" #define VM_STRUCTS_G1(nonstatic_field, static_field) \ \ @@ -86,4 +86,4 @@ declare_toplevel_type(G1Allocator*) \ -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_VMSTRUCTS_G1_HPP +#endif // SHARE_VM_GC_G1_VMSTRUCTS_G1_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp b/hotspot/src/share/vm/gc/g1/vm_operations_g1.cpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp rename to hotspot/src/share/vm/gc/g1/vm_operations_g1.cpp index c4ffabc3f7e..676d0751da5 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp +++ b/hotspot/src/share/vm/gc/g1/vm_operations_g1.cpp @@ -23,15 +23,14 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/concurrentMarkThread.inline.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1CollectorPolicy.hpp" -#include "gc_implementation/g1/g1Log.hpp" -#include "gc_implementation/g1/vm_operations_g1.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTraceTime.hpp" -#include "gc_implementation/shared/isGCActiveMark.hpp" -#include "gc_implementation/g1/vm_operations_g1.hpp" +#include "gc/g1/concurrentMarkThread.inline.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1CollectorPolicy.hpp" +#include "gc/g1/g1Log.hpp" +#include "gc/g1/vm_operations_g1.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTraceTime.hpp" +#include "gc/shared/isGCActiveMark.hpp" #include "runtime/interfaceSupport.hpp" VM_G1CollectForAllocation::VM_G1CollectForAllocation(uint gc_count_before, diff --git a/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.hpp b/hotspot/src/share/vm/gc/g1/vm_operations_g1.hpp similarity index 93% rename from hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.hpp rename to hotspot/src/share/vm/gc/g1/vm_operations_g1.hpp index 265eb37d36f..e4149aaa52d 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.hpp +++ b/hotspot/src/share/vm/gc/g1/vm_operations_g1.hpp @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_VM_OPERATIONS_G1_HPP -#define SHARE_VM_GC_IMPLEMENTATION_G1_VM_OPERATIONS_G1_HPP +#ifndef SHARE_VM_GC_G1_VM_OPERATIONS_G1_HPP +#define SHARE_VM_GC_G1_VM_OPERATIONS_G1_HPP -#include "gc_implementation/g1/g1AllocationContext.hpp" -#include "gc_implementation/shared/vmGCOperations.hpp" +#include "gc/g1/g1AllocationContext.hpp" +#include "gc/shared/vmGCOperations.hpp" // VM_operations for the G1 collector. // VM_GC_Operation: @@ -122,4 +122,4 @@ public: } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_G1_VM_OPERATIONS_G1_HPP +#endif // SHARE_VM_GC_G1_VM_OPERATIONS_G1_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.cpp b/hotspot/src/share/vm/gc/parallel/adjoiningGenerations.cpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.cpp rename to hotspot/src/share/vm/gc/parallel/adjoiningGenerations.cpp index 4ad67face5e..9f9361afcad 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.cpp +++ b/hotspot/src/share/vm/gc/parallel/adjoiningGenerations.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,10 +23,10 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/adjoiningGenerations.hpp" -#include "gc_implementation/parallelScavenge/adjoiningVirtualSpaces.hpp" -#include "gc_implementation/parallelScavenge/generationSizer.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" +#include "gc/parallel/adjoiningGenerations.hpp" +#include "gc/parallel/adjoiningVirtualSpaces.hpp" +#include "gc/parallel/generationSizer.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" // If boundary moving is being used, create the young gen and old // gen with ASPSYoungGen and ASPSOldGen, respectively. Revert to diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp b/hotspot/src/share/vm/gc/parallel/adjoiningGenerations.hpp similarity index 83% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp rename to hotspot/src/share/vm/gc/parallel/adjoiningGenerations.hpp index 238802070d5..3c0067a0909 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp +++ b/hotspot/src/share/vm/gc/parallel/adjoiningGenerations.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_ADJOININGGENERATIONS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_ADJOININGGENERATIONS_HPP +#ifndef SHARE_VM_GC_PARALLEL_ADJOININGGENERATIONS_HPP +#define SHARE_VM_GC_PARALLEL_ADJOININGGENERATIONS_HPP -#include "gc_implementation/parallelScavenge/adjoiningVirtualSpaces.hpp" -#include "gc_implementation/parallelScavenge/asPSOldGen.hpp" -#include "gc_implementation/parallelScavenge/asPSYoungGen.hpp" -#include "gc_implementation/parallelScavenge/generationSizer.hpp" +#include "gc/parallel/adjoiningVirtualSpaces.hpp" +#include "gc/parallel/asPSOldGen.hpp" +#include "gc/parallel/asPSYoungGen.hpp" +#include "gc/parallel/generationSizer.hpp" // Contains two generations that both use an AdjoiningVirtualSpaces. @@ -77,4 +77,4 @@ class AdjoiningGenerations : public CHeapObj { size_t reserved_byte_size(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_ADJOININGGENERATIONS_HPP +#endif // SHARE_VM_GC_PARALLEL_ADJOININGGENERATIONS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningVirtualSpaces.cpp b/hotspot/src/share/vm/gc/parallel/adjoiningVirtualSpaces.cpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningVirtualSpaces.cpp rename to hotspot/src/share/vm/gc/parallel/adjoiningVirtualSpaces.cpp index e5ca1f5c097..cce89dd0893 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningVirtualSpaces.cpp +++ b/hotspot/src/share/vm/gc/parallel/adjoiningVirtualSpaces.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/adjoiningVirtualSpaces.hpp" +#include "gc/parallel/adjoiningVirtualSpaces.hpp" #include "memory/allocation.inline.hpp" #include "runtime/java.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningVirtualSpaces.hpp b/hotspot/src/share/vm/gc/parallel/adjoiningVirtualSpaces.hpp similarity index 91% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningVirtualSpaces.hpp rename to hotspot/src/share/vm/gc/parallel/adjoiningVirtualSpaces.hpp index ed860c204a0..7078ab9db38 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningVirtualSpaces.hpp +++ b/hotspot/src/share/vm/gc/parallel/adjoiningVirtualSpaces.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_ADJOININGVIRTUALSPACES_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_ADJOININGVIRTUALSPACES_HPP +#ifndef SHARE_VM_GC_PARALLEL_ADJOININGVIRTUALSPACES_HPP +#define SHARE_VM_GC_PARALLEL_ADJOININGVIRTUALSPACES_HPP -#include "gc_implementation/parallelScavenge/psVirtualspace.hpp" +#include "gc/parallel/psVirtualspace.hpp" // Contains two virtual spaces that each can individually span @@ -112,4 +112,4 @@ class AdjoiningVirtualSpaces { size_t init_high_byte_size); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_ADJOININGVIRTUALSPACES_HPP +#endif // SHARE_VM_GC_PARALLEL_ADJOININGVIRTUALSPACES_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/asPSOldGen.cpp b/hotspot/src/share/vm/gc/parallel/asPSOldGen.cpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/asPSOldGen.cpp rename to hotspot/src/share/vm/gc/parallel/asPSOldGen.cpp index 918720df89a..fa5837bcbf6 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/asPSOldGen.cpp +++ b/hotspot/src/share/vm/gc/parallel/asPSOldGen.cpp @@ -23,11 +23,11 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/asPSOldGen.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp" -#include "gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp" -#include "memory/cardTableModRefBS.hpp" +#include "gc/parallel/asPSOldGen.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/psAdaptiveSizePolicy.hpp" +#include "gc/parallel/psMarkSweepDecorator.hpp" +#include "gc/shared/cardTableModRefBS.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/asPSOldGen.hpp b/hotspot/src/share/vm/gc/parallel/asPSOldGen.hpp similarity index 79% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/asPSOldGen.hpp rename to hotspot/src/share/vm/gc/parallel/asPSOldGen.hpp index 56f215230bb..861ab9a6fa2 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/asPSOldGen.hpp +++ b/hotspot/src/share/vm/gc/parallel/asPSOldGen.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,15 +22,15 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_ASPSOLDGEN_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_ASPSOLDGEN_HPP +#ifndef SHARE_VM_GC_PARALLEL_ASPSOLDGEN_HPP +#define SHARE_VM_GC_PARALLEL_ASPSOLDGEN_HPP -#include "gc_implementation/parallelScavenge/objectStartArray.hpp" -#include "gc_implementation/parallelScavenge/psOldGen.hpp" -#include "gc_implementation/parallelScavenge/psVirtualspace.hpp" -#include "gc_implementation/shared/generationCounters.hpp" -#include "gc_implementation/shared/mutableSpace.hpp" -#include "gc_implementation/shared/spaceCounters.hpp" +#include "gc/parallel/mutableSpace.hpp" +#include "gc/parallel/objectStartArray.hpp" +#include "gc/parallel/psOldGen.hpp" +#include "gc/parallel/psVirtualspace.hpp" +#include "gc/parallel/spaceCounters.hpp" +#include "gc/shared/generationCounters.hpp" class ASPSOldGen : public PSOldGen { friend class VMStructs; @@ -68,4 +68,4 @@ class ASPSOldGen : public PSOldGen { virtual const char* short_name() const { return "ASPSOldGen"; } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_ASPSOLDGEN_HPP +#endif // SHARE_VM_GC_PARALLEL_ASPSOLDGEN_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/asPSYoungGen.cpp b/hotspot/src/share/vm/gc/parallel/asPSYoungGen.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/asPSYoungGen.cpp rename to hotspot/src/share/vm/gc/parallel/asPSYoungGen.cpp index 4395ce6f626..b3e1d83e41f 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/asPSYoungGen.cpp +++ b/hotspot/src/share/vm/gc/parallel/asPSYoungGen.cpp @@ -23,13 +23,13 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/asPSYoungGen.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.hpp" -#include "gc_implementation/parallelScavenge/psYoungGen.hpp" -#include "gc_implementation/shared/gcUtil.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" +#include "gc/parallel/asPSYoungGen.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/psMarkSweepDecorator.hpp" +#include "gc/parallel/psScavenge.hpp" +#include "gc/parallel/psYoungGen.hpp" +#include "gc/shared/gcUtil.hpp" +#include "gc/shared/spaceDecorator.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/asPSYoungGen.hpp b/hotspot/src/share/vm/gc/parallel/asPSYoungGen.hpp similarity index 76% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/asPSYoungGen.hpp rename to hotspot/src/share/vm/gc/parallel/asPSYoungGen.hpp index 6f5409239c7..15db0efe778 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/asPSYoungGen.hpp +++ b/hotspot/src/share/vm/gc/parallel/asPSYoungGen.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,16 +22,16 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_ASPSYOUNGGEN_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_ASPSYOUNGGEN_HPP +#ifndef SHARE_VM_GC_PARALLEL_ASPSYOUNGGEN_HPP +#define SHARE_VM_GC_PARALLEL_ASPSYOUNGGEN_HPP -#include "gc_implementation/parallelScavenge/objectStartArray.hpp" -#include "gc_implementation/parallelScavenge/psVirtualspace.hpp" -#include "gc_implementation/parallelScavenge/psYoungGen.hpp" -#include "gc_implementation/shared/generationCounters.hpp" -#include "gc_implementation/shared/mutableSpace.hpp" -#include "gc_implementation/shared/spaceCounters.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" +#include "gc/parallel/mutableSpace.hpp" +#include "gc/parallel/objectStartArray.hpp" +#include "gc/parallel/psVirtualspace.hpp" +#include "gc/parallel/psYoungGen.hpp" +#include "gc/parallel/spaceCounters.hpp" +#include "gc/shared/generationCounters.hpp" +#include "gc/shared/spaceDecorator.hpp" class ASPSYoungGen : public PSYoungGen { friend class VMStructs; @@ -74,4 +74,4 @@ class ASPSYoungGen : public PSYoungGen { virtual const char* short_name() const { return "ASPSYoungGen"; } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_ASPSYOUNGGEN_HPP +#endif // SHARE_VM_GC_PARALLEL_ASPSYOUNGGEN_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp b/hotspot/src/share/vm/gc/parallel/cardTableExtension.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp rename to hotspot/src/share/vm/gc/parallel/cardTableExtension.cpp index 2ad1128edba..e4df33ce0be 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp +++ b/hotspot/src/share/vm/gc/parallel/cardTableExtension.cpp @@ -23,13 +23,13 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/cardTableExtension.hpp" -#include "gc_implementation/parallelScavenge/gcTaskManager.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.hpp" -#include "gc_implementation/parallelScavenge/psTasks.hpp" -#include "gc_implementation/parallelScavenge/psYoungGen.hpp" +#include "gc/parallel/cardTableExtension.hpp" +#include "gc/parallel/gcTaskManager.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/psPromotionManager.inline.hpp" +#include "gc/parallel/psScavenge.hpp" +#include "gc/parallel/psTasks.hpp" +#include "gc/parallel/psYoungGen.hpp" #include "oops/oop.inline.hpp" #include "runtime/prefetch.inline.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.hpp b/hotspot/src/share/vm/gc/parallel/cardTableExtension.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.hpp rename to hotspot/src/share/vm/gc/parallel/cardTableExtension.hpp index dd29609e050..dd142cdcb43 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.hpp +++ b/hotspot/src/share/vm/gc/parallel/cardTableExtension.hpp @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_CARDTABLEEXTENSION_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_CARDTABLEEXTENSION_HPP +#ifndef SHARE_VM_GC_PARALLEL_CARDTABLEEXTENSION_HPP +#define SHARE_VM_GC_PARALLEL_CARDTABLEEXTENSION_HPP -#include "memory/cardTableModRefBS.hpp" +#include "gc/shared/cardTableModRefBS.hpp" class MutableSpace; class ObjectStartArray; @@ -121,4 +121,4 @@ struct BarrierSet::GetName { static const BarrierSet::Name value = BarrierSet::CardTableExtension; }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_CARDTABLEEXTENSION_HPP +#endif // SHARE_VM_GC_PARALLEL_CARDTABLEEXTENSION_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcAdaptivePolicyCounters.cpp b/hotspot/src/share/vm/gc/parallel/gcAdaptivePolicyCounters.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/shared/gcAdaptivePolicyCounters.cpp rename to hotspot/src/share/vm/gc/parallel/gcAdaptivePolicyCounters.cpp index fe4e8c35f62..4c818571073 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcAdaptivePolicyCounters.cpp +++ b/hotspot/src/share/vm/gc/parallel/gcAdaptivePolicyCounters.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/gcAdaptivePolicyCounters.hpp" +#include "gc/parallel/gcAdaptivePolicyCounters.hpp" #include "memory/resourceArea.hpp" // This class keeps statistical information and computes the diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcAdaptivePolicyCounters.hpp b/hotspot/src/share/vm/gc/parallel/gcAdaptivePolicyCounters.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/shared/gcAdaptivePolicyCounters.hpp rename to hotspot/src/share/vm/gc/parallel/gcAdaptivePolicyCounters.hpp index 70e657d2947..3e7202b22dd 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcAdaptivePolicyCounters.hpp +++ b/hotspot/src/share/vm/gc/parallel/gcAdaptivePolicyCounters.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,14 +22,12 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_GCADAPTIVEPOLICYCOUNTERS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_GCADAPTIVEPOLICYCOUNTERS_HPP +#ifndef SHARE_VM_GC_PARALLEL_GCADAPTIVEPOLICYCOUNTERS_HPP +#define SHARE_VM_GC_PARALLEL_GCADAPTIVEPOLICYCOUNTERS_HPP +#include "gc/shared/adaptiveSizePolicy.hpp" +#include "gc/shared/gcPolicyCounters.hpp" #include "utilities/macros.hpp" -#if INCLUDE_ALL_GCS -#include "gc_implementation/shared/adaptiveSizePolicy.hpp" -#include "gc_implementation/shared/gcPolicyCounters.hpp" -#endif // INCLUDE_ALL_GCS // This class keeps statistical information and computes the // size of the heap. @@ -232,4 +230,4 @@ class GCAdaptivePolicyCounters : public GCPolicyCounters { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_GCADAPTIVEPOLICYCOUNTERS_HPP +#endif // SHARE_VM_GC_PARALLEL_GCADAPTIVEPOLICYCOUNTERS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp b/hotspot/src/share/vm/gc/parallel/gcTaskManager.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp rename to hotspot/src/share/vm/gc/parallel/gcTaskManager.cpp index d9f38a0e2c8..1f7de932857 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp +++ b/hotspot/src/share/vm/gc/parallel/gcTaskManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,9 +23,9 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/gcTaskManager.hpp" -#include "gc_implementation/parallelScavenge/gcTaskThread.hpp" -#include "gc_implementation/shared/adaptiveSizePolicy.hpp" +#include "gc/parallel/gcTaskManager.hpp" +#include "gc/parallel/gcTaskThread.hpp" +#include "gc/shared/adaptiveSizePolicy.hpp" #include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" #include "runtime/mutex.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp b/hotspot/src/share/vm/gc/parallel/gcTaskManager.hpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp rename to hotspot/src/share/vm/gc/parallel/gcTaskManager.hpp index 01e3c9363de..6dee6763723 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp +++ b/hotspot/src/share/vm/gc/parallel/gcTaskManager.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_GCTASKMANAGER_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_GCTASKMANAGER_HPP +#ifndef SHARE_VM_GC_PARALLEL_GCTASKMANAGER_HPP +#define SHARE_VM_GC_PARALLEL_GCTASKMANAGER_HPP #include "runtime/mutex.hpp" #include "utilities/growableArray.hpp" @@ -783,4 +783,4 @@ private: } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_GCTASKMANAGER_HPP +#endif // SHARE_VM_GC_PARALLEL_GCTASKMANAGER_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.cpp b/hotspot/src/share/vm/gc/parallel/gcTaskThread.cpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.cpp rename to hotspot/src/share/vm/gc/parallel/gcTaskThread.cpp index 13060a4a12c..dced20a3284 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.cpp +++ b/hotspot/src/share/vm/gc/parallel/gcTaskThread.cpp @@ -24,8 +24,8 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/gcTaskManager.hpp" -#include "gc_implementation/parallelScavenge/gcTaskThread.hpp" +#include "gc/parallel/gcTaskManager.hpp" +#include "gc/parallel/gcTaskThread.hpp" #include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" #include "memory/resourceArea.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.hpp b/hotspot/src/share/vm/gc/parallel/gcTaskThread.hpp similarity index 92% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.hpp rename to hotspot/src/share/vm/gc/parallel/gcTaskThread.hpp index 0c17989a7d5..49f9bd07fbf 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.hpp +++ b/hotspot/src/share/vm/gc/parallel/gcTaskThread.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_GCTASKTHREAD_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_GCTASKTHREAD_HPP +#ifndef SHARE_VM_GC_PARALLEL_GCTASKTHREAD_HPP +#define SHARE_VM_GC_PARALLEL_GCTASKTHREAD_HPP #include "runtime/thread.hpp" @@ -105,4 +105,4 @@ class GCTaskTimeStamp : public CHeapObj void set_name(char* name) { _name = name; } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_GCTASKTHREAD_HPP +#endif // SHARE_VM_GC_PARALLEL_GCTASKTHREAD_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/generationSizer.cpp b/hotspot/src/share/vm/gc/parallel/generationSizer.cpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/generationSizer.cpp rename to hotspot/src/share/vm/gc/parallel/generationSizer.cpp index a6cef462ad9..03067d9bdae 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/generationSizer.cpp +++ b/hotspot/src/share/vm/gc/parallel/generationSizer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/generationSizer.hpp" -#include "memory/collectorPolicy.hpp" +#include "gc/parallel/generationSizer.hpp" +#include "gc/shared/collectorPolicy.hpp" void GenerationSizer::trace_gen_sizes(const char* const str) { if (TracePageSizes) { diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/generationSizer.hpp b/hotspot/src/share/vm/gc/parallel/generationSizer.hpp similarity index 82% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/generationSizer.hpp rename to hotspot/src/share/vm/gc/parallel/generationSizer.hpp index 70309a7fd59..9db480f0bb7 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/generationSizer.hpp +++ b/hotspot/src/share/vm/gc/parallel/generationSizer.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_GENERATIONSIZER_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_GENERATIONSIZER_HPP +#ifndef SHARE_VM_GC_PARALLEL_GENERATIONSIZER_HPP +#define SHARE_VM_GC_PARALLEL_GENERATIONSIZER_HPP -#include "memory/collectorPolicy.hpp" +#include "gc/shared/collectorPolicy.hpp" // There is a nice batch of tested generation sizing code in // GenCollectorPolicy. Lets reuse it! @@ -44,4 +44,4 @@ class GenerationSizer : public GenCollectorPolicy { void initialize_flags(); void initialize_size_info(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_GENERATIONSIZER_HPP +#endif // SHARE_VM_GC_PARALLEL_GENERATIONSIZER_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.cpp b/hotspot/src/share/vm/gc/parallel/immutableSpace.cpp similarity index 93% rename from hotspot/src/share/vm/gc_implementation/shared/immutableSpace.cpp rename to hotspot/src/share/vm/gc/parallel/immutableSpace.cpp index 477680727ba..b9b415afddd 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.cpp +++ b/hotspot/src/share/vm/gc/parallel/immutableSpace.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,12 +23,10 @@ */ #include "precompiled.hpp" -#include "utilities/macros.hpp" -#if INCLUDE_ALL_GCS -#include "gc_implementation/shared/immutableSpace.hpp" +#include "gc/parallel/immutableSpace.hpp" #include "memory/universe.hpp" #include "oops/oop.inline.hpp" -#endif // INCLUDE_ALL_GCS +#include "utilities/macros.hpp" void ImmutableSpace::initialize(MemRegion mr) { HeapWord* bottom = mr.start(); diff --git a/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp b/hotspot/src/share/vm/gc/parallel/immutableSpace.hpp similarity index 90% rename from hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp rename to hotspot/src/share/vm/gc/parallel/immutableSpace.hpp index 5e77da249e8..b42923a01c2 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp +++ b/hotspot/src/share/vm/gc/parallel/immutableSpace.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_IMMUTABLESPACE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_IMMUTABLESPACE_HPP +#ifndef SHARE_VM_GC_PARALLEL_IMMUTABLESPACE_HPP +#define SHARE_VM_GC_PARALLEL_IMMUTABLESPACE_HPP #include "memory/iterator.hpp" @@ -68,4 +68,4 @@ class ImmutableSpace: public CHeapObj { virtual void verify(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_IMMUTABLESPACE_HPP +#endif // SHARE_VM_GC_PARALLEL_IMMUTABLESPACE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp b/hotspot/src/share/vm/gc/parallel/mutableNUMASpace.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp rename to hotspot/src/share/vm/gc/parallel/mutableNUMASpace.cpp index b6c68fd4808..b64da1c2804 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp +++ b/hotspot/src/share/vm/gc/parallel/mutableNUMASpace.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,9 +24,9 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/mutableNUMASpace.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/parallel/mutableNUMASpace.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/spaceDecorator.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/thread.inline.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp b/hotspot/src/share/vm/gc/parallel/mutableNUMASpace.hpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp rename to hotspot/src/share/vm/gc/parallel/mutableNUMASpace.hpp index fcc68a99029..c8b626a45b3 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp +++ b/hotspot/src/share/vm/gc/parallel/mutableNUMASpace.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,14 +22,12 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_MUTABLENUMASPACE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_MUTABLENUMASPACE_HPP +#ifndef SHARE_VM_GC_PARALLEL_MUTABLENUMASPACE_HPP +#define SHARE_VM_GC_PARALLEL_MUTABLENUMASPACE_HPP +#include "gc/parallel/mutableSpace.hpp" +#include "gc/shared/gcUtil.hpp" #include "utilities/macros.hpp" -#if INCLUDE_ALL_GCS -#include "gc_implementation/shared/gcUtil.hpp" -#include "gc_implementation/shared/mutableSpace.hpp" -#endif // INCLUDE_ALL_GCS /* * The NUMA-aware allocator (MutableNUMASpace) is basically a modification @@ -232,4 +230,4 @@ class MutableNUMASpace : public MutableSpace { virtual void set_top(HeapWord* value); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_MUTABLENUMASPACE_HPP +#endif // SHARE_VM_GC_PARALLEL_MUTABLENUMASPACE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.cpp b/hotspot/src/share/vm/gc/parallel/mutableSpace.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/shared/mutableSpace.cpp rename to hotspot/src/share/vm/gc/parallel/mutableSpace.cpp index a0884bf36a2..fedce2d8e36 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.cpp +++ b/hotspot/src/share/vm/gc/parallel/mutableSpace.cpp @@ -23,15 +23,13 @@ */ #include "precompiled.hpp" -#include "runtime/atomic.inline.hpp" -#include "utilities/macros.hpp" -#if INCLUDE_ALL_GCS -#include "gc_implementation/shared/mutableSpace.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" +#include "gc/parallel/mutableSpace.hpp" +#include "gc/shared/spaceDecorator.hpp" #include "oops/oop.inline.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/safepoint.hpp" #include "runtime/thread.hpp" -#endif // INCLUDE_ALL_GCS +#include "utilities/macros.hpp" MutableSpace::MutableSpace(size_t alignment): ImmutableSpace(), _top(NULL), _alignment(alignment) { assert(MutableSpace::alignment() % os::vm_page_size() == 0, diff --git a/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.hpp b/hotspot/src/share/vm/gc/parallel/mutableSpace.hpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/shared/mutableSpace.hpp rename to hotspot/src/share/vm/gc/parallel/mutableSpace.hpp index 09e3f316fca..8ab9804fe7b 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.hpp +++ b/hotspot/src/share/vm/gc/parallel/mutableSpace.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_MUTABLESPACE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_MUTABLESPACE_HPP +#ifndef SHARE_VM_GC_PARALLEL_MUTABLESPACE_HPP +#define SHARE_VM_GC_PARALLEL_MUTABLESPACE_HPP -#include "gc_implementation/shared/immutableSpace.hpp" +#include "gc/parallel/immutableSpace.hpp" #include "memory/memRegion.hpp" #include "utilities/copy.hpp" @@ -146,4 +146,4 @@ class MutableSpace: public ImmutableSpace { virtual void verify(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_MUTABLESPACE_HPP +#endif // SHARE_VM_GC_PARALLEL_MUTABLESPACE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp b/hotspot/src/share/vm/gc/parallel/objectStartArray.cpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp rename to hotspot/src/share/vm/gc/parallel/objectStartArray.cpp index d713519126c..6b599e6f521 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp +++ b/hotspot/src/share/vm/gc/parallel/objectStartArray.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,9 +23,9 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/objectStartArray.hpp" +#include "gc/parallel/objectStartArray.hpp" +#include "gc/shared/cardTableModRefBS.hpp" #include "memory/allocation.inline.hpp" -#include "memory/cardTableModRefBS.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" #include "services/memTracker.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.hpp b/hotspot/src/share/vm/gc/parallel/objectStartArray.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.hpp rename to hotspot/src/share/vm/gc/parallel/objectStartArray.hpp index da5a6dcbc6f..7cbb37eabf5 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.hpp +++ b/hotspot/src/share/vm/gc/parallel/objectStartArray.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_OBJECTSTARTARRAY_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_OBJECTSTARTARRAY_HPP +#ifndef SHARE_VM_GC_PARALLEL_OBJECTSTARTARRAY_HPP +#define SHARE_VM_GC_PARALLEL_OBJECTSTARTARRAY_HPP -#include "gc_implementation/parallelScavenge/psVirtualspace.hpp" +#include "gc/parallel/psVirtualspace.hpp" #include "memory/allocation.hpp" #include "memory/memRegion.hpp" #include "oops/oop.hpp" @@ -173,4 +173,4 @@ class ObjectStartArray : public CHeapObj { bool object_starts_in_range(HeapWord* start_addr, HeapWord* end_addr) const; }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_OBJECTSTARTARRAY_HPP +#endif // SHARE_VM_GC_PARALLEL_OBJECTSTARTARRAY_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp b/hotspot/src/share/vm/gc/parallel/parMarkBitMap.cpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp rename to hotspot/src/share/vm/gc/parallel/parMarkBitMap.cpp index 33e8f3f9b9c..0e6ec57b18c 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp +++ b/hotspot/src/share/vm/gc/parallel/parMarkBitMap.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,13 +23,13 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/parMarkBitMap.hpp" -#include "gc_implementation/parallelScavenge/psParallelCompact.hpp" +#include "gc/parallel/parMarkBitMap.hpp" +#include "gc/parallel/psParallelCompact.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/os.hpp" -#include "utilities/bitMap.inline.hpp" #include "services/memTracker.hpp" +#include "utilities/bitMap.inline.hpp" bool ParMarkBitMap::initialize(MemRegion covered_region) diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.hpp b/hotspot/src/share/vm/gc/parallel/parMarkBitMap.hpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.hpp rename to hotspot/src/share/vm/gc/parallel/parMarkBitMap.hpp index 8d0153d485d..be56e7ac7e3 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.hpp +++ b/hotspot/src/share/vm/gc/parallel/parMarkBitMap.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PARMARKBITMAP_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PARMARKBITMAP_HPP +#ifndef SHARE_VM_GC_PARALLEL_PARMARKBITMAP_HPP +#define SHARE_VM_GC_PARALLEL_PARMARKBITMAP_HPP #include "memory/memRegion.hpp" #include "oops/oop.hpp" @@ -396,4 +396,4 @@ inline void ParMarkBitMap::verify_addr(HeapWord* addr) const { } #endif // #ifdef ASSERT -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PARMARKBITMAP_HPP +#endif // SHARE_VM_GC_PARALLEL_PARMARKBITMAP_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp b/hotspot/src/share/vm/gc/parallel/parallelScavengeHeap.cpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp rename to hotspot/src/share/vm/gc/parallel/parallelScavengeHeap.cpp index 6f35768cfea..a1c94ad4b86 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp +++ b/hotspot/src/share/vm/gc/parallel/parallelScavengeHeap.cpp @@ -23,21 +23,21 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/adjoiningGenerations.hpp" -#include "gc_implementation/parallelScavenge/adjoiningVirtualSpaces.hpp" -#include "gc_implementation/parallelScavenge/cardTableExtension.hpp" -#include "gc_implementation/parallelScavenge/gcTaskManager.hpp" -#include "gc_implementation/parallelScavenge/generationSizer.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.inline.hpp" -#include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp" -#include "gc_implementation/parallelScavenge/psMarkSweep.hpp" -#include "gc_implementation/parallelScavenge/psParallelCompact.hpp" -#include "gc_implementation/parallelScavenge/psPromotionManager.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.hpp" -#include "gc_implementation/parallelScavenge/vmPSOperations.hpp" -#include "gc_implementation/shared/gcHeapSummary.hpp" -#include "gc_implementation/shared/gcWhen.hpp" -#include "memory/gcLocker.inline.hpp" +#include "gc/parallel/adjoiningGenerations.hpp" +#include "gc/parallel/adjoiningVirtualSpaces.hpp" +#include "gc/parallel/cardTableExtension.hpp" +#include "gc/parallel/gcTaskManager.hpp" +#include "gc/parallel/generationSizer.hpp" +#include "gc/parallel/parallelScavengeHeap.inline.hpp" +#include "gc/parallel/psAdaptiveSizePolicy.hpp" +#include "gc/parallel/psMarkSweep.hpp" +#include "gc/parallel/psParallelCompact.hpp" +#include "gc/parallel/psPromotionManager.hpp" +#include "gc/parallel/psScavenge.hpp" +#include "gc/parallel/vmPSOperations.hpp" +#include "gc/shared/gcHeapSummary.hpp" +#include "gc/shared/gcLocker.inline.hpp" +#include "gc/shared/gcWhen.hpp" #include "oops/oop.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/java.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp b/hotspot/src/share/vm/gc/parallel/parallelScavengeHeap.hpp similarity index 91% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp rename to hotspot/src/share/vm/gc/parallel/parallelScavengeHeap.hpp index d8bb56ae0a1..b8e4879a801 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp +++ b/hotspot/src/share/vm/gc/parallel/parallelScavengeHeap.hpp @@ -22,19 +22,19 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PARALLELSCAVENGEHEAP_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PARALLELSCAVENGEHEAP_HPP +#ifndef SHARE_VM_GC_PARALLEL_PARALLELSCAVENGEHEAP_HPP +#define SHARE_VM_GC_PARALLEL_PARALLELSCAVENGEHEAP_HPP -#include "gc_implementation/parallelScavenge/generationSizer.hpp" -#include "gc_implementation/parallelScavenge/objectStartArray.hpp" -#include "gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp" -#include "gc_implementation/parallelScavenge/psOldGen.hpp" -#include "gc_implementation/parallelScavenge/psYoungGen.hpp" -#include "gc_implementation/shared/gcPolicyCounters.hpp" -#include "gc_implementation/shared/gcWhen.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "memory/collectorPolicy.hpp" -#include "memory/strongRootsScope.hpp" +#include "gc/parallel/generationSizer.hpp" +#include "gc/parallel/objectStartArray.hpp" +#include "gc/parallel/psGCAdaptivePolicyCounters.hpp" +#include "gc/parallel/psOldGen.hpp" +#include "gc/parallel/psYoungGen.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/collectorPolicy.hpp" +#include "gc/shared/gcPolicyCounters.hpp" +#include "gc/shared/gcWhen.hpp" +#include "gc/shared/strongRootsScope.hpp" #include "utilities/ostream.hpp" class AdjoiningGenerations; @@ -241,4 +241,4 @@ class ParallelScavengeHeap : public CollectedHeap { }; }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PARALLELSCAVENGEHEAP_HPP +#endif // SHARE_VM_GC_PARALLEL_PARALLELSCAVENGEHEAP_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.inline.hpp b/hotspot/src/share/vm/gc/parallel/parallelScavengeHeap.inline.hpp similarity index 75% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.inline.hpp rename to hotspot/src/share/vm/gc/parallel/parallelScavengeHeap.inline.hpp index 1c646fe3e1d..5d098a2c119 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.inline.hpp +++ b/hotspot/src/share/vm/gc/parallel/parallelScavengeHeap.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PARALLELSCAVENGEHEAP_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PARALLELSCAVENGEHEAP_INLINE_HPP +#ifndef SHARE_VM_GC_PARALLEL_PARALLELSCAVENGEHEAP_INLINE_HPP +#define SHARE_VM_GC_PARALLEL_PARALLELSCAVENGEHEAP_INLINE_HPP -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psMarkSweep.hpp" -#include "gc_implementation/parallelScavenge/psParallelCompact.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/psMarkSweep.hpp" +#include "gc/parallel/psParallelCompact.hpp" +#include "gc/parallel/psScavenge.hpp" inline size_t ParallelScavengeHeap::total_invocations() { @@ -55,4 +55,4 @@ inline bool ParallelScavengeHeap::is_in_young(oop p) { err_msg("incorrect test - result=%d, p=" PTR_FORMAT, result, p2i((void*)p))); return result; } -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PARALLELSCAVENGEHEAP_INLINE_HPP +#endif // SHARE_VM_GC_PARALLEL_PARALLELSCAVENGEHEAP_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp b/hotspot/src/share/vm/gc/parallel/pcTasks.cpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp rename to hotspot/src/share/vm/gc/parallel/pcTasks.cpp index bb1caa063fb..1e8fbd4f4af 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp +++ b/hotspot/src/share/vm/gc/parallel/pcTasks.cpp @@ -25,13 +25,13 @@ #include "precompiled.hpp" #include "classfile/systemDictionary.hpp" #include "code/codeCache.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/pcTasks.hpp" -#include "gc_implementation/parallelScavenge/psCompactionManager.inline.hpp" -#include "gc_implementation/parallelScavenge/psParallelCompact.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTraceTime.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/pcTasks.hpp" +#include "gc/parallel/psCompactionManager.inline.hpp" +#include "gc/parallel/psParallelCompact.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTraceTime.hpp" #include "memory/universe.hpp" #include "oops/objArrayKlass.inline.hpp" #include "oops/oop.inline.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.hpp b/hotspot/src/share/vm/gc/parallel/pcTasks.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.hpp rename to hotspot/src/share/vm/gc/parallel/pcTasks.hpp index 40e7fb9d3db..40a2009a2c5 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.hpp +++ b/hotspot/src/share/vm/gc/parallel/pcTasks.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,12 +22,12 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PCTASKS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PCTASKS_HPP +#ifndef SHARE_VM_GC_PARALLEL_PCTASKS_HPP +#define SHARE_VM_GC_PARALLEL_PCTASKS_HPP -#include "gc_implementation/parallelScavenge/gcTaskManager.hpp" -#include "gc_implementation/parallelScavenge/psParallelCompact.hpp" -#include "gc_implementation/parallelScavenge/psTasks.hpp" +#include "gc/parallel/gcTaskManager.hpp" +#include "gc/parallel/psParallelCompact.hpp" +#include "gc/parallel/psTasks.hpp" // Tasks for parallel compaction of the old generation @@ -257,4 +257,4 @@ class DrainStacksCompactionTask : public GCTask { virtual void do_it(GCTaskManager* manager, uint which); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PCTASKS_HPP +#endif // SHARE_VM_GC_PARALLEL_PCTASKS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp b/hotspot/src/share/vm/gc/parallel/psAdaptiveSizePolicy.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp rename to hotspot/src/share/vm/gc/parallel/psAdaptiveSizePolicy.cpp index bf979b9e420..2992f8d22dc 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp +++ b/hotspot/src/share/vm/gc/parallel/psAdaptiveSizePolicy.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,13 +23,13 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp" -#include "gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.hpp" -#include "gc_implementation/shared/gcPolicyCounters.hpp" -#include "gc_interface/gcCause.hpp" -#include "memory/collectorPolicy.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/psAdaptiveSizePolicy.hpp" +#include "gc/parallel/psGCAdaptivePolicyCounters.hpp" +#include "gc/parallel/psScavenge.hpp" +#include "gc/shared/collectorPolicy.hpp" +#include "gc/shared/gcCause.hpp" +#include "gc/shared/gcPolicyCounters.hpp" #include "runtime/timer.hpp" #include "utilities/top.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp b/hotspot/src/share/vm/gc/parallel/psAdaptiveSizePolicy.hpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp rename to hotspot/src/share/vm/gc/parallel/psAdaptiveSizePolicy.hpp index 24f0ed473b9..696ec8868cf 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp +++ b/hotspot/src/share/vm/gc/parallel/psAdaptiveSizePolicy.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSADAPTIVESIZEPOLICY_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSADAPTIVESIZEPOLICY_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSADAPTIVESIZEPOLICY_HPP +#define SHARE_VM_GC_PARALLEL_PSADAPTIVESIZEPOLICY_HPP -#include "gc_implementation/shared/adaptiveSizePolicy.hpp" -#include "gc_implementation/shared/gcStats.hpp" -#include "gc_implementation/shared/gcUtil.hpp" -#include "gc_interface/gcCause.hpp" +#include "gc/shared/adaptiveSizePolicy.hpp" +#include "gc/shared/gcCause.hpp" +#include "gc/shared/gcStats.hpp" +#include "gc/shared/gcUtil.hpp" // This class keeps statistical information and computes the // optimal free space for both the young and old generation @@ -405,4 +405,4 @@ class PSAdaptiveSizePolicy : public AdaptiveSizePolicy { void decay_supplemental_growth(bool is_full_gc); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSADAPTIVESIZEPOLICY_HPP +#endif // SHARE_VM_GC_PARALLEL_PSADAPTIVESIZEPOLICY_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp b/hotspot/src/share/vm/gc/parallel/psCompactionManager.cpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp rename to hotspot/src/share/vm/gc/parallel/psCompactionManager.cpp index 2351e4d9444..c828caa7265 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp +++ b/hotspot/src/share/vm/gc/parallel/psCompactionManager.cpp @@ -24,20 +24,20 @@ #include "precompiled.hpp" #include "classfile/systemDictionary.hpp" -#include "gc_implementation/parallelScavenge/gcTaskManager.hpp" -#include "gc_implementation/parallelScavenge/objectStartArray.hpp" -#include "gc_implementation/parallelScavenge/parMarkBitMap.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psCompactionManager.inline.hpp" -#include "gc_implementation/parallelScavenge/psOldGen.hpp" -#include "gc_implementation/parallelScavenge/psParallelCompact.inline.hpp" +#include "gc/parallel/gcTaskManager.hpp" +#include "gc/parallel/objectStartArray.hpp" +#include "gc/parallel/parMarkBitMap.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/psCompactionManager.inline.hpp" +#include "gc/parallel/psOldGen.hpp" +#include "gc/parallel/psParallelCompact.inline.hpp" +#include "gc/shared/taskqueue.inline.hpp" #include "memory/iterator.inline.hpp" #include "oops/instanceKlass.inline.hpp" #include "oops/instanceMirrorKlass.inline.hpp" #include "oops/objArrayKlass.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" -#include "utilities/taskqueue.inline.hpp" PSOldGen* ParCompactionManager::_old_gen = NULL; ParCompactionManager** ParCompactionManager::_manager_array = NULL; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp b/hotspot/src/share/vm/gc/parallel/psCompactionManager.hpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp rename to hotspot/src/share/vm/gc/parallel/psCompactionManager.hpp index 45cd344571b..5cdbe19d913 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp +++ b/hotspot/src/share/vm/gc/parallel/psCompactionManager.hpp @@ -22,12 +22,12 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSCOMPACTIONMANAGER_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSCOMPACTIONMANAGER_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSCOMPACTIONMANAGER_HPP +#define SHARE_VM_GC_PARALLEL_PSCOMPACTIONMANAGER_HPP +#include "gc/shared/taskqueue.hpp" #include "memory/allocation.hpp" #include "utilities/stack.hpp" -#include "utilities/taskqueue.hpp" class MutableSpace; class PSOldGen; @@ -240,4 +240,4 @@ bool ParCompactionManager::marking_stacks_empty() const { return _marking_stack.is_empty() && _objarray_stack.is_empty(); } -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSCOMPACTIONMANAGER_HPP +#endif // SHARE_VM_GC_PARALLEL_PSCOMPACTIONMANAGER_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.inline.hpp b/hotspot/src/share/vm/gc/parallel/psCompactionManager.inline.hpp similarity index 90% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.inline.hpp rename to hotspot/src/share/vm/gc/parallel/psCompactionManager.inline.hpp index f1f4a570e11..7ba99f95ede 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.inline.hpp +++ b/hotspot/src/share/vm/gc/parallel/psCompactionManager.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2015 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,16 +22,16 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSCOMPACTIONMANAGER_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSCOMPACTIONMANAGER_INLINE_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSCOMPACTIONMANAGER_INLINE_HPP +#define SHARE_VM_GC_PARALLEL_PSCOMPACTIONMANAGER_INLINE_HPP -#include "gc_implementation/parallelScavenge/psCompactionManager.hpp" -#include "gc_implementation/parallelScavenge/psParallelCompact.inline.hpp" +#include "gc/parallel/psCompactionManager.hpp" +#include "gc/parallel/psParallelCompact.inline.hpp" +#include "gc/shared/taskqueue.inline.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" #include "utilities/debug.hpp" #include "utilities/globalDefinitions.hpp" -#include "utilities/taskqueue.inline.hpp" inline bool ParCompactionManager::steal(int queue_num, int* seed, oop& t) { return stack_array()->steal(queue_num, seed, t); @@ -147,4 +147,4 @@ inline void ParCompactionManager::update_contents(oop obj) { obj->pc_update_contents(); } -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSCOMPACTIONMANAGER_INLINE_HPP +#endif // SHARE_VM_GC_PARALLEL_PSCOMPACTIONMANAGER_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.cpp b/hotspot/src/share/vm/gc/parallel/psGCAdaptivePolicyCounters.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.cpp rename to hotspot/src/share/vm/gc/parallel/psGCAdaptivePolicyCounters.cpp index 7e5bc9aab9a..f9a108de985 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.cpp +++ b/hotspot/src/share/vm/gc/parallel/psGCAdaptivePolicyCounters.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp" +#include "gc/parallel/psGCAdaptivePolicyCounters.hpp" #include "memory/resourceArea.hpp" #include "runtime/arguments.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp b/hotspot/src/share/vm/gc/parallel/psGCAdaptivePolicyCounters.hpp similarity index 93% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp rename to hotspot/src/share/vm/gc/parallel/psGCAdaptivePolicyCounters.hpp index 4c8bd4a7fd7..7a56f0c389c 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp +++ b/hotspot/src/share/vm/gc/parallel/psGCAdaptivePolicyCounters.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,12 +22,12 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSGCADAPTIVEPOLICYCOUNTERS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSGCADAPTIVEPOLICYCOUNTERS_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSGCADAPTIVEPOLICYCOUNTERS_HPP +#define SHARE_VM_GC_PARALLEL_PSGCADAPTIVEPOLICYCOUNTERS_HPP -#include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp" -#include "gc_implementation/shared/gcAdaptivePolicyCounters.hpp" -#include "gc_implementation/shared/gcPolicyCounters.hpp" +#include "gc/parallel/gcAdaptivePolicyCounters.hpp" +#include "gc/parallel/psAdaptiveSizePolicy.hpp" +#include "gc/shared/gcPolicyCounters.hpp" // PSGCAdaptivePolicyCounters is a holder class for performance counters // that track the data and decisions for the ergonomics policy for the @@ -208,4 +208,4 @@ class PSGCAdaptivePolicyCounters : public GCAdaptivePolicyCounters { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSGCADAPTIVEPOLICYCOUNTERS_HPP +#endif // SHARE_VM_GC_PARALLEL_PSGCADAPTIVEPOLICYCOUNTERS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGenerationCounters.cpp b/hotspot/src/share/vm/gc/parallel/psGenerationCounters.cpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psGenerationCounters.cpp rename to hotspot/src/share/vm/gc/parallel/psGenerationCounters.cpp index 8e9b2a594ab..d200258acdf 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGenerationCounters.cpp +++ b/hotspot/src/share/vm/gc/parallel/psGenerationCounters.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,7 +24,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/psGenerationCounters.hpp" +#include "gc/parallel/psGenerationCounters.hpp" #include "memory/resourceArea.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGenerationCounters.hpp b/hotspot/src/share/vm/gc/parallel/psGenerationCounters.hpp similarity index 79% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psGenerationCounters.hpp rename to hotspot/src/share/vm/gc/parallel/psGenerationCounters.hpp index 7028f1b1986..67d506857f3 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGenerationCounters.hpp +++ b/hotspot/src/share/vm/gc/parallel/psGenerationCounters.hpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,11 +23,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSGENERATIONCOUNTERS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSGENERATIONCOUNTERS_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSGENERATIONCOUNTERS_HPP +#define SHARE_VM_GC_PARALLEL_PSGENERATIONCOUNTERS_HPP -#include "gc_implementation/parallelScavenge/psVirtualspace.hpp" -#include "gc_implementation/shared/generationCounters.hpp" +#include "gc/parallel/psVirtualspace.hpp" +#include "gc/shared/generationCounters.hpp" #include "runtime/perfData.hpp" // A PSGenerationCounter is a holder class for performance counters @@ -49,4 +49,4 @@ class PSGenerationCounters: public GenerationCounters { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSGENERATIONCOUNTERS_HPP +#endif // SHARE_VM_GC_PARALLEL_PSGENERATIONCOUNTERS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp b/hotspot/src/share/vm/gc/parallel/psMarkSweep.cpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp rename to hotspot/src/share/vm/gc/parallel/psMarkSweep.cpp index d676ddec86e..cc8b33e064d 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp +++ b/hotspot/src/share/vm/gc/parallel/psMarkSweep.cpp @@ -26,24 +26,24 @@ #include "classfile/stringTable.hpp" #include "classfile/systemDictionary.hpp" #include "code/codeCache.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp" -#include "gc_implementation/parallelScavenge/psMarkSweep.hpp" -#include "gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp" -#include "gc_implementation/parallelScavenge/psOldGen.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.hpp" -#include "gc_implementation/parallelScavenge/psYoungGen.hpp" -#include "gc_implementation/shared/gcHeapSummary.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/gcTraceTime.hpp" -#include "gc_implementation/shared/isGCActiveMark.hpp" -#include "gc_implementation/shared/markSweep.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" -#include "gc_interface/gcCause.hpp" -#include "memory/gcLocker.inline.hpp" -#include "memory/referencePolicy.hpp" -#include "memory/referenceProcessor.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/psAdaptiveSizePolicy.hpp" +#include "gc/parallel/psMarkSweep.hpp" +#include "gc/parallel/psMarkSweepDecorator.hpp" +#include "gc/parallel/psOldGen.hpp" +#include "gc/parallel/psScavenge.hpp" +#include "gc/parallel/psYoungGen.hpp" +#include "gc/serial/markSweep.hpp" +#include "gc/shared/gcCause.hpp" +#include "gc/shared/gcHeapSummary.hpp" +#include "gc/shared/gcLocker.inline.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/gcTraceTime.hpp" +#include "gc/shared/isGCActiveMark.hpp" +#include "gc/shared/referencePolicy.hpp" +#include "gc/shared/referenceProcessor.hpp" +#include "gc/shared/spaceDecorator.hpp" #include "oops/oop.inline.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/fprofiler.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.hpp b/hotspot/src/share/vm/gc/parallel/psMarkSweep.hpp similarity index 90% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.hpp rename to hotspot/src/share/vm/gc/parallel/psMarkSweep.hpp index 2c97a150cb0..f23512c1e26 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.hpp +++ b/hotspot/src/share/vm/gc/parallel/psMarkSweep.hpp @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSMARKSWEEP_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSMARKSWEEP_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSMARKSWEEP_HPP +#define SHARE_VM_GC_PARALLEL_PSMARKSWEEP_HPP -#include "gc_implementation/shared/collectorCounters.hpp" -#include "gc_implementation/shared/markSweep.hpp" +#include "gc/serial/markSweep.hpp" +#include "gc/shared/collectorCounters.hpp" #include "utilities/stack.hpp" class PSAdaptiveSizePolicy; @@ -83,4 +83,4 @@ class PSMarkSweep : public MarkSweep { static jlong millis_since_last_gc(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSMARKSWEEP_HPP +#endif // SHARE_VM_GC_PARALLEL_PSMARKSWEEP_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.cpp b/hotspot/src/share/vm/gc/parallel/psMarkSweepDecorator.cpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.cpp rename to hotspot/src/share/vm/gc/parallel/psMarkSweepDecorator.cpp index e1231c2999a..74a1f3e639c 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.cpp +++ b/hotspot/src/share/vm/gc/parallel/psMarkSweepDecorator.cpp @@ -24,13 +24,13 @@ #include "precompiled.hpp" #include "classfile/systemDictionary.hpp" -#include "gc_implementation/parallelScavenge/objectStartArray.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psMarkSweep.hpp" -#include "gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp" -#include "gc_implementation/shared/liveRange.hpp" -#include "gc_implementation/shared/markSweep.inline.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" +#include "gc/parallel/objectStartArray.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/psMarkSweep.hpp" +#include "gc/parallel/psMarkSweepDecorator.hpp" +#include "gc/serial/markSweep.inline.hpp" +#include "gc/shared/liveRange.hpp" +#include "gc/shared/spaceDecorator.hpp" #include "oops/oop.inline.hpp" #include "runtime/prefetch.inline.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp b/hotspot/src/share/vm/gc/parallel/psMarkSweepDecorator.hpp similarity index 88% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp rename to hotspot/src/share/vm/gc/parallel/psMarkSweepDecorator.hpp index 285599f2538..126f3d976af 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp +++ b/hotspot/src/share/vm/gc/parallel/psMarkSweepDecorator.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSMARKSWEEPDECORATOR_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSMARKSWEEPDECORATOR_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSMARKSWEEPDECORATOR_HPP +#define SHARE_VM_GC_PARALLEL_PSMARKSWEEPDECORATOR_HPP -#include "gc_implementation/shared/mutableSpace.hpp" +#include "gc/parallel/mutableSpace.hpp" // // A PSMarkSweepDecorator is used to add "ParallelScavenge" style mark sweep operations @@ -78,4 +78,4 @@ class PSMarkSweepDecorator: public CHeapObj { void compact(bool mangle_free_space); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSMARKSWEEPDECORATOR_HPP +#endif // SHARE_VM_GC_PARALLEL_PSMARKSWEEPDECORATOR_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.cpp b/hotspot/src/share/vm/gc/parallel/psOldGen.cpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.cpp rename to hotspot/src/share/vm/gc/parallel/psOldGen.cpp index 35c2ff91848..5041780fb5b 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.cpp +++ b/hotspot/src/share/vm/gc/parallel/psOldGen.cpp @@ -23,13 +23,13 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp" -#include "gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp" -#include "gc_implementation/parallelScavenge/psOldGen.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" -#include "memory/cardTableModRefBS.hpp" -#include "memory/gcLocker.inline.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/psAdaptiveSizePolicy.hpp" +#include "gc/parallel/psMarkSweepDecorator.hpp" +#include "gc/parallel/psOldGen.hpp" +#include "gc/shared/cardTableModRefBS.hpp" +#include "gc/shared/gcLocker.inline.hpp" +#include "gc/shared/spaceDecorator.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp b/hotspot/src/share/vm/gc/parallel/psOldGen.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp rename to hotspot/src/share/vm/gc/parallel/psOldGen.hpp index 9322672680d..f5af1592727 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp +++ b/hotspot/src/share/vm/gc/parallel/psOldGen.hpp @@ -22,14 +22,14 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSOLDGEN_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSOLDGEN_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSOLDGEN_HPP +#define SHARE_VM_GC_PARALLEL_PSOLDGEN_HPP -#include "gc_implementation/parallelScavenge/objectStartArray.hpp" -#include "gc_implementation/parallelScavenge/psGenerationCounters.hpp" -#include "gc_implementation/parallelScavenge/psVirtualspace.hpp" -#include "gc_implementation/shared/mutableSpace.hpp" -#include "gc_implementation/shared/spaceCounters.hpp" +#include "gc/parallel/mutableSpace.hpp" +#include "gc/parallel/objectStartArray.hpp" +#include "gc/parallel/psGenerationCounters.hpp" +#include "gc/parallel/psVirtualspace.hpp" +#include "gc/parallel/spaceCounters.hpp" #include "runtime/safepoint.hpp" class PSMarkSweepDecorator; @@ -217,4 +217,4 @@ class PSOldGen : public CHeapObj { void record_spaces_top() PRODUCT_RETURN; }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSOLDGEN_HPP +#endif // SHARE_VM_GC_PARALLEL_PSOLDGEN_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp b/hotspot/src/share/vm/gc/parallel/psParallelCompact.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp rename to hotspot/src/share/vm/gc/parallel/psParallelCompact.cpp index bba6c1fd340..b928f956e24 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp +++ b/hotspot/src/share/vm/gc/parallel/psParallelCompact.cpp @@ -26,28 +26,28 @@ #include "classfile/stringTable.hpp" #include "classfile/systemDictionary.hpp" #include "code/codeCache.hpp" -#include "gc_implementation/parallelScavenge/gcTaskManager.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.inline.hpp" -#include "gc_implementation/parallelScavenge/pcTasks.hpp" -#include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp" -#include "gc_implementation/parallelScavenge/psCompactionManager.inline.hpp" -#include "gc_implementation/parallelScavenge/psMarkSweep.hpp" -#include "gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp" -#include "gc_implementation/parallelScavenge/psOldGen.hpp" -#include "gc_implementation/parallelScavenge/psParallelCompact.inline.hpp" -#include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.hpp" -#include "gc_implementation/parallelScavenge/psYoungGen.hpp" -#include "gc_implementation/shared/gcHeapSummary.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/gcTraceTime.hpp" -#include "gc_implementation/shared/isGCActiveMark.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" -#include "gc_interface/gcCause.hpp" -#include "memory/gcLocker.inline.hpp" -#include "memory/referencePolicy.hpp" -#include "memory/referenceProcessor.hpp" +#include "gc/parallel/gcTaskManager.hpp" +#include "gc/parallel/parallelScavengeHeap.inline.hpp" +#include "gc/parallel/pcTasks.hpp" +#include "gc/parallel/psAdaptiveSizePolicy.hpp" +#include "gc/parallel/psCompactionManager.inline.hpp" +#include "gc/parallel/psMarkSweep.hpp" +#include "gc/parallel/psMarkSweepDecorator.hpp" +#include "gc/parallel/psOldGen.hpp" +#include "gc/parallel/psParallelCompact.inline.hpp" +#include "gc/parallel/psPromotionManager.inline.hpp" +#include "gc/parallel/psScavenge.hpp" +#include "gc/parallel/psYoungGen.hpp" +#include "gc/shared/gcCause.hpp" +#include "gc/shared/gcHeapSummary.hpp" +#include "gc/shared/gcLocker.inline.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/gcTraceTime.hpp" +#include "gc/shared/isGCActiveMark.hpp" +#include "gc/shared/referencePolicy.hpp" +#include "gc/shared/referenceProcessor.hpp" +#include "gc/shared/spaceDecorator.hpp" #include "oops/instanceKlass.inline.hpp" #include "oops/instanceMirrorKlass.inline.hpp" #include "oops/methodData.hpp" @@ -58,8 +58,8 @@ #include "runtime/safepoint.hpp" #include "runtime/vmThread.hpp" #include "services/management.hpp" -#include "services/memoryService.hpp" #include "services/memTracker.hpp" +#include "services/memoryService.hpp" #include "utilities/events.hpp" #include "utilities/stack.inline.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp b/hotspot/src/share/vm/gc/parallel/psParallelCompact.hpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp rename to hotspot/src/share/vm/gc/parallel/psParallelCompact.hpp index 8530bb07091..44641a30b37 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp +++ b/hotspot/src/share/vm/gc/parallel/psParallelCompact.hpp @@ -22,15 +22,15 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPARALLELCOMPACT_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPARALLELCOMPACT_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSPARALLELCOMPACT_HPP +#define SHARE_VM_GC_PARALLEL_PSPARALLELCOMPACT_HPP -#include "gc_implementation/parallelScavenge/objectStartArray.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/parMarkBitMap.hpp" -#include "gc_implementation/shared/collectorCounters.hpp" -#include "gc_implementation/shared/mutableSpace.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/parallel/mutableSpace.hpp" +#include "gc/parallel/objectStartArray.hpp" +#include "gc/parallel/parMarkBitMap.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/collectorCounters.hpp" #include "oops/oop.hpp" class ParallelScavengeHeap; @@ -1435,4 +1435,4 @@ private: ObjectStartArray* const _start_array; }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPARALLELCOMPACT_HPP +#endif // SHARE_VM_GC_PARALLEL_PSPARALLELCOMPACT_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.inline.hpp b/hotspot/src/share/vm/gc/parallel/psParallelCompact.inline.hpp similarity index 83% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.inline.hpp rename to hotspot/src/share/vm/gc/parallel/psParallelCompact.inline.hpp index 5a18e1712a3..43063fd154e 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.inline.hpp +++ b/hotspot/src/share/vm/gc/parallel/psParallelCompact.inline.hpp @@ -22,12 +22,12 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPARALLELCOMPACT_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPARALLELCOMPACT_INLINE_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSPARALLELCOMPACT_INLINE_HPP +#define SHARE_VM_GC_PARALLEL_PSPARALLELCOMPACT_INLINE_HPP -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psParallelCompact.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/psParallelCompact.hpp" +#include "gc/shared/collectedHeap.hpp" #include "oops/klass.hpp" #include "oops/oop.inline.hpp" @@ -58,4 +58,4 @@ void PSParallelCompact::AdjustPointerClosure::do_oop_nv(T* p) { inline void PSParallelCompact::AdjustPointerClosure::do_oop(oop* p) { do_oop_nv(p); } inline void PSParallelCompact::AdjustPointerClosure::do_oop(narrowOop* p) { do_oop_nv(p); } -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPARALLELCOMPACT_INLINE_HPP +#endif // SHARE_VM_GC_PARALLEL_PSPARALLELCOMPACT_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.cpp b/hotspot/src/share/vm/gc/parallel/psPromotionLAB.cpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.cpp rename to hotspot/src/share/vm/gc/parallel/psPromotionLAB.cpp index 6786be2146a..1bade48ff57 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.cpp +++ b/hotspot/src/share/vm/gc/parallel/psPromotionLAB.cpp @@ -23,9 +23,9 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psPromotionLAB.hpp" -#include "gc_implementation/shared/mutableSpace.hpp" +#include "gc/parallel/mutableSpace.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/psPromotionLAB.hpp" #include "oops/oop.inline.hpp" size_t PSPromotionLAB::filler_header_size; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp b/hotspot/src/share/vm/gc/parallel/psPromotionLAB.hpp similarity index 92% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp rename to hotspot/src/share/vm/gc/parallel/psPromotionLAB.hpp index c214a13a0dd..ec65f644026 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp +++ b/hotspot/src/share/vm/gc/parallel/psPromotionLAB.hpp @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPROMOTIONLAB_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPROMOTIONLAB_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSPROMOTIONLAB_HPP +#define SHARE_VM_GC_PARALLEL_PSPROMOTIONLAB_HPP -#include "gc_implementation/parallelScavenge/objectStartArray.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/parallel/objectStartArray.hpp" +#include "gc/shared/collectedHeap.hpp" #include "memory/allocation.hpp" // @@ -134,4 +134,4 @@ class PSOldPromotionLAB : public PSPromotionLAB { debug_only(virtual bool lab_is_valid(MemRegion lab)); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPROMOTIONLAB_HPP +#endif // SHARE_VM_GC_PARALLEL_PSPROMOTIONLAB_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.inline.hpp b/hotspot/src/share/vm/gc/parallel/psPromotionLAB.inline.hpp similarity index 79% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.inline.hpp rename to hotspot/src/share/vm/gc/parallel/psPromotionLAB.inline.hpp index 0e5d7e7f7f2..8987ae92923 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.inline.hpp +++ b/hotspot/src/share/vm/gc/parallel/psPromotionLAB.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPROMOTIONLAB_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPROMOTIONLAB_INLINE_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSPROMOTIONLAB_INLINE_HPP +#define SHARE_VM_GC_PARALLEL_PSPROMOTIONLAB_INLINE_HPP -#include "gc_implementation/parallelScavenge/psPromotionLAB.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/parallel/psPromotionLAB.hpp" +#include "gc/shared/collectedHeap.inline.hpp" HeapWord* PSYoungPromotionLAB::allocate(size_t size) { // Can't assert this, when young fills, we keep the LAB around, but flushed. @@ -49,4 +49,4 @@ HeapWord* PSYoungPromotionLAB::allocate(size_t size) { } } -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPROMOTIONLAB_INLINE_HPP +#endif // SHARE_VM_GC_PARALLEL_PSPROMOTIONLAB_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp b/hotspot/src/share/vm/gc/parallel/psPromotionManager.cpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp rename to hotspot/src/share/vm/gc/parallel/psPromotionManager.cpp index 0d15eaadaa4..37a32af7773 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp +++ b/hotspot/src/share/vm/gc/parallel/psPromotionManager.cpp @@ -23,12 +23,13 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psOldGen.hpp" -#include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/mutableSpace.hpp" +#include "gc/parallel/mutableSpace.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/psOldGen.hpp" +#include "gc/parallel/psPromotionManager.inline.hpp" +#include "gc/parallel/psScavenge.inline.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/taskqueue.inline.hpp" #include "memory/allocation.inline.hpp" #include "memory/memRegion.hpp" #include "memory/padded.inline.hpp" @@ -36,7 +37,6 @@ #include "oops/instanceMirrorKlass.inline.hpp" #include "oops/objArrayKlass.inline.hpp" #include "oops/oop.inline.hpp" -#include "utilities/taskqueue.inline.hpp" PaddedEnd* PSPromotionManager::_manager_array = NULL; OopStarTaskQueueSet* PSPromotionManager::_stack_array_depth = NULL; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp b/hotspot/src/share/vm/gc/parallel/psPromotionManager.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp rename to hotspot/src/share/vm/gc/parallel/psPromotionManager.hpp index 1612d9a85bb..d726814ba58 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp +++ b/hotspot/src/share/vm/gc/parallel/psPromotionManager.hpp @@ -22,16 +22,16 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPROMOTIONMANAGER_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPROMOTIONMANAGER_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSPROMOTIONMANAGER_HPP +#define SHARE_VM_GC_PARALLEL_PSPROMOTIONMANAGER_HPP -#include "gc_implementation/parallelScavenge/psPromotionLAB.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/copyFailedInfo.hpp" +#include "gc/parallel/psPromotionLAB.hpp" +#include "gc/shared/copyFailedInfo.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/taskqueue.hpp" #include "memory/allocation.hpp" #include "memory/padded.hpp" #include "utilities/globalDefinitions.hpp" -#include "utilities/taskqueue.hpp" // // psPromotionManager is used by a single thread to manage object survival @@ -208,4 +208,4 @@ class PSPromotionManager VALUE_OBJ_CLASS_SPEC { void push_contents(oop obj); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPROMOTIONMANAGER_HPP +#endif // SHARE_VM_GC_PARALLEL_PSPROMOTIONMANAGER_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.inline.hpp b/hotspot/src/share/vm/gc/parallel/psPromotionManager.inline.hpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.inline.hpp rename to hotspot/src/share/vm/gc/parallel/psPromotionManager.inline.hpp index 0354a0bb961..115808bb7d1 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.inline.hpp +++ b/hotspot/src/share/vm/gc/parallel/psPromotionManager.inline.hpp @@ -22,16 +22,16 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPROMOTIONMANAGER_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPROMOTIONMANAGER_INLINE_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSPROMOTIONMANAGER_INLINE_HPP +#define SHARE_VM_GC_PARALLEL_PSPROMOTIONMANAGER_INLINE_HPP -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psOldGen.hpp" -#include "gc_implementation/parallelScavenge/psPromotionManager.hpp" -#include "gc_implementation/parallelScavenge/psPromotionLAB.inline.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/psOldGen.hpp" +#include "gc/parallel/psPromotionLAB.inline.hpp" +#include "gc/parallel/psPromotionManager.hpp" +#include "gc/parallel/psScavenge.hpp" +#include "gc/shared/taskqueue.inline.hpp" #include "oops/oop.inline.hpp" -#include "utilities/taskqueue.inline.hpp" inline PSPromotionManager* PSPromotionManager::manager_array(int index) { assert(_manager_array != NULL, "access of NULL manager_array"); @@ -335,4 +335,4 @@ void PSPromotionManager::record_steal(StarTask& p) { } #endif // TASKQUEUE_STATS -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPROMOTIONMANAGER_INLINE_HPP +#endif // SHARE_VM_GC_PARALLEL_PSPROMOTIONMANAGER_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp b/hotspot/src/share/vm/gc/parallel/psScavenge.cpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp rename to hotspot/src/share/vm/gc/parallel/psScavenge.cpp index 10585b53024..cb75197b321 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp +++ b/hotspot/src/share/vm/gc/parallel/psScavenge.cpp @@ -25,25 +25,25 @@ #include "precompiled.hpp" #include "classfile/stringTable.hpp" #include "code/codeCache.hpp" -#include "gc_implementation/parallelScavenge/cardTableExtension.hpp" -#include "gc_implementation/parallelScavenge/gcTaskManager.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp" -#include "gc_implementation/parallelScavenge/psMarkSweep.hpp" -#include "gc_implementation/parallelScavenge/psParallelCompact.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" -#include "gc_implementation/parallelScavenge/psTasks.hpp" -#include "gc_implementation/shared/gcHeapSummary.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/gcTraceTime.hpp" -#include "gc_implementation/shared/isGCActiveMark.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" -#include "gc_interface/gcCause.hpp" -#include "memory/collectorPolicy.hpp" -#include "memory/gcLocker.inline.hpp" -#include "memory/referencePolicy.hpp" -#include "memory/referenceProcessor.hpp" +#include "gc/parallel/cardTableExtension.hpp" +#include "gc/parallel/gcTaskManager.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/psAdaptiveSizePolicy.hpp" +#include "gc/parallel/psMarkSweep.hpp" +#include "gc/parallel/psParallelCompact.hpp" +#include "gc/parallel/psScavenge.inline.hpp" +#include "gc/parallel/psTasks.hpp" +#include "gc/shared/collectorPolicy.hpp" +#include "gc/shared/gcCause.hpp" +#include "gc/shared/gcHeapSummary.hpp" +#include "gc/shared/gcLocker.inline.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/gcTraceTime.hpp" +#include "gc/shared/isGCActiveMark.hpp" +#include "gc/shared/referencePolicy.hpp" +#include "gc/shared/referenceProcessor.hpp" +#include "gc/shared/spaceDecorator.hpp" #include "memory/resourceArea.hpp" #include "oops/oop.inline.hpp" #include "runtime/biasedLocking.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp b/hotspot/src/share/vm/gc/parallel/psScavenge.hpp similarity index 92% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp rename to hotspot/src/share/vm/gc/parallel/psScavenge.hpp index f7551439e33..dfabc1b81bc 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp +++ b/hotspot/src/share/vm/gc/parallel/psScavenge.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSSCAVENGE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSSCAVENGE_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSSCAVENGE_HPP +#define SHARE_VM_GC_PARALLEL_PSSCAVENGE_HPP -#include "gc_implementation/parallelScavenge/cardTableExtension.hpp" -#include "gc_implementation/parallelScavenge/psVirtualspace.hpp" -#include "gc_implementation/shared/collectorCounters.hpp" -#include "gc_implementation/shared/gcTrace.hpp" +#include "gc/parallel/cardTableExtension.hpp" +#include "gc/parallel/psVirtualspace.hpp" +#include "gc/shared/collectorCounters.hpp" +#include "gc/shared/gcTrace.hpp" #include "memory/allocation.hpp" #include "oops/oop.hpp" #include "utilities/stack.hpp" @@ -163,4 +163,4 @@ class PSScavenge: AllStatic { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSSCAVENGE_HPP +#endif // SHARE_VM_GC_PARALLEL_PSSCAVENGE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.inline.hpp b/hotspot/src/share/vm/gc/parallel/psScavenge.inline.hpp similarity index 91% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.inline.hpp rename to hotspot/src/share/vm/gc/parallel/psScavenge.inline.hpp index e995a618208..1881e01a342 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.inline.hpp +++ b/hotspot/src/share/vm/gc/parallel/psScavenge.inline.hpp @@ -22,13 +22,13 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSSCAVENGE_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSSCAVENGE_INLINE_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSSCAVENGE_INLINE_HPP +#define SHARE_VM_GC_PARALLEL_PSSCAVENGE_INLINE_HPP -#include "gc_implementation/parallelScavenge/cardTableExtension.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.hpp" +#include "gc/parallel/cardTableExtension.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/psPromotionManager.inline.hpp" +#include "gc/parallel/psScavenge.hpp" #include "memory/iterator.hpp" #include "utilities/globalDefinitions.hpp" @@ -163,4 +163,4 @@ class PSScavengeKlassClosure: public KlassClosure { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSSCAVENGE_INLINE_HPP +#endif // SHARE_VM_GC_PARALLEL_PSSCAVENGE_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp b/hotspot/src/share/vm/gc/parallel/psTasks.cpp similarity index 91% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp rename to hotspot/src/share/vm/gc/parallel/psTasks.cpp index d9ec123368c..7bcae82ffdd 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp +++ b/hotspot/src/share/vm/gc/parallel/psTasks.cpp @@ -25,13 +25,14 @@ #include "precompiled.hpp" #include "classfile/systemDictionary.hpp" #include "code/codeCache.hpp" -#include "gc_implementation/parallelScavenge/cardTableExtension.hpp" -#include "gc_implementation/parallelScavenge/gcTaskManager.hpp" -#include "gc_implementation/parallelScavenge/psMarkSweep.hpp" -#include "gc_implementation/parallelScavenge/psPromotionManager.hpp" -#include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" -#include "gc_implementation/parallelScavenge/psTasks.hpp" +#include "gc/parallel/cardTableExtension.hpp" +#include "gc/parallel/gcTaskManager.hpp" +#include "gc/parallel/psMarkSweep.hpp" +#include "gc/parallel/psPromotionManager.hpp" +#include "gc/parallel/psPromotionManager.inline.hpp" +#include "gc/parallel/psScavenge.inline.hpp" +#include "gc/parallel/psTasks.hpp" +#include "gc/shared/taskqueue.inline.hpp" #include "memory/iterator.hpp" #include "memory/universe.hpp" #include "oops/oop.inline.hpp" @@ -39,7 +40,6 @@ #include "runtime/thread.hpp" #include "runtime/vmThread.hpp" #include "services/management.hpp" -#include "utilities/taskqueue.inline.hpp" // // ScavengeRootsTask diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.hpp b/hotspot/src/share/vm/gc/parallel/psTasks.hpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.hpp rename to hotspot/src/share/vm/gc/parallel/psTasks.hpp index 24be15a4912..e6a06c10e76 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.hpp +++ b/hotspot/src/share/vm/gc/parallel/psTasks.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSTASKS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSTASKS_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSTASKS_HPP +#define SHARE_VM_GC_PARALLEL_PSTASKS_HPP #include "memory/allocation.hpp" #include "utilities/growableArray.hpp" @@ -180,4 +180,4 @@ class OldToYoungRootsTask : public GCTask { virtual void do_it(GCTaskManager* manager, uint which); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSTASKS_HPP +#endif // SHARE_VM_GC_PARALLEL_PSTASKS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.cpp b/hotspot/src/share/vm/gc/parallel/psVirtualspace.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.cpp rename to hotspot/src/share/vm/gc/parallel/psVirtualspace.cpp index baf8e2dd661..a74eb32d2d7 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.cpp +++ b/hotspot/src/share/vm/gc/parallel/psVirtualspace.cpp @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/psVirtualspace.hpp" +#include "gc/parallel/psVirtualspace.hpp" #include "memory/virtualspace.hpp" #include "runtime/os.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp b/hotspot/src/share/vm/gc/parallel/psVirtualspace.hpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp rename to hotspot/src/share/vm/gc/parallel/psVirtualspace.hpp index 52d77402df1..d39e59ee8c5 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp +++ b/hotspot/src/share/vm/gc/parallel/psVirtualspace.hpp @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSVIRTUALSPACE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSVIRTUALSPACE_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSVIRTUALSPACE_HPP +#define SHARE_VM_GC_PARALLEL_PSVIRTUALSPACE_HPP #include "memory/virtualspace.hpp" @@ -179,4 +179,4 @@ inline void PSVirtualSpace::set_committed(char* low_addr, char* high_addr) { _committed_high_addr = high_addr; } -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSVIRTUALSPACE_HPP +#endif // SHARE_VM_GC_PARALLEL_PSVIRTUALSPACE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.cpp b/hotspot/src/share/vm/gc/parallel/psYoungGen.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.cpp rename to hotspot/src/share/vm/gc/parallel/psYoungGen.cpp index 08bdea7bf4c..047443ff054 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.cpp +++ b/hotspot/src/share/vm/gc/parallel/psYoungGen.cpp @@ -23,13 +23,13 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.hpp" -#include "gc_implementation/parallelScavenge/psYoungGen.hpp" -#include "gc_implementation/shared/gcUtil.hpp" -#include "gc_implementation/shared/mutableNUMASpace.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" +#include "gc/parallel/mutableNUMASpace.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/psMarkSweepDecorator.hpp" +#include "gc/parallel/psScavenge.hpp" +#include "gc/parallel/psYoungGen.hpp" +#include "gc/shared/gcUtil.hpp" +#include "gc/shared/spaceDecorator.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp b/hotspot/src/share/vm/gc/parallel/psYoungGen.hpp similarity index 91% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp rename to hotspot/src/share/vm/gc/parallel/psYoungGen.hpp index e3da6bdf2b8..1b51c435a53 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp +++ b/hotspot/src/share/vm/gc/parallel/psYoungGen.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,14 +22,14 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSYOUNGGEN_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSYOUNGGEN_HPP +#ifndef SHARE_VM_GC_PARALLEL_PSYOUNGGEN_HPP +#define SHARE_VM_GC_PARALLEL_PSYOUNGGEN_HPP -#include "gc_implementation/parallelScavenge/objectStartArray.hpp" -#include "gc_implementation/parallelScavenge/psGenerationCounters.hpp" -#include "gc_implementation/parallelScavenge/psVirtualspace.hpp" -#include "gc_implementation/shared/mutableSpace.hpp" -#include "gc_implementation/shared/spaceCounters.hpp" +#include "gc/parallel/mutableSpace.hpp" +#include "gc/parallel/objectStartArray.hpp" +#include "gc/parallel/psGenerationCounters.hpp" +#include "gc/parallel/psVirtualspace.hpp" +#include "gc/parallel/spaceCounters.hpp" class PSMarkSweepDecorator; @@ -195,4 +195,4 @@ class PSYoungGen : public CHeapObj { void record_spaces_top() PRODUCT_RETURN; }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSYOUNGGEN_HPP +#endif // SHARE_VM_GC_PARALLEL_PSYOUNGGEN_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.cpp b/hotspot/src/share/vm/gc/parallel/spaceCounters.cpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/shared/spaceCounters.cpp rename to hotspot/src/share/vm/gc/parallel/spaceCounters.cpp index 5a20c0dd4b9..36cb8099523 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.cpp +++ b/hotspot/src/share/vm/gc/parallel/spaceCounters.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,11 +23,9 @@ */ #include "precompiled.hpp" -#include "utilities/macros.hpp" -#if INCLUDE_ALL_GCS -#include "gc_implementation/shared/spaceCounters.hpp" +#include "gc/parallel/spaceCounters.hpp" #include "memory/resourceArea.hpp" -#endif // INCLUDE_ALL_GCS +#include "utilities/macros.hpp" SpaceCounters::SpaceCounters(const char* name, int ordinal, size_t max_size, MutableSpace* m, GenerationCounters* gc) : diff --git a/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.hpp b/hotspot/src/share/vm/gc/parallel/spaceCounters.hpp similarity index 83% rename from hotspot/src/share/vm/gc_implementation/shared/spaceCounters.hpp rename to hotspot/src/share/vm/gc/parallel/spaceCounters.hpp index 893bba88c66..38e6542085f 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.hpp +++ b/hotspot/src/share/vm/gc/parallel/spaceCounters.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,16 +22,14 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_SPACECOUNTERS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_SPACECOUNTERS_HPP +#ifndef SHARE_VM_GC_PARALLEL_SPACECOUNTERS_HPP +#define SHARE_VM_GC_PARALLEL_SPACECOUNTERS_HPP -#include "utilities/macros.hpp" -#if INCLUDE_ALL_GCS -#include "gc_implementation/shared/generationCounters.hpp" -#include "gc_implementation/shared/immutableSpace.hpp" -#include "gc_implementation/shared/mutableSpace.hpp" +#include "gc/parallel/immutableSpace.hpp" +#include "gc/parallel/mutableSpace.hpp" +#include "gc/shared/generationCounters.hpp" #include "runtime/perfData.hpp" -#endif // INCLUDE_ALL_GCS +#include "utilities/macros.hpp" // A SpaceCounter is a holder class for performance counters // that track a space; @@ -87,4 +85,4 @@ class MutableSpaceUsedHelper: public PerfLongSampleHelper { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_SPACECOUNTERS_HPP +#endif // SHARE_VM_GC_PARALLEL_SPACECOUNTERS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.cpp b/hotspot/src/share/vm/gc/parallel/vmPSOperations.cpp similarity index 89% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.cpp rename to hotspot/src/share/vm/gc/parallel/vmPSOperations.cpp index cc5e1226344..931ec86313d 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.cpp +++ b/hotspot/src/share/vm/gc/parallel/vmPSOperations.cpp @@ -23,11 +23,11 @@ */ #include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.inline.hpp" -#include "gc_implementation/parallelScavenge/psMarkSweep.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.hpp" -#include "gc_implementation/parallelScavenge/vmPSOperations.hpp" -#include "memory/gcLocker.inline.hpp" +#include "gc/parallel/parallelScavengeHeap.inline.hpp" +#include "gc/parallel/psMarkSweep.hpp" +#include "gc/parallel/psScavenge.hpp" +#include "gc/parallel/vmPSOperations.hpp" +#include "gc/shared/gcLocker.inline.hpp" #include "utilities/dtrace.hpp" // The following methods are used by the parallel scavenge collector diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.hpp b/hotspot/src/share/vm/gc/parallel/vmPSOperations.hpp similarity index 80% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.hpp rename to hotspot/src/share/vm/gc/parallel/vmPSOperations.hpp index 7ffe251618a..af7be6e93f0 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.hpp +++ b/hotspot/src/share/vm/gc/parallel/vmPSOperations.hpp @@ -22,12 +22,12 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_VMPSOPERATIONS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_VMPSOPERATIONS_HPP +#ifndef SHARE_VM_GC_PARALLEL_VMPSOPERATIONS_HPP +#define SHARE_VM_GC_PARALLEL_VMPSOPERATIONS_HPP -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/shared/vmGCOperations.hpp" -#include "gc_interface/gcCause.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/shared/gcCause.hpp" +#include "gc/shared/vmGCOperations.hpp" class VM_ParallelGCFailedAllocation : public VM_CollectForAllocation { public: @@ -46,4 +46,4 @@ class VM_ParallelGCSystemGC: public VM_GC_Operation { virtual void doit(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_VMPSOPERATIONS_HPP +#endif // SHARE_VM_GC_PARALLEL_VMPSOPERATIONS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/vmStructs_parallelgc.hpp b/hotspot/src/share/vm/gc/parallel/vmStructs_parallelgc.hpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/parallelScavenge/vmStructs_parallelgc.hpp rename to hotspot/src/share/vm/gc/parallel/vmStructs_parallelgc.hpp index fa79b31a13e..65d2f092171 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/vmStructs_parallelgc.hpp +++ b/hotspot/src/share/vm/gc/parallel/vmStructs_parallelgc.hpp @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_VMSTRUCTS_PARALLELGC_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_VMSTRUCTS_PARALLELGC_HPP +#ifndef SHARE_VM_GC_PARALLEL_VMSTRUCTS_PARALLELGC_HPP +#define SHARE_VM_GC_PARALLEL_VMSTRUCTS_PARALLELGC_HPP #define VM_STRUCTS_PARALLELGC(nonstatic_field, \ static_field) \ @@ -92,4 +92,4 @@ declare_toplevel_type(ASPSOldGen*) \ declare_toplevel_type(ParallelScavengeHeap*) -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_VMSTRUCTS_PARALLELGC_HPP +#endif // SHARE_VM_GC_PARALLEL_VMSTRUCTS_PARALLELGC_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.cpp b/hotspot/src/share/vm/gc/serial/cSpaceCounters.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.cpp rename to hotspot/src/share/vm/gc/serial/cSpaceCounters.cpp index 9b371987e1d..84e9c96bd4e 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.cpp +++ b/hotspot/src/share/vm/gc/serial/cSpaceCounters.cpp @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/cSpaceCounters.hpp" +#include "gc/serial/cSpaceCounters.hpp" #include "memory/metaspace.hpp" #include "memory/resourceArea.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.hpp b/hotspot/src/share/vm/gc/serial/cSpaceCounters.hpp similarity index 88% rename from hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.hpp rename to hotspot/src/share/vm/gc/serial/cSpaceCounters.hpp index e30044bc5e3..ffe43ab14a2 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.hpp +++ b/hotspot/src/share/vm/gc/serial/cSpaceCounters.hpp @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_CSPACECOUNTERS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_CSPACECOUNTERS_HPP +#ifndef SHARE_VM_GC_SERIAL_CSPACECOUNTERS_HPP +#define SHARE_VM_GC_SERIAL_CSPACECOUNTERS_HPP -#include "gc_implementation/shared/generationCounters.hpp" -#include "memory/space.hpp" +#include "gc/shared/generationCounters.hpp" +#include "gc/shared/space.hpp" #include "runtime/perfData.hpp" // A CSpaceCounters is a holder class for performance counters @@ -73,4 +73,4 @@ class ContiguousSpaceUsedHelper : public PerfLongSampleHelper { jlong take_sample(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_CSPACECOUNTERS_HPP +#endif // SHARE_VM_GC_SERIAL_CSPACECOUNTERS_HPP diff --git a/hotspot/src/share/vm/memory/defNewGeneration.cpp b/hotspot/src/share/vm/gc/serial/defNewGeneration.cpp similarity index 98% rename from hotspot/src/share/vm/memory/defNewGeneration.cpp rename to hotspot/src/share/vm/gc/serial/defNewGeneration.cpp index b414621db29..65ac2fd911e 100644 --- a/hotspot/src/share/vm/memory/defNewGeneration.cpp +++ b/hotspot/src/share/vm/gc/serial/defNewGeneration.cpp @@ -23,22 +23,22 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/collectorCounters.hpp" -#include "gc_implementation/shared/gcPolicyCounters.hpp" -#include "gc_implementation/shared/gcHeapSummary.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTraceTime.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" -#include "memory/defNewGeneration.inline.hpp" -#include "memory/gcLocker.inline.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/genOopClosures.inline.hpp" -#include "memory/genRemSet.hpp" -#include "memory/generationSpec.hpp" +#include "gc/serial/defNewGeneration.inline.hpp" +#include "gc/shared/collectorCounters.hpp" +#include "gc/shared/gcHeapSummary.hpp" +#include "gc/shared/gcLocker.inline.hpp" +#include "gc/shared/gcPolicyCounters.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/gcTraceTime.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/genOopClosures.inline.hpp" +#include "gc/shared/genRemSet.hpp" +#include "gc/shared/generationSpec.hpp" +#include "gc/shared/referencePolicy.hpp" +#include "gc/shared/space.inline.hpp" +#include "gc/shared/spaceDecorator.hpp" #include "memory/iterator.hpp" -#include "memory/referencePolicy.hpp" -#include "memory/space.inline.hpp" #include "oops/instanceRefKlass.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" @@ -49,7 +49,7 @@ #include "utilities/globalDefinitions.hpp" #include "utilities/stack.inline.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/parNew/parOopClosures.hpp" +#include "gc/cms/parOopClosures.hpp" #endif // diff --git a/hotspot/src/share/vm/memory/defNewGeneration.hpp b/hotspot/src/share/vm/gc/serial/defNewGeneration.hpp similarity index 96% rename from hotspot/src/share/vm/memory/defNewGeneration.hpp rename to hotspot/src/share/vm/gc/serial/defNewGeneration.hpp index 4d12a022359..1975114aefb 100644 --- a/hotspot/src/share/vm/memory/defNewGeneration.hpp +++ b/hotspot/src/share/vm/gc/serial/defNewGeneration.hpp @@ -22,14 +22,14 @@ * */ -#ifndef SHARE_VM_MEMORY_DEFNEWGENERATION_HPP -#define SHARE_VM_MEMORY_DEFNEWGENERATION_HPP +#ifndef SHARE_VM_GC_SERIAL_DEFNEWGENERATION_HPP +#define SHARE_VM_GC_SERIAL_DEFNEWGENERATION_HPP -#include "gc_implementation/shared/ageTable.hpp" -#include "gc_implementation/shared/cSpaceCounters.hpp" -#include "gc_implementation/shared/generationCounters.hpp" -#include "gc_implementation/shared/copyFailedInfo.hpp" -#include "memory/generation.hpp" +#include "gc/serial/cSpaceCounters.hpp" +#include "gc/shared/ageTable.hpp" +#include "gc/shared/copyFailedInfo.hpp" +#include "gc/shared/generation.hpp" +#include "gc/shared/generationCounters.hpp" #include "utilities/stack.hpp" class ContiguousSpace; @@ -362,4 +362,4 @@ protected: void swap_spaces(); }; -#endif // SHARE_VM_MEMORY_DEFNEWGENERATION_HPP +#endif // SHARE_VM_GC_SERIAL_DEFNEWGENERATION_HPP diff --git a/hotspot/src/share/vm/memory/defNewGeneration.inline.hpp b/hotspot/src/share/vm/gc/serial/defNewGeneration.inline.hpp similarity index 89% rename from hotspot/src/share/vm/memory/defNewGeneration.inline.hpp rename to hotspot/src/share/vm/gc/serial/defNewGeneration.inline.hpp index b10d6d9e783..4ddb46becc7 100644 --- a/hotspot/src/share/vm/memory/defNewGeneration.inline.hpp +++ b/hotspot/src/share/vm/gc/serial/defNewGeneration.inline.hpp @@ -22,14 +22,14 @@ * */ -#ifndef SHARE_VM_MEMORY_DEFNEWGENERATION_INLINE_HPP -#define SHARE_VM_MEMORY_DEFNEWGENERATION_INLINE_HPP +#ifndef SHARE_VM_GC_SERIAL_DEFNEWGENERATION_INLINE_HPP +#define SHARE_VM_GC_SERIAL_DEFNEWGENERATION_INLINE_HPP -#include "memory/cardTableRS.hpp" -#include "memory/defNewGeneration.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/genOopClosures.inline.hpp" -#include "memory/space.hpp" +#include "gc/serial/defNewGeneration.hpp" +#include "gc/shared/cardTableRS.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/genOopClosures.inline.hpp" +#include "gc/shared/space.hpp" // Methods of protected closure types @@ -89,4 +89,4 @@ inline void DefNewGeneration::FastKeepAliveClosure::do_oop_work(T* p) { } } -#endif // SHARE_VM_MEMORY_DEFNEWGENERATION_INLINE_HPP +#endif // SHARE_VM_GC_SERIAL_DEFNEWGENERATION_INLINE_HPP diff --git a/hotspot/src/share/vm/memory/genMarkSweep.cpp b/hotspot/src/share/vm/gc/serial/genMarkSweep.cpp similarity index 96% rename from hotspot/src/share/vm/memory/genMarkSweep.cpp rename to hotspot/src/share/vm/gc/serial/genMarkSweep.cpp index 94100be74d4..d355e9ac7aa 100644 --- a/hotspot/src/share/vm/memory/genMarkSweep.cpp +++ b/hotspot/src/share/vm/gc/serial/genMarkSweep.cpp @@ -29,17 +29,17 @@ #include "classfile/vmSymbols.hpp" #include "code/codeCache.hpp" #include "code/icBuffer.hpp" -#include "gc_implementation/shared/gcHeapSummary.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/gcTraceTime.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/genMarkSweep.hpp" -#include "memory/genOopClosures.inline.hpp" -#include "memory/modRefBarrierSet.hpp" -#include "memory/referencePolicy.hpp" -#include "memory/space.hpp" +#include "gc/serial/genMarkSweep.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/gcHeapSummary.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/gcTraceTime.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/genOopClosures.inline.hpp" +#include "gc/shared/modRefBarrierSet.hpp" +#include "gc/shared/referencePolicy.hpp" +#include "gc/shared/space.hpp" #include "oops/instanceRefKlass.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" diff --git a/hotspot/src/share/vm/memory/genMarkSweep.hpp b/hotspot/src/share/vm/gc/serial/genMarkSweep.hpp similarity index 87% rename from hotspot/src/share/vm/memory/genMarkSweep.hpp rename to hotspot/src/share/vm/gc/serial/genMarkSweep.hpp index b6147ab5bed..c1934995c36 100644 --- a/hotspot/src/share/vm/memory/genMarkSweep.hpp +++ b/hotspot/src/share/vm/gc/serial/genMarkSweep.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_MEMORY_GENMARKSWEEP_HPP -#define SHARE_VM_MEMORY_GENMARKSWEEP_HPP +#ifndef SHARE_VM_GC_SERIAL_GENMARKSWEEP_HPP +#define SHARE_VM_GC_SERIAL_GENMARKSWEEP_HPP -#include "gc_implementation/shared/markSweep.hpp" +#include "gc/serial/markSweep.hpp" class GenMarkSweep : public MarkSweep { friend class VM_MarkSweep; @@ -50,4 +50,4 @@ class GenMarkSweep : public MarkSweep { static void deallocate_stacks(); }; -#endif // SHARE_VM_MEMORY_GENMARKSWEEP_HPP +#endif // SHARE_VM_GC_SERIAL_GENMARKSWEEP_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp b/hotspot/src/share/vm/gc/serial/markSweep.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp rename to hotspot/src/share/vm/gc/serial/markSweep.cpp index 6808460d362..14fa7fe60cf 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp +++ b/hotspot/src/share/vm/gc/serial/markSweep.cpp @@ -24,10 +24,10 @@ #include "precompiled.hpp" #include "compiler/compileBroker.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/markSweep.inline.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/serial/markSweep.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTrace.hpp" #include "oops/instanceKlass.inline.hpp" #include "oops/instanceMirrorKlass.inline.hpp" #include "oops/methodData.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp b/hotspot/src/share/vm/gc/serial/markSweep.hpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp rename to hotspot/src/share/vm/gc/serial/markSweep.hpp index 6ffd76af54d..0e8e1235415 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp +++ b/hotspot/src/share/vm/gc/serial/markSweep.hpp @@ -22,18 +22,18 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_MARKSWEEP_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_MARKSWEEP_HPP +#ifndef SHARE_VM_GC_SERIAL_MARKSWEEP_HPP +#define SHARE_VM_GC_SERIAL_MARKSWEEP_HPP -#include "gc_interface/collectedHeap.hpp" -#include "memory/genOopClosures.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/genOopClosures.hpp" +#include "gc/shared/taskqueue.hpp" #include "memory/iterator.hpp" #include "oops/markOop.hpp" #include "oops/oop.hpp" #include "runtime/timer.hpp" #include "utilities/growableArray.hpp" #include "utilities/stack.hpp" -#include "utilities/taskqueue.hpp" class ReferenceProcessor; class DataLayout; @@ -195,4 +195,4 @@ public: void restore(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_MARKSWEEP_HPP +#endif // SHARE_VM_GC_SERIAL_MARKSWEEP_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/markSweep.inline.hpp b/hotspot/src/share/vm/gc/serial/markSweep.inline.hpp similarity index 92% rename from hotspot/src/share/vm/gc_implementation/shared/markSweep.inline.hpp rename to hotspot/src/share/vm/gc/serial/markSweep.inline.hpp index 39201f76440..9d8e578dd69 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/markSweep.inline.hpp +++ b/hotspot/src/share/vm/gc/serial/markSweep.inline.hpp @@ -22,21 +22,21 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_MARKSWEEP_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_MARKSWEEP_INLINE_HPP +#ifndef SHARE_VM_GC_SERIAL_MARKSWEEP_INLINE_HPP +#define SHARE_VM_GC_SERIAL_MARKSWEEP_INLINE_HPP -#include "gc_implementation/shared/markSweep.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "oops/markOop.inline.hpp" -#include "oops/instanceKlass.inline.hpp" +#include "gc/serial/markSweep.hpp" +#include "gc/shared/collectedHeap.hpp" #include "oops/instanceClassLoaderKlass.inline.hpp" +#include "oops/instanceKlass.inline.hpp" #include "oops/instanceMirrorKlass.inline.hpp" #include "oops/instanceRefKlass.inline.hpp" +#include "oops/markOop.inline.hpp" #include "oops/objArrayKlass.inline.hpp" -#include "utilities/stack.inline.hpp" #include "utilities/macros.hpp" +#include "utilities/stack.inline.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1StringDedup.hpp" +#include "gc/g1/g1StringDedup.hpp" #endif // INCLUDE_ALL_GCS inline void MarkSweep::mark_object(oop obj) { @@ -128,4 +128,4 @@ template inline void MarkSweep::KeepAliveClosure::do_oop_work(T* p) { mark_and_push(p); } -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_MARKSWEEP_INLINE_HPP +#endif // SHARE_VM_GC_SERIAL_MARKSWEEP_INLINE_HPP diff --git a/hotspot/src/share/vm/memory/tenuredGeneration.cpp b/hotspot/src/share/vm/gc/serial/tenuredGeneration.cpp similarity index 95% rename from hotspot/src/share/vm/memory/tenuredGeneration.cpp rename to hotspot/src/share/vm/gc/serial/tenuredGeneration.cpp index 63026205c1a..7ae2590b497 100644 --- a/hotspot/src/share/vm/memory/tenuredGeneration.cpp +++ b/hotspot/src/share/vm/gc/serial/tenuredGeneration.cpp @@ -23,21 +23,21 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/collectorCounters.hpp" -#include "gc_implementation/shared/gcTimer.hpp" +#include "gc/serial/genMarkSweep.hpp" +#include "gc/serial/tenuredGeneration.inline.hpp" +#include "gc/shared/blockOffsetTable.inline.hpp" +#include "gc/shared/cardGeneration.inline.hpp" +#include "gc/shared/collectorCounters.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/genOopClosures.inline.hpp" +#include "gc/shared/generationSpec.hpp" +#include "gc/shared/space.hpp" #include "memory/allocation.inline.hpp" -#include "memory/blockOffsetTable.inline.hpp" -#include "memory/cardGeneration.inline.hpp" -#include "memory/generationSpec.hpp" -#include "memory/genMarkSweep.hpp" -#include "memory/genOopClosures.inline.hpp" -#include "memory/space.hpp" -#include "memory/tenuredGeneration.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/parNew/parOopClosures.hpp" +#include "gc/cms/parOopClosures.hpp" #endif TenuredGeneration::TenuredGeneration(ReservedSpace rs, diff --git a/hotspot/src/share/vm/memory/tenuredGeneration.hpp b/hotspot/src/share/vm/gc/serial/tenuredGeneration.hpp similarity index 91% rename from hotspot/src/share/vm/memory/tenuredGeneration.hpp rename to hotspot/src/share/vm/gc/serial/tenuredGeneration.hpp index 5417e69cb7f..250abaaacf6 100644 --- a/hotspot/src/share/vm/memory/tenuredGeneration.hpp +++ b/hotspot/src/share/vm/gc/serial/tenuredGeneration.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ * */ -#ifndef SHARE_VM_MEMORY_TENUREDGENERATION_HPP -#define SHARE_VM_MEMORY_TENUREDGENERATION_HPP +#ifndef SHARE_VM_GC_SERIAL_TENUREDGENERATION_HPP +#define SHARE_VM_GC_SERIAL_TENUREDGENERATION_HPP -#include "gc_implementation/shared/cSpaceCounters.hpp" -#include "gc_implementation/shared/gcStats.hpp" -#include "gc_implementation/shared/generationCounters.hpp" -#include "memory/cardGeneration.hpp" +#include "gc/serial/cSpaceCounters.hpp" +#include "gc/shared/cardGeneration.hpp" +#include "gc/shared/gcStats.hpp" +#include "gc/shared/generationCounters.hpp" #include "utilities/macros.hpp" // TenuredGeneration models the heap containing old (promoted/tenured) objects @@ -128,4 +128,4 @@ class TenuredGeneration: public CardGeneration { virtual void print_on(outputStream* st) const; }; -#endif // SHARE_VM_MEMORY_TENUREDGENERATION_HPP +#endif // SHARE_VM_GC_SERIAL_TENUREDGENERATION_HPP diff --git a/hotspot/src/share/vm/memory/tenuredGeneration.inline.hpp b/hotspot/src/share/vm/gc/serial/tenuredGeneration.inline.hpp similarity index 85% rename from hotspot/src/share/vm/memory/tenuredGeneration.inline.hpp rename to hotspot/src/share/vm/gc/serial/tenuredGeneration.inline.hpp index aea97ea317a..490f0abaa48 100644 --- a/hotspot/src/share/vm/memory/tenuredGeneration.inline.hpp +++ b/hotspot/src/share/vm/gc/serial/tenuredGeneration.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_MEMORY_TENUREDGENERATION_INLINE_HPP -#define SHARE_VM_MEMORY_TENUREDGENERATION_INLINE_HPP +#ifndef SHARE_VM_GC_SERIAL_TENUREDGENERATION_INLINE_HPP +#define SHARE_VM_GC_SERIAL_TENUREDGENERATION_INLINE_HPP -#include "memory/space.hpp" -#include "memory/tenuredGeneration.hpp" +#include "gc/serial/tenuredGeneration.hpp" +#include "gc/shared/space.hpp" HeapWord* TenuredGeneration::allocate(size_t word_size, bool is_tlab) { @@ -53,4 +53,4 @@ bool TenuredGeneration::block_is_obj(const HeapWord* addr) const { return addr < _the_space ->top(); } -#endif // SHARE_VM_MEMORY_TENUREDGENERATION_INLINE_HPP +#endif // SHARE_VM_GC_SERIAL_TENUREDGENERATION_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp b/hotspot/src/share/vm/gc/shared/adaptiveSizePolicy.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp rename to hotspot/src/share/vm/gc/shared/adaptiveSizePolicy.cpp index 44a49acc2da..78d9a39e8f4 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp +++ b/hotspot/src/share/vm/gc/shared/adaptiveSizePolicy.cpp @@ -23,12 +23,12 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/adaptiveSizePolicy.hpp" -#include "gc_interface/gcCause.hpp" -#include "memory/collectorPolicy.hpp" +#include "gc/shared/adaptiveSizePolicy.hpp" +#include "gc/shared/collectorPolicy.hpp" +#include "gc/shared/gcCause.hpp" +#include "gc/shared/workgroup.hpp" #include "runtime/timer.hpp" #include "utilities/ostream.hpp" -#include "utilities/workgroup.hpp" elapsedTimer AdaptiveSizePolicy::_minor_timer; elapsedTimer AdaptiveSizePolicy::_major_timer; bool AdaptiveSizePolicy::_debug_perturbation = false; diff --git a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp b/hotspot/src/share/vm/gc/shared/adaptiveSizePolicy.hpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp rename to hotspot/src/share/vm/gc/shared/adaptiveSizePolicy.hpp index b7ded0fb4cb..f9a0b7ce5a7 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp +++ b/hotspot/src/share/vm/gc/shared/adaptiveSizePolicy.hpp @@ -22,12 +22,12 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_ADAPTIVESIZEPOLICY_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_ADAPTIVESIZEPOLICY_HPP +#ifndef SHARE_VM_GC_SHARED_ADAPTIVESIZEPOLICY_HPP +#define SHARE_VM_GC_SHARED_ADAPTIVESIZEPOLICY_HPP -#include "gc_implementation/shared/gcUtil.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "gc_interface/gcCause.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/gcCause.hpp" +#include "gc/shared/gcUtil.hpp" #include "memory/allocation.hpp" #include "memory/universe.hpp" @@ -542,4 +542,4 @@ class AdaptiveSizePolicyOutput : StackObj { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_ADAPTIVESIZEPOLICY_HPP +#endif // SHARE_VM_GC_SHARED_ADAPTIVESIZEPOLICY_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/ageTable.cpp b/hotspot/src/share/vm/gc/shared/ageTable.cpp similarity index 93% rename from hotspot/src/share/vm/gc_implementation/shared/ageTable.cpp rename to hotspot/src/share/vm/gc/shared/ageTable.cpp index 709d3e18b27..0a6c189f94f 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/ageTable.cpp +++ b/hotspot/src/share/vm/gc/shared/ageTable.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,15 +23,15 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/ageTable.hpp" -#include "gc_implementation/shared/gcPolicyCounters.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "memory/collectorPolicy.hpp" +#include "gc/shared/ageTable.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/collectorPolicy.hpp" +#include "gc/shared/gcPolicyCounters.hpp" #include "memory/resourceArea.hpp" #include "runtime/atomic.inline.hpp" #include "utilities/copy.hpp" -/* Copyright (c) 1992-2009 Oracle and/or its affiliates, and Stanford University. +/* Copyright (c) 1992, 2015, Oracle and/or its affiliates, and Stanford University. See the LICENSE file for license information. */ ageTable::ageTable(bool global) { diff --git a/hotspot/src/share/vm/gc_implementation/shared/ageTable.hpp b/hotspot/src/share/vm/gc/shared/ageTable.hpp similarity index 87% rename from hotspot/src/share/vm/gc_implementation/shared/ageTable.hpp rename to hotspot/src/share/vm/gc/shared/ageTable.hpp index 44587d99d62..2902822006b 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/ageTable.hpp +++ b/hotspot/src/share/vm/gc/shared/ageTable.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_AGETABLE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_AGETABLE_HPP +#ifndef SHARE_VM_GC_SHARED_AGETABLE_HPP +#define SHARE_VM_GC_SHARED_AGETABLE_HPP #include "oops/markOop.hpp" #include "oops/oop.hpp" @@ -31,7 +31,7 @@ class GCPolicyCounters; -/* Copyright (c) 1992-2009 Oracle and/or its affiliates, and Stanford University. +/* Copyright (c) 1992, 2015, Oracle and/or its affiliates, and Stanford University. See the LICENSE file for license information. */ // Age table for adaptive feedback-mediated tenuring (scavenging) @@ -77,4 +77,4 @@ class ageTable VALUE_OBJ_CLASS_SPEC { PerfVariable* _perf_sizes[table_size]; }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_AGETABLE_HPP +#endif // SHARE_VM_GC_SHARED_AGETABLE_HPP diff --git a/hotspot/src/share/vm/gc_interface/allocTracer.cpp b/hotspot/src/share/vm/gc/shared/allocTracer.cpp similarity index 93% rename from hotspot/src/share/vm/gc_interface/allocTracer.cpp rename to hotspot/src/share/vm/gc/shared/allocTracer.cpp index d3440cd8534..4c6c30d75fd 100644 --- a/hotspot/src/share/vm/gc_interface/allocTracer.cpp +++ b/hotspot/src/share/vm/gc/shared/allocTracer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,9 +23,9 @@ */ #include "precompiled.hpp" -#include "gc_interface/allocTracer.hpp" -#include "trace/tracing.hpp" +#include "gc/shared/allocTracer.hpp" #include "runtime/handles.hpp" +#include "trace/tracing.hpp" #include "utilities/globalDefinitions.hpp" void AllocTracer::send_allocation_outside_tlab_event(KlassHandle klass, size_t alloc_size) { diff --git a/hotspot/src/share/vm/gc_interface/allocTracer.hpp b/hotspot/src/share/vm/gc/shared/allocTracer.hpp similarity index 85% rename from hotspot/src/share/vm/gc_interface/allocTracer.hpp rename to hotspot/src/share/vm/gc/shared/allocTracer.hpp index 33e6f19f3a8..9271ff3fbe1 100644 --- a/hotspot/src/share/vm/gc_interface/allocTracer.hpp +++ b/hotspot/src/share/vm/gc/shared/allocTracer.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_INTERFACE_ALLOCTRACER_HPP -#define SHARE_VM_GC_INTERFACE_ALLOCTRACER_HPP +#ifndef SHARE_VM_GC_SHARED_ALLOCTRACER_HPP +#define SHARE_VM_GC_SHARED_ALLOCTRACER_HPP #include "memory/allocation.hpp" #include "runtime/handles.hpp" @@ -34,4 +34,4 @@ class AllocTracer : AllStatic { static void send_allocation_in_new_tlab_event(KlassHandle klass, size_t tlab_size, size_t alloc_size); }; -#endif /* SHARE_VM_GC_INTERFACE_ALLOCTRACER_HPP */ +#endif /* SHARE_VM_GC_SHARED_ALLOCTRACER_HPP */ diff --git a/hotspot/src/share/vm/memory/barrierSet.cpp b/hotspot/src/share/vm/gc/shared/barrierSet.cpp similarity index 92% rename from hotspot/src/share/vm/memory/barrierSet.cpp rename to hotspot/src/share/vm/gc/shared/barrierSet.cpp index 8cd966f5fc9..6b60fed1aaa 100644 --- a/hotspot/src/share/vm/memory/barrierSet.cpp +++ b/hotspot/src/share/vm/gc/shared/barrierSet.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "memory/barrierSet.inline.hpp" +#include "gc/shared/barrierSet.inline.hpp" +#include "gc/shared/collectedHeap.hpp" #include "memory/universe.hpp" // count is number of array elements being written diff --git a/hotspot/src/share/vm/memory/barrierSet.hpp b/hotspot/src/share/vm/gc/shared/barrierSet.hpp similarity index 98% rename from hotspot/src/share/vm/memory/barrierSet.hpp rename to hotspot/src/share/vm/gc/shared/barrierSet.hpp index 12591db754b..0267ef63b30 100644 --- a/hotspot/src/share/vm/memory/barrierSet.hpp +++ b/hotspot/src/share/vm/gc/shared/barrierSet.hpp @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_MEMORY_BARRIERSET_HPP -#define SHARE_VM_MEMORY_BARRIERSET_HPP +#ifndef SHARE_VM_GC_SHARED_BARRIERSET_HPP +#define SHARE_VM_GC_SHARED_BARRIERSET_HPP #include "memory/memRegion.hpp" #include "oops/oopsHierarchy.hpp" @@ -218,4 +218,4 @@ inline T* barrier_set_cast(BarrierSet* bs) { return static_cast(bs); } -#endif // SHARE_VM_MEMORY_BARRIERSET_HPP +#endif // SHARE_VM_GC_SHARED_BARRIERSET_HPP diff --git a/hotspot/src/share/vm/memory/barrierSet.inline.hpp b/hotspot/src/share/vm/gc/shared/barrierSet.inline.hpp similarity index 93% rename from hotspot/src/share/vm/memory/barrierSet.inline.hpp rename to hotspot/src/share/vm/gc/shared/barrierSet.inline.hpp index 98437abf188..14bc00cc104 100644 --- a/hotspot/src/share/vm/memory/barrierSet.inline.hpp +++ b/hotspot/src/share/vm/gc/shared/barrierSet.inline.hpp @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_MEMORY_BARRIERSET_INLINE_HPP -#define SHARE_VM_MEMORY_BARRIERSET_INLINE_HPP +#ifndef SHARE_VM_GC_SHARED_BARRIERSET_INLINE_HPP +#define SHARE_VM_GC_SHARED_BARRIERSET_INLINE_HPP -#include "memory/barrierSet.hpp" -#include "memory/cardTableModRefBS.inline.hpp" +#include "gc/shared/barrierSet.hpp" +#include "gc/shared/cardTableModRefBS.inline.hpp" // Inline functions of BarrierSet, which de-virtualize certain // performance-critical calls when the barrier is the most common @@ -84,4 +84,4 @@ inline void BarrierSet::write_region(MemRegion mr) { } } -#endif // SHARE_VM_MEMORY_BARRIERSET_INLINE_HPP +#endif // SHARE_VM_GC_SHARED_BARRIERSET_INLINE_HPP diff --git a/hotspot/src/share/vm/memory/blockOffsetTable.cpp b/hotspot/src/share/vm/gc/shared/blockOffsetTable.cpp similarity index 99% rename from hotspot/src/share/vm/memory/blockOffsetTable.cpp rename to hotspot/src/share/vm/gc/shared/blockOffsetTable.cpp index b02d4d12c00..dee7be12306 100644 --- a/hotspot/src/share/vm/memory/blockOffsetTable.cpp +++ b/hotspot/src/share/vm/gc/shared/blockOffsetTable.cpp @@ -23,10 +23,10 @@ */ #include "precompiled.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "memory/blockOffsetTable.inline.hpp" +#include "gc/shared/blockOffsetTable.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/space.inline.hpp" #include "memory/iterator.hpp" -#include "memory/space.inline.hpp" #include "memory/universe.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" diff --git a/hotspot/src/share/vm/memory/blockOffsetTable.hpp b/hotspot/src/share/vm/gc/shared/blockOffsetTable.hpp similarity index 99% rename from hotspot/src/share/vm/memory/blockOffsetTable.hpp rename to hotspot/src/share/vm/gc/shared/blockOffsetTable.hpp index 8f0372941d9..154f36601cf 100644 --- a/hotspot/src/share/vm/memory/blockOffsetTable.hpp +++ b/hotspot/src/share/vm/gc/shared/blockOffsetTable.hpp @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_MEMORY_BLOCKOFFSETTABLE_HPP -#define SHARE_VM_MEMORY_BLOCKOFFSETTABLE_HPP +#ifndef SHARE_VM_GC_SHARED_BLOCKOFFSETTABLE_HPP +#define SHARE_VM_GC_SHARED_BLOCKOFFSETTABLE_HPP #include "memory/memRegion.hpp" #include "memory/virtualspace.hpp" @@ -557,4 +557,4 @@ class BlockOffsetArrayContigSpace: public BlockOffsetArray { virtual size_t last_active_index() const; }; -#endif // SHARE_VM_MEMORY_BLOCKOFFSETTABLE_HPP +#endif // SHARE_VM_GC_SHARED_BLOCKOFFSETTABLE_HPP diff --git a/hotspot/src/share/vm/memory/blockOffsetTable.inline.hpp b/hotspot/src/share/vm/gc/shared/blockOffsetTable.inline.hpp similarity index 92% rename from hotspot/src/share/vm/memory/blockOffsetTable.inline.hpp rename to hotspot/src/share/vm/gc/shared/blockOffsetTable.inline.hpp index 820567c55ee..4014927c6b6 100644 --- a/hotspot/src/share/vm/memory/blockOffsetTable.inline.hpp +++ b/hotspot/src/share/vm/gc/shared/blockOffsetTable.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_MEMORY_BLOCKOFFSETTABLE_INLINE_HPP -#define SHARE_VM_MEMORY_BLOCKOFFSETTABLE_INLINE_HPP +#ifndef SHARE_VM_GC_SHARED_BLOCKOFFSETTABLE_INLINE_HPP +#define SHARE_VM_GC_SHARED_BLOCKOFFSETTABLE_INLINE_HPP -#include "memory/blockOffsetTable.hpp" -#include "memory/space.hpp" +#include "gc/shared/blockOffsetTable.hpp" +#include "gc/shared/space.hpp" #include "runtime/safepoint.hpp" ////////////////////////////////////////////////////////////////////////// @@ -96,4 +96,4 @@ inline void BlockOffsetArrayNonContigSpace::freed(HeapWord* blk_start, } } -#endif // SHARE_VM_MEMORY_BLOCKOFFSETTABLE_INLINE_HPP +#endif // SHARE_VM_GC_SHARED_BLOCKOFFSETTABLE_INLINE_HPP diff --git a/hotspot/src/share/vm/memory/cardGeneration.cpp b/hotspot/src/share/vm/gc/shared/cardGeneration.cpp similarity index 98% rename from hotspot/src/share/vm/memory/cardGeneration.cpp rename to hotspot/src/share/vm/gc/shared/cardGeneration.cpp index 25f317c49bc..09285cf466f 100644 --- a/hotspot/src/share/vm/memory/cardGeneration.cpp +++ b/hotspot/src/share/vm/gc/shared/cardGeneration.cpp @@ -24,15 +24,15 @@ #include "precompiled.hpp" -#include "memory/blockOffsetTable.inline.hpp" -#include "memory/cardGeneration.inline.hpp" -#include "memory/gcLocker.hpp" -#include "memory/generationSpec.hpp" -#include "memory/genOopClosures.inline.hpp" -#include "memory/genRemSet.hpp" +#include "gc/shared/blockOffsetTable.inline.hpp" +#include "gc/shared/cardGeneration.inline.hpp" +#include "gc/shared/gcLocker.hpp" +#include "gc/shared/genOopClosures.inline.hpp" +#include "gc/shared/genRemSet.hpp" +#include "gc/shared/generationSpec.hpp" +#include "gc/shared/space.inline.hpp" #include "memory/iterator.hpp" #include "memory/memRegion.hpp" -#include "memory/space.inline.hpp" #include "runtime/java.hpp" CardGeneration::CardGeneration(ReservedSpace rs, size_t initial_byte_size, diff --git a/hotspot/src/share/vm/memory/cardGeneration.hpp b/hotspot/src/share/vm/gc/shared/cardGeneration.hpp similarity index 92% rename from hotspot/src/share/vm/memory/cardGeneration.hpp rename to hotspot/src/share/vm/gc/shared/cardGeneration.hpp index 24d0fa0f2c2..efc2656d4f1 100644 --- a/hotspot/src/share/vm/memory/cardGeneration.hpp +++ b/hotspot/src/share/vm/gc/shared/cardGeneration.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,13 @@ * */ -#ifndef SHARE_VM_MEMORY_CARDGENERATION_HPP -#define SHARE_VM_MEMORY_CARDGENERATION_HPP +#ifndef SHARE_VM_GC_SHARED_CARDGENERATION_HPP +#define SHARE_VM_GC_SHARED_CARDGENERATION_HPP // Class CardGeneration is a generation that is covered by a card table, // and uses a card-size block-offset array to implement block_start. -#include "memory/generation.hpp" +#include "gc/shared/generation.hpp" class BlockOffsetSharedArray; class CompactibleSpace; @@ -96,4 +96,4 @@ class CardGeneration: public Generation { CompactibleSpace* first_compaction_space() const; }; -#endif // SHARE_VM_MEMORY_CARDGENERATION_HPP +#endif // SHARE_VM_GC_SHARED_CARDGENERATION_HPP diff --git a/hotspot/src/share/vm/memory/cardGeneration.inline.hpp b/hotspot/src/share/vm/gc/shared/cardGeneration.inline.hpp similarity index 82% rename from hotspot/src/share/vm/memory/cardGeneration.inline.hpp rename to hotspot/src/share/vm/gc/shared/cardGeneration.inline.hpp index fb49d0d0718..e24b340c630 100644 --- a/hotspot/src/share/vm/memory/cardGeneration.inline.hpp +++ b/hotspot/src/share/vm/gc/shared/cardGeneration.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_MEMORY_CARDGENERATION_INLINE_HPP -#define SHARE_VM_MEMORY_CARDGENERATION_INLINE_HPP +#ifndef SHARE_VM_GC_SHARED_CARDGENERATION_INLINE_HPP +#define SHARE_VM_GC_SHARED_CARDGENERATION_INLINE_HPP -#include "memory/cardGeneration.hpp" -#include "memory/space.hpp" +#include "gc/shared/cardGeneration.hpp" +#include "gc/shared/space.hpp" inline size_t CardGeneration::capacity() const { return space()->capacity(); @@ -52,4 +52,4 @@ inline CompactibleSpace* CardGeneration::first_compaction_space() const { return space(); } -#endif // SHARE_VM_MEMORY_CARDGENERATION_INLINE_HPP +#endif // SHARE_VM_GC_SHARED_CARDGENERATION_INLINE_HPP diff --git a/hotspot/src/share/vm/memory/cardTableModRefBS.cpp b/hotspot/src/share/vm/gc/shared/cardTableModRefBS.cpp similarity index 99% rename from hotspot/src/share/vm/memory/cardTableModRefBS.cpp rename to hotspot/src/share/vm/gc/shared/cardTableModRefBS.cpp index 903b0a0eee3..61d2df3862c 100644 --- a/hotspot/src/share/vm/memory/cardTableModRefBS.cpp +++ b/hotspot/src/share/vm/gc/shared/cardTableModRefBS.cpp @@ -23,13 +23,13 @@ */ #include "precompiled.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/cardTableModRefBS.inline.hpp" +#include "gc/shared/cardTableRS.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/space.hpp" +#include "gc/shared/space.inline.hpp" #include "memory/allocation.inline.hpp" -#include "memory/cardTableModRefBS.inline.hpp" -#include "memory/cardTableRS.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/space.hpp" -#include "memory/space.inline.hpp" #include "memory/universe.hpp" #include "memory/virtualspace.hpp" #include "runtime/java.hpp" diff --git a/hotspot/src/share/vm/memory/cardTableModRefBS.hpp b/hotspot/src/share/vm/gc/shared/cardTableModRefBS.hpp similarity index 98% rename from hotspot/src/share/vm/memory/cardTableModRefBS.hpp rename to hotspot/src/share/vm/gc/shared/cardTableModRefBS.hpp index 97ce901ab80..abba92ca9e3 100644 --- a/hotspot/src/share/vm/memory/cardTableModRefBS.hpp +++ b/hotspot/src/share/vm/gc/shared/cardTableModRefBS.hpp @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_MEMORY_CARDTABLEMODREFBS_HPP -#define SHARE_VM_MEMORY_CARDTABLEMODREFBS_HPP +#ifndef SHARE_VM_GC_SHARED_CARDTABLEMODREFBS_HPP +#define SHARE_VM_GC_SHARED_CARDTABLEMODREFBS_HPP -#include "memory/modRefBarrierSet.hpp" +#include "gc/shared/modRefBarrierSet.hpp" #include "oops/oop.hpp" // This kind of "BarrierSet" allows a "CollectedHeap" to detect and @@ -465,4 +465,4 @@ struct BarrierSet::GetName { }; -#endif // SHARE_VM_MEMORY_CARDTABLEMODREFBS_HPP +#endif // SHARE_VM_GC_SHARED_CARDTABLEMODREFBS_HPP diff --git a/hotspot/src/share/vm/memory/cardTableModRefBS.inline.hpp b/hotspot/src/share/vm/gc/shared/cardTableModRefBS.inline.hpp similarity index 87% rename from hotspot/src/share/vm/memory/cardTableModRefBS.inline.hpp rename to hotspot/src/share/vm/gc/shared/cardTableModRefBS.inline.hpp index 0f758afb7b5..7b01a379558 100644 --- a/hotspot/src/share/vm/memory/cardTableModRefBS.inline.hpp +++ b/hotspot/src/share/vm/gc/shared/cardTableModRefBS.inline.hpp @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_MEMORY_CARDTABLEMODREFBS_INLINE_HPP -#define SHARE_VM_MEMORY_CARDTABLEMODREFBS_INLINE_HPP +#ifndef SHARE_VM_GC_SHARED_CARDTABLEMODREFBS_INLINE_HPP +#define SHARE_VM_GC_SHARED_CARDTABLEMODREFBS_INLINE_HPP -#include "memory/cardTableModRefBS.hpp" +#include "gc/shared/cardTableModRefBS.hpp" #include "oops/oopsHierarchy.hpp" #include "runtime/orderAccess.inline.hpp" @@ -39,4 +39,4 @@ template inline void CardTableModRefBS::inline_write_ref_field(T* fiel } } -#endif // SHARE_VM_MEMORY_CARDTABLEMODREFBS_INLINE_HPP +#endif // SHARE_VM_GC_SHARED_CARDTABLEMODREFBS_INLINE_HPP diff --git a/hotspot/src/share/vm/memory/cardTableRS.cpp b/hotspot/src/share/vm/gc/shared/cardTableRS.cpp similarity index 99% rename from hotspot/src/share/vm/memory/cardTableRS.cpp rename to hotspot/src/share/vm/gc/shared/cardTableRS.cpp index bd3604916d8..880effd5b6d 100644 --- a/hotspot/src/share/vm/memory/cardTableRS.cpp +++ b/hotspot/src/share/vm/gc/shared/cardTableRS.cpp @@ -23,11 +23,11 @@ */ #include "precompiled.hpp" +#include "gc/shared/cardTableRS.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/generation.hpp" +#include "gc/shared/space.inline.hpp" #include "memory/allocation.inline.hpp" -#include "memory/cardTableRS.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/generation.hpp" -#include "memory/space.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/java.hpp" diff --git a/hotspot/src/share/vm/memory/cardTableRS.hpp b/hotspot/src/share/vm/gc/shared/cardTableRS.hpp similarity index 95% rename from hotspot/src/share/vm/memory/cardTableRS.hpp rename to hotspot/src/share/vm/gc/shared/cardTableRS.hpp index cf3288a100d..98a1fca47fc 100644 --- a/hotspot/src/share/vm/memory/cardTableRS.hpp +++ b/hotspot/src/share/vm/gc/shared/cardTableRS.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_MEMORY_CARDTABLERS_HPP -#define SHARE_VM_MEMORY_CARDTABLERS_HPP +#ifndef SHARE_VM_GC_SHARED_CARDTABLERS_HPP +#define SHARE_VM_GC_SHARED_CARDTABLERS_HPP -#include "memory/cardTableModRefBS.hpp" -#include "memory/genRemSet.hpp" +#include "gc/shared/cardTableModRefBS.hpp" +#include "gc/shared/genRemSet.hpp" #include "memory/memRegion.hpp" class Space; @@ -187,4 +187,4 @@ public: void do_MemRegion(MemRegion mr); }; -#endif // SHARE_VM_MEMORY_CARDTABLERS_HPP +#endif // SHARE_VM_GC_SHARED_CARDTABLERS_HPP diff --git a/hotspot/src/share/vm/gc_interface/collectedHeap.cpp b/hotspot/src/share/vm/gc/shared/collectedHeap.cpp similarity index 98% rename from hotspot/src/share/vm/gc_interface/collectedHeap.cpp rename to hotspot/src/share/vm/gc/shared/collectedHeap.cpp index 2698adcd9f6..663588051de 100644 --- a/hotspot/src/share/vm/gc_interface/collectedHeap.cpp +++ b/hotspot/src/share/vm/gc/shared/collectedHeap.cpp @@ -24,18 +24,18 @@ #include "precompiled.hpp" #include "classfile/systemDictionary.hpp" -#include "gc_implementation/shared/gcHeapSummary.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/gcTraceTime.hpp" -#include "gc_implementation/shared/gcWhen.hpp" -#include "gc_implementation/shared/vmGCOperations.hpp" -#include "gc_interface/allocTracer.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "memory/barrierSet.inline.hpp" +#include "gc/shared/allocTracer.hpp" +#include "gc/shared/barrierSet.inline.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/gcHeapSummary.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/gcTraceTime.hpp" +#include "gc/shared/gcWhen.hpp" +#include "gc/shared/vmGCOperations.hpp" #include "memory/metaspace.hpp" -#include "oops/oop.inline.hpp" #include "oops/instanceMirrorKlass.hpp" +#include "oops/oop.inline.hpp" #include "runtime/init.hpp" #include "runtime/thread.inline.hpp" #include "services/heapDumper.hpp" diff --git a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp b/hotspot/src/share/vm/gc/shared/collectedHeap.hpp similarity index 99% rename from hotspot/src/share/vm/gc_interface/collectedHeap.hpp rename to hotspot/src/share/vm/gc/shared/collectedHeap.hpp index ccb8a41c5ac..076fcadf868 100644 --- a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp +++ b/hotspot/src/share/vm/gc/shared/collectedHeap.hpp @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_INTERFACE_COLLECTEDHEAP_HPP -#define SHARE_VM_GC_INTERFACE_COLLECTEDHEAP_HPP +#ifndef SHARE_VM_GC_SHARED_COLLECTEDHEAP_HPP +#define SHARE_VM_GC_SHARED_COLLECTEDHEAP_HPP -#include "gc_interface/gcCause.hpp" -#include "gc_implementation/shared/gcWhen.hpp" +#include "gc/shared/gcCause.hpp" +#include "gc/shared/gcWhen.hpp" #include "memory/allocation.hpp" #include "runtime/handles.hpp" #include "runtime/perfData.hpp" @@ -636,4 +636,4 @@ class GCCauseSetter : StackObj { } }; -#endif // SHARE_VM_GC_INTERFACE_COLLECTEDHEAP_HPP +#endif // SHARE_VM_GC_SHARED_COLLECTEDHEAP_HPP diff --git a/hotspot/src/share/vm/gc_interface/collectedHeap.inline.hpp b/hotspot/src/share/vm/gc/shared/collectedHeap.inline.hpp similarity index 96% rename from hotspot/src/share/vm/gc_interface/collectedHeap.inline.hpp rename to hotspot/src/share/vm/gc/shared/collectedHeap.inline.hpp index 2b938a1d194..726990908cc 100644 --- a/hotspot/src/share/vm/gc_interface/collectedHeap.inline.hpp +++ b/hotspot/src/share/vm/gc/shared/collectedHeap.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,12 +22,12 @@ * */ -#ifndef SHARE_VM_GC_INTERFACE_COLLECTEDHEAP_INLINE_HPP -#define SHARE_VM_GC_INTERFACE_COLLECTEDHEAP_INLINE_HPP +#ifndef SHARE_VM_GC_SHARED_COLLECTEDHEAP_INLINE_HPP +#define SHARE_VM_GC_SHARED_COLLECTEDHEAP_INLINE_HPP -#include "gc_interface/allocTracer.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "memory/threadLocalAllocBuffer.inline.hpp" +#include "gc/shared/allocTracer.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/threadLocalAllocBuffer.inline.hpp" #include "memory/universe.hpp" #include "oops/arrayOop.hpp" #include "prims/jvmtiExport.hpp" @@ -308,4 +308,4 @@ inline void CollectedHeap::reset_promotion_should_fail() { } #endif // #ifndef PRODUCT -#endif // SHARE_VM_GC_INTERFACE_COLLECTEDHEAP_INLINE_HPP +#endif // SHARE_VM_GC_SHARED_COLLECTEDHEAP_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.cpp b/hotspot/src/share/vm/gc/shared/collectorCounters.cpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/shared/collectorCounters.cpp rename to hotspot/src/share/vm/gc/shared/collectorCounters.cpp index 76468b7d1f3..b204a02e272 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.cpp +++ b/hotspot/src/share/vm/gc/shared/collectorCounters.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/collectorCounters.hpp" +#include "gc/shared/collectorCounters.hpp" #include "memory/resourceArea.hpp" CollectorCounters::CollectorCounters(const char* name, int ordinal) { diff --git a/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.hpp b/hotspot/src/share/vm/gc/shared/collectorCounters.hpp similarity index 90% rename from hotspot/src/share/vm/gc_implementation/shared/collectorCounters.hpp rename to hotspot/src/share/vm/gc/shared/collectorCounters.hpp index 30fe32e6ea8..554d749e0cc 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.hpp +++ b/hotspot/src/share/vm/gc/shared/collectorCounters.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_COLLECTORCOUNTERS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_COLLECTORCOUNTERS_HPP +#ifndef SHARE_VM_GC_SHARED_COLLECTORCOUNTERS_HPP +#define SHARE_VM_GC_SHARED_COLLECTORCOUNTERS_HPP #include "runtime/perfData.hpp" @@ -84,4 +84,4 @@ class TraceCollectorStats: public PerfTraceTimedEvent { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_COLLECTORCOUNTERS_HPP +#endif // SHARE_VM_GC_SHARED_COLLECTORCOUNTERS_HPP diff --git a/hotspot/src/share/vm/memory/collectorPolicy.cpp b/hotspot/src/share/vm/gc/shared/collectorPolicy.cpp similarity index 99% rename from hotspot/src/share/vm/memory/collectorPolicy.cpp rename to hotspot/src/share/vm/gc/shared/collectorPolicy.cpp index 08464c513eb..5b5940250fc 100644 --- a/hotspot/src/share/vm/memory/collectorPolicy.cpp +++ b/hotspot/src/share/vm/gc/shared/collectorPolicy.cpp @@ -23,15 +23,15 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/adaptiveSizePolicy.hpp" -#include "gc_implementation/shared/gcPolicyCounters.hpp" -#include "gc_implementation/shared/vmGCOperations.hpp" -#include "memory/cardTableRS.hpp" -#include "memory/collectorPolicy.hpp" -#include "memory/gcLocker.inline.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/generationSpec.hpp" -#include "memory/space.hpp" +#include "gc/shared/adaptiveSizePolicy.hpp" +#include "gc/shared/cardTableRS.hpp" +#include "gc/shared/collectorPolicy.hpp" +#include "gc/shared/gcLocker.inline.hpp" +#include "gc/shared/gcPolicyCounters.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/generationSpec.hpp" +#include "gc/shared/space.hpp" +#include "gc/shared/vmGCOperations.hpp" #include "memory/universe.hpp" #include "runtime/arguments.hpp" #include "runtime/globals_extension.hpp" diff --git a/hotspot/src/share/vm/memory/collectorPolicy.hpp b/hotspot/src/share/vm/gc/shared/collectorPolicy.hpp similarity index 97% rename from hotspot/src/share/vm/memory/collectorPolicy.hpp rename to hotspot/src/share/vm/gc/shared/collectorPolicy.hpp index 365a0ebe734..97713e27a7e 100644 --- a/hotspot/src/share/vm/memory/collectorPolicy.hpp +++ b/hotspot/src/share/vm/gc/shared/collectorPolicy.hpp @@ -22,13 +22,13 @@ * */ -#ifndef SHARE_VM_MEMORY_COLLECTORPOLICY_HPP -#define SHARE_VM_MEMORY_COLLECTORPOLICY_HPP +#ifndef SHARE_VM_GC_SHARED_COLLECTORPOLICY_HPP +#define SHARE_VM_GC_SHARED_COLLECTORPOLICY_HPP +#include "gc/shared/barrierSet.hpp" +#include "gc/shared/genRemSet.hpp" +#include "gc/shared/generationSpec.hpp" #include "memory/allocation.hpp" -#include "memory/barrierSet.hpp" -#include "memory/generationSpec.hpp" -#include "memory/genRemSet.hpp" #include "utilities/macros.hpp" // This class (or more correctly, subtypes of this class) @@ -319,4 +319,4 @@ class MarkSweepPolicy : public GenCollectorPolicy { void initialize_gc_policy_counters(); }; -#endif // SHARE_VM_MEMORY_COLLECTORPOLICY_HPP +#endif // SHARE_VM_GC_SHARED_COLLECTORPOLICY_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/concurrentGCThread.cpp b/hotspot/src/share/vm/gc/shared/concurrentGCThread.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/shared/concurrentGCThread.cpp rename to hotspot/src/share/vm/gc/shared/concurrentGCThread.cpp index 9002cd06f26..ce4e74875ca 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/concurrentGCThread.cpp +++ b/hotspot/src/share/vm/gc/shared/concurrentGCThread.cpp @@ -24,7 +24,7 @@ #include "precompiled.hpp" #include "classfile/systemDictionary.hpp" -#include "gc_implementation/shared/concurrentGCThread.hpp" +#include "gc/shared/concurrentGCThread.hpp" #include "oops/instanceRefKlass.hpp" #include "oops/oop.inline.hpp" #include "runtime/init.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/shared/concurrentGCThread.hpp b/hotspot/src/share/vm/gc/shared/concurrentGCThread.hpp similarity index 90% rename from hotspot/src/share/vm/gc_implementation/shared/concurrentGCThread.hpp rename to hotspot/src/share/vm/gc/shared/concurrentGCThread.hpp index e87228b238c..6689a4e7559 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/concurrentGCThread.hpp +++ b/hotspot/src/share/vm/gc/shared/concurrentGCThread.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,12 +22,12 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_CONCURRENTGCTHREAD_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_CONCURRENTGCTHREAD_HPP +#ifndef SHARE_VM_GC_SHARED_CONCURRENTGCTHREAD_HPP +#define SHARE_VM_GC_SHARED_CONCURRENTGCTHREAD_HPP -#include "utilities/macros.hpp" -#include "gc_implementation/shared/suspendibleThreadSet.hpp" +#include "gc/g1/suspendibleThreadSet.hpp" #include "runtime/thread.hpp" +#include "utilities/macros.hpp" class ConcurrentGCThread: public NamedThread { friend class VMStructs; @@ -106,4 +106,4 @@ class SurrogateLockerThread: public JavaThread { }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_CONCURRENTGCTHREAD_HPP +#endif // SHARE_VM_GC_SHARED_CONCURRENTGCTHREAD_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/copyFailedInfo.hpp b/hotspot/src/share/vm/gc/shared/copyFailedInfo.hpp similarity index 91% rename from hotspot/src/share/vm/gc_implementation/shared/copyFailedInfo.hpp rename to hotspot/src/share/vm/gc/shared/copyFailedInfo.hpp index 2f30f5e8f16..7d96a03413b 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/copyFailedInfo.hpp +++ b/hotspot/src/share/vm/gc/shared/copyFailedInfo.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_COPYFAILEDINFO_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_COPYFAILEDINFO_HPP +#ifndef SHARE_VM_GC_SHARED_COPYFAILEDINFO_HPP +#define SHARE_VM_GC_SHARED_COPYFAILEDINFO_HPP #include "runtime/thread.hpp" #include "utilities/globalDefinitions.hpp" @@ -87,4 +87,4 @@ class PromotionFailedInfo : public CopyFailedInfo { class EvacuationFailedInfo : public CopyFailedInfo {}; -#endif /* SHARE_VM_GC_IMPLEMENTATION_SHARED_COPYFAILEDINFO_HPP */ +#endif /* SHARE_VM_GC_SHARED_COPYFAILEDINFO_HPP */ diff --git a/hotspot/src/share/vm/gc_interface/gcCause.cpp b/hotspot/src/share/vm/gc/shared/gcCause.cpp similarity index 96% rename from hotspot/src/share/vm/gc_interface/gcCause.cpp rename to hotspot/src/share/vm/gc/shared/gcCause.cpp index a364214bdd2..e7fd667dc0c 100644 --- a/hotspot/src/share/vm/gc_interface/gcCause.cpp +++ b/hotspot/src/share/vm/gc/shared/gcCause.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_interface/gcCause.hpp" +#include "gc/shared/gcCause.hpp" const char* GCCause::to_string(GCCause::Cause cause) { switch (cause) { diff --git a/hotspot/src/share/vm/gc_interface/gcCause.hpp b/hotspot/src/share/vm/gc/shared/gcCause.hpp similarity index 95% rename from hotspot/src/share/vm/gc_interface/gcCause.hpp rename to hotspot/src/share/vm/gc/shared/gcCause.hpp index cb304294639..88dc37fe2a2 100644 --- a/hotspot/src/share/vm/gc_interface/gcCause.hpp +++ b/hotspot/src/share/vm/gc/shared/gcCause.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_INTERFACE_GCCAUSE_HPP -#define SHARE_VM_GC_INTERFACE_GCCAUSE_HPP +#ifndef SHARE_VM_GC_SHARED_GCCAUSE_HPP +#define SHARE_VM_GC_SHARED_GCCAUSE_HPP #include "memory/allocation.hpp" @@ -125,4 +125,4 @@ class GCCauseString : StackObj { } }; -#endif // SHARE_VM_GC_INTERFACE_GCCAUSE_HPP +#endif // SHARE_VM_GC_SHARED_GCCAUSE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcHeapSummary.hpp b/hotspot/src/share/vm/gc/shared/gcHeapSummary.hpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/shared/gcHeapSummary.hpp rename to hotspot/src/share/vm/gc/shared/gcHeapSummary.hpp index 23cb113c11b..063f2f5a849 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcHeapSummary.hpp +++ b/hotspot/src/share/vm/gc/shared/gcHeapSummary.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_GCHEAPSUMMARY_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_GCHEAPSUMMARY_HPP +#ifndef SHARE_VM_GC_SHARED_GCHEAPSUMMARY_HPP +#define SHARE_VM_GC_SHARED_GCHEAPSUMMARY_HPP #include "memory/allocation.hpp" #include "memory/metaspaceChunkFreeListSummary.hpp" @@ -171,4 +171,4 @@ class MetaspaceSummary : public StackObj { }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_GCHEAPSUMMARY_HPP +#endif // SHARE_VM_GC_SHARED_GCHEAPSUMMARY_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcId.cpp b/hotspot/src/share/vm/gc/shared/gcId.cpp similarity index 91% rename from hotspot/src/share/vm/gc_implementation/shared/gcId.cpp rename to hotspot/src/share/vm/gc/shared/gcId.cpp index ced64a46204..811f3988614 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcId.cpp +++ b/hotspot/src/share/vm/gc/shared/gcId.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/gcId.hpp" +#include "gc/shared/gcId.hpp" #include "runtime/safepoint.hpp" uint GCId::_next_id = 0; diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcId.hpp b/hotspot/src/share/vm/gc/shared/gcId.hpp similarity index 86% rename from hotspot/src/share/vm/gc_implementation/shared/gcId.hpp rename to hotspot/src/share/vm/gc/shared/gcId.hpp index 1d2decc6bb5..1cc9f3829cb 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcId.hpp +++ b/hotspot/src/share/vm/gc/shared/gcId.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_GCID_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_GCID_HPP +#ifndef SHARE_VM_GC_SHARED_GCID_HPP +#define SHARE_VM_GC_SHARED_GCID_HPP #include "memory/allocation.hpp" @@ -48,4 +48,4 @@ class GCId VALUE_OBJ_CLASS_SPEC { static const GCId undefined(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_GCID_HPP +#endif // SHARE_VM_GC_SHARED_GCID_HPP diff --git a/hotspot/src/share/vm/memory/gcLocker.cpp b/hotspot/src/share/vm/gc/shared/gcLocker.cpp similarity index 98% rename from hotspot/src/share/vm/memory/gcLocker.cpp rename to hotspot/src/share/vm/gc/shared/gcLocker.cpp index 6c82777628c..7935ded6ec7 100644 --- a/hotspot/src/share/vm/memory/gcLocker.cpp +++ b/hotspot/src/share/vm/gc/shared/gcLocker.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "memory/gcLocker.inline.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/gcLocker.inline.hpp" #include "memory/resourceArea.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/thread.inline.hpp" diff --git a/hotspot/src/share/vm/memory/gcLocker.hpp b/hotspot/src/share/vm/gc/shared/gcLocker.hpp similarity index 97% rename from hotspot/src/share/vm/memory/gcLocker.hpp rename to hotspot/src/share/vm/gc/shared/gcLocker.hpp index aafc03733e1..41ad0aec738 100644 --- a/hotspot/src/share/vm/memory/gcLocker.hpp +++ b/hotspot/src/share/vm/gc/shared/gcLocker.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_MEMORY_GCLOCKER_HPP -#define SHARE_VM_MEMORY_GCLOCKER_HPP +#ifndef SHARE_VM_GC_SHARED_GCLOCKER_HPP +#define SHARE_VM_GC_SHARED_GCLOCKER_HPP -#include "gc_interface/collectedHeap.hpp" -#include "memory/genCollectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/genCollectedHeap.hpp" #include "memory/universe.hpp" #include "oops/oop.hpp" @@ -326,4 +326,4 @@ class No_Alloc_Verifier : public StackObj { #endif }; -#endif // SHARE_VM_MEMORY_GCLOCKER_HPP +#endif // SHARE_VM_GC_SHARED_GCLOCKER_HPP diff --git a/hotspot/src/share/vm/memory/gcLocker.inline.hpp b/hotspot/src/share/vm/gc/shared/gcLocker.inline.hpp similarity index 87% rename from hotspot/src/share/vm/memory/gcLocker.inline.hpp rename to hotspot/src/share/vm/gc/shared/gcLocker.inline.hpp index e77d5436b1b..6e677ed529c 100644 --- a/hotspot/src/share/vm/memory/gcLocker.inline.hpp +++ b/hotspot/src/share/vm/gc/shared/gcLocker.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_MEMORY_GCLOCKER_INLINE_HPP -#define SHARE_VM_MEMORY_GCLOCKER_INLINE_HPP +#ifndef SHARE_VM_GC_SHARED_GCLOCKER_INLINE_HPP +#define SHARE_VM_GC_SHARED_GCLOCKER_INLINE_HPP -#include "memory/gcLocker.hpp" +#include "gc/shared/gcLocker.hpp" inline void GC_locker::lock_critical(JavaThread* thread) { if (!thread->in_critical()) { @@ -53,4 +53,4 @@ inline void GC_locker::unlock_critical(JavaThread* thread) { thread->exit_critical(); } -#endif // SHARE_VM_MEMORY_GCLOCKER_INLINE_HPP +#endif // SHARE_VM_GC_SHARED_GCLOCKER_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_interface/gcName.hpp b/hotspot/src/share/vm/gc/shared/gcName.hpp similarity index 90% rename from hotspot/src/share/vm/gc_interface/gcName.hpp rename to hotspot/src/share/vm/gc/shared/gcName.hpp index c48c2483805..ffdd1b2f364 100644 --- a/hotspot/src/share/vm/gc_interface/gcName.hpp +++ b/hotspot/src/share/vm/gc/shared/gcName.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_INTERFACE_GCNAME_HPP -#define SHARE_VM_GC_INTERFACE_GCNAME_HPP +#ifndef SHARE_VM_GC_SHARED_GCNAME_HPP +#define SHARE_VM_GC_SHARED_GCNAME_HPP #include "utilities/debug.hpp" @@ -58,4 +58,4 @@ class GCNameHelper { } }; -#endif // SHARE_VM_GC_INTERFACE_GCNAME_HPP +#endif // SHARE_VM_GC_SHARED_GCNAME_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcPolicyCounters.cpp b/hotspot/src/share/vm/gc/shared/gcPolicyCounters.cpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/shared/gcPolicyCounters.cpp rename to hotspot/src/share/vm/gc/shared/gcPolicyCounters.cpp index 23a710b97a6..787a786fa5c 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcPolicyCounters.cpp +++ b/hotspot/src/share/vm/gc/shared/gcPolicyCounters.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/gcPolicyCounters.hpp" +#include "gc/shared/gcPolicyCounters.hpp" #include "memory/resourceArea.hpp" GCPolicyCounters::GCPolicyCounters(const char* name, int collectors, diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcPolicyCounters.hpp b/hotspot/src/share/vm/gc/shared/gcPolicyCounters.hpp similarity index 89% rename from hotspot/src/share/vm/gc_implementation/shared/gcPolicyCounters.hpp rename to hotspot/src/share/vm/gc/shared/gcPolicyCounters.hpp index 022a5f0bb0e..5345dca4abe 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcPolicyCounters.hpp +++ b/hotspot/src/share/vm/gc/shared/gcPolicyCounters.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_GCPOLICYCOUNTERS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_GCPOLICYCOUNTERS_HPP +#ifndef SHARE_VM_GC_SHARED_GCPOLICYCOUNTERS_HPP +#define SHARE_VM_GC_SHARED_GCPOLICYCOUNTERS_HPP #include "runtime/perfData.hpp" @@ -75,4 +75,4 @@ class GCPolicyCounters: public CHeapObj { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_GCPOLICYCOUNTERS_HPP +#endif // SHARE_VM_GC_SHARED_GCPOLICYCOUNTERS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcStats.cpp b/hotspot/src/share/vm/gc/shared/gcStats.cpp similarity index 90% rename from hotspot/src/share/vm/gc_implementation/shared/gcStats.cpp rename to hotspot/src/share/vm/gc/shared/gcStats.cpp index 745f8f3ab65..3a050f73066 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcStats.cpp +++ b/hotspot/src/share/vm/gc/shared/gcStats.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/gcStats.hpp" -#include "gc_implementation/shared/gcUtil.hpp" +#include "gc/shared/gcStats.hpp" +#include "gc/shared/gcUtil.hpp" #include "memory/allocation.inline.hpp" GCStats::GCStats() { diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcStats.hpp b/hotspot/src/share/vm/gc/shared/gcStats.hpp similarity index 86% rename from hotspot/src/share/vm/gc_implementation/shared/gcStats.hpp rename to hotspot/src/share/vm/gc/shared/gcStats.hpp index 4182e275188..e9bd5a06875 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcStats.hpp +++ b/hotspot/src/share/vm/gc/shared/gcStats.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_GCSTATS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_GCSTATS_HPP +#ifndef SHARE_VM_GC_SHARED_GCSTATS_HPP +#define SHARE_VM_GC_SHARED_GCSTATS_HPP -#include "gc_implementation/shared/gcUtil.hpp" +#include "gc/shared/gcUtil.hpp" class GCStats : public CHeapObj { protected: @@ -67,4 +67,4 @@ class CMSGCStats : public GCStats { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_GCSTATS_HPP +#endif // SHARE_VM_GC_SHARED_GCSTATS_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcTimer.cpp b/hotspot/src/share/vm/gc/shared/gcTimer.cpp similarity index 99% rename from hotspot/src/share/vm/gc_implementation/shared/gcTimer.cpp rename to hotspot/src/share/vm/gc/shared/gcTimer.cpp index 246be3ecc6f..b2ad94bc1ab 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcTimer.cpp +++ b/hotspot/src/share/vm/gc/shared/gcTimer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/gcTimer.hpp" +#include "gc/shared/gcTimer.hpp" #include "utilities/growableArray.hpp" #include "utilities/ticks.inline.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcTimer.hpp b/hotspot/src/share/vm/gc/shared/gcTimer.hpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/shared/gcTimer.hpp rename to hotspot/src/share/vm/gc/shared/gcTimer.hpp index 3826515a92b..a4bd2dd775c 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcTimer.hpp +++ b/hotspot/src/share/vm/gc/shared/gcTimer.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_GCTIMER_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_GCTIMER_HPP +#ifndef SHARE_VM_GC_SHARED_GCTIMER_HPP +#define SHARE_VM_GC_SHARED_GCTIMER_HPP #include "memory/allocation.hpp" #include "prims/jni_md.h" @@ -190,4 +190,4 @@ class GCTimerAllTest { #endif -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_GCTIMER_HPP +#endif // SHARE_VM_GC_SHARED_GCTIMER_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcTrace.cpp b/hotspot/src/share/vm/gc/shared/gcTrace.cpp similarity index 95% rename from hotspot/src/share/vm/gc_implementation/shared/gcTrace.cpp rename to hotspot/src/share/vm/gc/shared/gcTrace.cpp index b98f8919ab0..5d24660d0cf 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcTrace.cpp +++ b/hotspot/src/share/vm/gc/shared/gcTrace.cpp @@ -23,21 +23,21 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/copyFailedInfo.hpp" -#include "gc_implementation/shared/gcHeapSummary.hpp" -#include "gc_implementation/shared/gcId.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/objectCountEventSender.hpp" +#include "gc/shared/copyFailedInfo.hpp" +#include "gc/shared/gcHeapSummary.hpp" +#include "gc/shared/gcId.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/objectCountEventSender.hpp" +#include "gc/shared/referenceProcessorStats.hpp" #include "memory/heapInspection.hpp" -#include "memory/referenceProcessorStats.hpp" #include "memory/resourceArea.hpp" #include "runtime/os.hpp" #include "utilities/globalDefinitions.hpp" #include "utilities/macros.hpp" #include "utilities/ticks.inline.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/evacuationInfo.hpp" +#include "gc/g1/evacuationInfo.hpp" #endif #define assert_unset_gc_id() assert(_shared_gc_info.gc_id().is_undefined(), "GC already started?") diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcTrace.hpp b/hotspot/src/share/vm/gc/shared/gcTrace.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/shared/gcTrace.hpp rename to hotspot/src/share/vm/gc/shared/gcTrace.hpp index 9a16b693262..e21e1c43dbf 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcTrace.hpp +++ b/hotspot/src/share/vm/gc/shared/gcTrace.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,21 +22,21 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_GCTRACE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_GCTRACE_HPP +#ifndef SHARE_VM_GC_SHARED_GCTRACE_HPP +#define SHARE_VM_GC_SHARED_GCTRACE_HPP -#include "gc_interface/gcCause.hpp" -#include "gc_interface/gcName.hpp" -#include "gc_implementation/shared/gcId.hpp" -#include "gc_implementation/shared/gcWhen.hpp" -#include "gc_implementation/shared/copyFailedInfo.hpp" +#include "gc/shared/copyFailedInfo.hpp" +#include "gc/shared/gcCause.hpp" +#include "gc/shared/gcId.hpp" +#include "gc/shared/gcName.hpp" +#include "gc/shared/gcWhen.hpp" #include "memory/allocation.hpp" #include "memory/metaspace.hpp" #include "memory/referenceType.hpp" #include "utilities/macros.hpp" #include "utilities/ticks.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1YCTypes.hpp" +#include "gc/g1/g1YCTypes.hpp" #endif class EvacuationInfo; @@ -266,4 +266,4 @@ class G1OldTracer : public OldGCTracer { G1OldTracer() : OldGCTracer(G1Old) {} }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_GCTRACE_HPP +#endif // SHARE_VM_GC_SHARED_GCTRACE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp b/hotspot/src/share/vm/gc/shared/gcTraceSend.cpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp rename to hotspot/src/share/vm/gc/shared/gcTraceSend.cpp index 326625bf1a8..e2f04cba4b7 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp +++ b/hotspot/src/share/vm/gc/shared/gcTraceSend.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,18 +23,18 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/gcHeapSummary.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/gcWhen.hpp" -#include "gc_implementation/shared/copyFailedInfo.hpp" +#include "gc/shared/copyFailedInfo.hpp" +#include "gc/shared/gcHeapSummary.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/gcWhen.hpp" #include "runtime/os.hpp" -#include "trace/tracing.hpp" #include "trace/traceBackend.hpp" +#include "trace/tracing.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/evacuationInfo.hpp" -#include "gc_implementation/g1/g1YCTypes.hpp" +#include "gc/g1/evacuationInfo.hpp" +#include "gc/g1/g1YCTypes.hpp" #endif // All GC dependencies against the trace framework is contained within this file. diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.cpp b/hotspot/src/share/vm/gc/shared/gcTraceTime.cpp similarity index 92% rename from hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.cpp rename to hotspot/src/share/vm/gc/shared/gcTraceTime.cpp index fff7eea8ca9..db8755d12aa 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.cpp +++ b/hotspot/src/share/vm/gc/shared/gcTraceTime.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,9 +23,9 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/gcTraceTime.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/gcTraceTime.hpp" #include "runtime/globals.hpp" #include "runtime/os.hpp" #include "runtime/safepoint.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.hpp b/hotspot/src/share/vm/gc/shared/gcTraceTime.hpp similarity index 81% rename from hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.hpp rename to hotspot/src/share/vm/gc/shared/gcTraceTime.hpp index 30e494baa52..85825a196d9 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.hpp +++ b/hotspot/src/share/vm/gc/shared/gcTraceTime.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_GCTRACETIME_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_GCTRACETIME_HPP +#ifndef SHARE_VM_GC_SHARED_GCTRACETIME_HPP +#define SHARE_VM_GC_SHARED_GCTRACETIME_HPP -#include "gc_implementation/shared/gcTrace.hpp" +#include "gc/shared/gcTrace.hpp" #include "prims/jni_md.h" #include "utilities/ticks.hpp" @@ -43,4 +43,4 @@ class GCTraceTime { ~GCTraceTime(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_GCTRACETIME_HPP +#endif // SHARE_VM_GC_SHARED_GCTRACETIME_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcUtil.cpp b/hotspot/src/share/vm/gc/shared/gcUtil.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/shared/gcUtil.cpp rename to hotspot/src/share/vm/gc/shared/gcUtil.cpp index fc1662e8b65..8dfdde542e7 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcUtil.cpp +++ b/hotspot/src/share/vm/gc/shared/gcUtil.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/gcUtil.hpp" +#include "gc/shared/gcUtil.hpp" // Catch-all file for utility classes diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp b/hotspot/src/share/vm/gc/shared/gcUtil.hpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp rename to hotspot/src/share/vm/gc/shared/gcUtil.hpp index 07cdff63d2f..6b2f929bb5d 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp +++ b/hotspot/src/share/vm/gc/shared/gcUtil.hpp @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_GCUTIL_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_GCUTIL_HPP +#ifndef SHARE_VM_GC_SHARED_GCUTIL_HPP +#define SHARE_VM_GC_SHARED_GCUTIL_HPP #include "memory/allocation.hpp" #include "runtime/timer.hpp" @@ -216,4 +216,4 @@ class LinearLeastSquareFit : public CHeapObj { bool increment_will_decrease(); }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_GCUTIL_HPP +#endif // SHARE_VM_GC_SHARED_GCUTIL_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcWhen.hpp b/hotspot/src/share/vm/gc/shared/gcWhen.hpp similarity index 85% rename from hotspot/src/share/vm/gc_implementation/shared/gcWhen.hpp rename to hotspot/src/share/vm/gc/shared/gcWhen.hpp index 5713ba4e8ae..84fbcac8da1 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcWhen.hpp +++ b/hotspot/src/share/vm/gc/shared/gcWhen.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_GCWHEN_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_GCWHEN_HPP +#ifndef SHARE_VM_GC_SHARED_GCWHEN_HPP +#define SHARE_VM_GC_SHARED_GCWHEN_HPP #include "memory/allocation.hpp" #include "utilities/debug.hpp" @@ -45,4 +45,4 @@ class GCWhen : AllStatic { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_GCWHEN_HPP +#endif // SHARE_VM_GC_SHARED_GCWHEN_HPP diff --git a/hotspot/src/share/vm/memory/genCollectedHeap.cpp b/hotspot/src/share/vm/gc/shared/genCollectedHeap.cpp similarity index 98% rename from hotspot/src/share/vm/memory/genCollectedHeap.cpp rename to hotspot/src/share/vm/gc/shared/genCollectedHeap.cpp index edec39a5d0a..28a276d335b 100644 --- a/hotspot/src/share/vm/memory/genCollectedHeap.cpp +++ b/hotspot/src/share/vm/gc/shared/genCollectedHeap.cpp @@ -28,19 +28,20 @@ #include "classfile/vmSymbols.hpp" #include "code/codeCache.hpp" #include "code/icBuffer.hpp" -#include "gc_implementation/shared/collectorCounters.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/gcTraceTime.hpp" -#include "gc_implementation/shared/vmGCOperations.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/collectorCounters.hpp" +#include "gc/shared/gcLocker.inline.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/gcTraceTime.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/genOopClosures.inline.hpp" +#include "gc/shared/generationSpec.hpp" +#include "gc/shared/space.hpp" +#include "gc/shared/strongRootsScope.hpp" +#include "gc/shared/vmGCOperations.hpp" +#include "gc/shared/workgroup.hpp" #include "memory/filemap.hpp" -#include "memory/gcLocker.inline.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/genOopClosures.inline.hpp" -#include "memory/generationSpec.hpp" #include "memory/resourceArea.hpp" -#include "memory/strongRootsScope.hpp" -#include "memory/space.hpp" #include "oops/oop.inline.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/fprofiler.hpp" @@ -53,10 +54,9 @@ #include "utilities/macros.hpp" #include "utilities/stack.inline.hpp" #include "utilities/vmError.hpp" -#include "utilities/workgroup.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp" -#include "gc_implementation/concurrentMarkSweep/vmCMSOperations.hpp" +#include "gc/cms/concurrentMarkSweepThread.hpp" +#include "gc/cms/vmCMSOperations.hpp" #endif // INCLUDE_ALL_GCS NOT_PRODUCT(size_t GenCollectedHeap::_skip_header_HeapWords = 0;) diff --git a/hotspot/src/share/vm/memory/genCollectedHeap.hpp b/hotspot/src/share/vm/gc/shared/genCollectedHeap.hpp similarity index 98% rename from hotspot/src/share/vm/memory/genCollectedHeap.hpp rename to hotspot/src/share/vm/gc/shared/genCollectedHeap.hpp index 80ba8c18827..2caa66f5615 100644 --- a/hotspot/src/share/vm/memory/genCollectedHeap.hpp +++ b/hotspot/src/share/vm/gc/shared/genCollectedHeap.hpp @@ -22,13 +22,13 @@ * */ -#ifndef SHARE_VM_MEMORY_GENCOLLECTEDHEAP_HPP -#define SHARE_VM_MEMORY_GENCOLLECTEDHEAP_HPP +#ifndef SHARE_VM_GC_SHARED_GENCOLLECTEDHEAP_HPP +#define SHARE_VM_GC_SHARED_GENCOLLECTEDHEAP_HPP -#include "gc_implementation/shared/adaptiveSizePolicy.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "memory/collectorPolicy.hpp" -#include "memory/generation.hpp" +#include "gc/shared/adaptiveSizePolicy.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/collectorPolicy.hpp" +#include "gc/shared/generation.hpp" class SubTasksDone; class FlexibleWorkGang; @@ -515,4 +515,4 @@ protected: void gc_epilogue(bool full); }; -#endif // SHARE_VM_MEMORY_GENCOLLECTEDHEAP_HPP +#endif // SHARE_VM_GC_SHARED_GENCOLLECTEDHEAP_HPP diff --git a/hotspot/src/share/vm/memory/genOopClosures.cpp b/hotspot/src/share/vm/gc/shared/genOopClosures.cpp similarity index 92% rename from hotspot/src/share/vm/memory/genOopClosures.cpp rename to hotspot/src/share/vm/gc/shared/genOopClosures.cpp index d076f5ef90f..828a0f93efd 100644 --- a/hotspot/src/share/vm/memory/genOopClosures.cpp +++ b/hotspot/src/share/vm/gc/shared/genOopClosures.cpp @@ -22,9 +22,9 @@ */ #include "precompiled.hpp" -#include "memory/genOopClosures.inline.hpp" +#include "gc/shared/genOopClosures.inline.hpp" +#include "gc/shared/specialized_oop_closures.hpp" #include "memory/iterator.inline.hpp" -#include "memory/specialized_oop_closures.hpp" // Generate Serial GC specialized oop_oop_iterate functions. SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_S(ALL_KLASS_OOP_OOP_ITERATE_DEFN) diff --git a/hotspot/src/share/vm/memory/genOopClosures.hpp b/hotspot/src/share/vm/gc/shared/genOopClosures.hpp similarity index 97% rename from hotspot/src/share/vm/memory/genOopClosures.hpp rename to hotspot/src/share/vm/gc/shared/genOopClosures.hpp index e0d89b767dc..6f49767d89b 100644 --- a/hotspot/src/share/vm/memory/genOopClosures.hpp +++ b/hotspot/src/share/vm/gc/shared/genOopClosures.hpp @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_MEMORY_GENOOPCLOSURES_HPP -#define SHARE_VM_MEMORY_GENOOPCLOSURES_HPP +#ifndef SHARE_VM_GC_SHARED_GENOOPCLOSURES_HPP +#define SHARE_VM_GC_SHARED_GENOOPCLOSURES_HPP #include "memory/iterator.hpp" #include "oops/oop.hpp" @@ -189,4 +189,4 @@ class ScanWeakRefClosure: public OopClosure { inline void do_oop_nv(narrowOop* p); }; -#endif // SHARE_VM_MEMORY_GENOOPCLOSURES_HPP +#endif // SHARE_VM_GC_SHARED_GENOOPCLOSURES_HPP diff --git a/hotspot/src/share/vm/memory/genOopClosures.inline.hpp b/hotspot/src/share/vm/gc/shared/genOopClosures.inline.hpp similarity index 91% rename from hotspot/src/share/vm/memory/genOopClosures.inline.hpp rename to hotspot/src/share/vm/gc/shared/genOopClosures.inline.hpp index 6842d88cb7f..e33c94493a1 100644 --- a/hotspot/src/share/vm/memory/genOopClosures.inline.hpp +++ b/hotspot/src/share/vm/gc/shared/genOopClosures.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,16 +22,16 @@ * */ -#ifndef SHARE_VM_MEMORY_GENOOPCLOSURES_INLINE_HPP -#define SHARE_VM_MEMORY_GENOOPCLOSURES_INLINE_HPP +#ifndef SHARE_VM_GC_SHARED_GENOOPCLOSURES_INLINE_HPP +#define SHARE_VM_GC_SHARED_GENOOPCLOSURES_INLINE_HPP -#include "memory/cardTableRS.hpp" -#include "memory/defNewGeneration.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/genOopClosures.hpp" -#include "memory/genRemSet.hpp" -#include "memory/generation.hpp" -#include "memory/space.hpp" +#include "gc/serial/defNewGeneration.hpp" +#include "gc/shared/cardTableRS.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/genOopClosures.hpp" +#include "gc/shared/genRemSet.hpp" +#include "gc/shared/generation.hpp" +#include "gc/shared/space.hpp" inline OopsInGenClosure::OopsInGenClosure(Generation* gen) : ExtendedOopClosure(gen->ref_processor()), _orig_gen(gen), _rs(NULL) { @@ -143,4 +143,4 @@ template inline void ScanWeakRefClosure::do_oop_work(T* p) { inline void ScanWeakRefClosure::do_oop_nv(oop* p) { ScanWeakRefClosure::do_oop_work(p); } inline void ScanWeakRefClosure::do_oop_nv(narrowOop* p) { ScanWeakRefClosure::do_oop_work(p); } -#endif // SHARE_VM_MEMORY_GENOOPCLOSURES_INLINE_HPP +#endif // SHARE_VM_GC_SHARED_GENOOPCLOSURES_INLINE_HPP diff --git a/hotspot/src/share/vm/memory/genRemSet.cpp b/hotspot/src/share/vm/gc/shared/genRemSet.cpp similarity index 94% rename from hotspot/src/share/vm/memory/genRemSet.cpp rename to hotspot/src/share/vm/gc/shared/genRemSet.cpp index 62189200507..950072f2efd 100644 --- a/hotspot/src/share/vm/memory/genRemSet.cpp +++ b/hotspot/src/share/vm/gc/shared/genRemSet.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,8 +24,8 @@ #include "precompiled.hpp" #include "classfile/classLoaderData.hpp" -#include "memory/cardTableRS.hpp" -#include "memory/genRemSet.hpp" +#include "gc/shared/cardTableRS.hpp" +#include "gc/shared/genRemSet.hpp" #include "oops/klass.hpp" // This kind of "BarrierSet" allows a "CollectedHeap" to detect and diff --git a/hotspot/src/share/vm/memory/genRemSet.hpp b/hotspot/src/share/vm/gc/shared/genRemSet.hpp similarity index 96% rename from hotspot/src/share/vm/memory/genRemSet.hpp rename to hotspot/src/share/vm/gc/shared/genRemSet.hpp index 64a63230b80..9a5db641cb4 100644 --- a/hotspot/src/share/vm/memory/genRemSet.hpp +++ b/hotspot/src/share/vm/gc/shared/genRemSet.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_MEMORY_GENREMSET_HPP -#define SHARE_VM_MEMORY_GENREMSET_HPP +#ifndef SHARE_VM_GC_SHARED_GENREMSET_HPP +#define SHARE_VM_GC_SHARED_GENREMSET_HPP #include "oops/oop.hpp" @@ -131,4 +131,4 @@ public: virtual void invalidate_or_clear(Generation* old_gen) = 0; }; -#endif // SHARE_VM_MEMORY_GENREMSET_HPP +#endif // SHARE_VM_GC_SHARED_GENREMSET_HPP diff --git a/hotspot/src/share/vm/memory/generation.cpp b/hotspot/src/share/vm/gc/shared/generation.cpp similarity index 95% rename from hotspot/src/share/vm/memory/generation.cpp rename to hotspot/src/share/vm/gc/shared/generation.cpp index 2518f2c53a6..5210a44517f 100644 --- a/hotspot/src/share/vm/memory/generation.cpp +++ b/hotspot/src/share/vm/gc/shared/generation.cpp @@ -23,20 +23,20 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTrace.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/serial/genMarkSweep.hpp" +#include "gc/shared/blockOffsetTable.inline.hpp" +#include "gc/shared/cardTableRS.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/gcLocker.inline.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/genOopClosures.hpp" +#include "gc/shared/genOopClosures.inline.hpp" +#include "gc/shared/generation.hpp" +#include "gc/shared/space.inline.hpp" +#include "gc/shared/spaceDecorator.hpp" #include "memory/allocation.inline.hpp" -#include "memory/blockOffsetTable.inline.hpp" -#include "memory/cardTableRS.hpp" -#include "memory/gcLocker.inline.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/genMarkSweep.hpp" -#include "memory/genOopClosures.hpp" -#include "memory/genOopClosures.inline.hpp" -#include "memory/generation.hpp" -#include "memory/space.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" #include "utilities/copy.hpp" diff --git a/hotspot/src/share/vm/memory/generation.hpp b/hotspot/src/share/vm/gc/shared/generation.hpp similarity index 98% rename from hotspot/src/share/vm/memory/generation.hpp rename to hotspot/src/share/vm/gc/shared/generation.hpp index 00a7efaca23..6d4f840681c 100644 --- a/hotspot/src/share/vm/memory/generation.hpp +++ b/hotspot/src/share/vm/gc/shared/generation.hpp @@ -22,16 +22,16 @@ * */ -#ifndef SHARE_VM_MEMORY_GENERATION_HPP -#define SHARE_VM_MEMORY_GENERATION_HPP +#ifndef SHARE_VM_GC_SHARED_GENERATION_HPP +#define SHARE_VM_GC_SHARED_GENERATION_HPP -#include "gc_implementation/shared/collectorCounters.hpp" +#include "gc/shared/collectorCounters.hpp" +#include "gc/shared/referenceProcessor.hpp" +#include "gc/shared/watermark.hpp" #include "memory/allocation.hpp" #include "memory/memRegion.hpp" -#include "memory/referenceProcessor.hpp" #include "memory/universe.hpp" #include "memory/virtualspace.hpp" -#include "memory/watermark.hpp" #include "runtime/mutex.hpp" #include "runtime/perfData.hpp" @@ -584,4 +584,4 @@ public: virtual CollectorCounters* counters() { return _gc_counters; } }; -#endif // SHARE_VM_MEMORY_GENERATION_HPP +#endif // SHARE_VM_GC_SHARED_GENERATION_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/generationCounters.cpp b/hotspot/src/share/vm/gc/shared/generationCounters.cpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/shared/generationCounters.cpp rename to hotspot/src/share/vm/gc/shared/generationCounters.cpp index 333678b225b..134d28765e0 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/generationCounters.cpp +++ b/hotspot/src/share/vm/gc/shared/generationCounters.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/generationCounters.hpp" +#include "gc/shared/generationCounters.hpp" #include "memory/resourceArea.hpp" void GenerationCounters::initialize(const char* name, int ordinal, int spaces, diff --git a/hotspot/src/share/vm/gc_implementation/shared/generationCounters.hpp b/hotspot/src/share/vm/gc/shared/generationCounters.hpp similarity index 93% rename from hotspot/src/share/vm/gc_implementation/shared/generationCounters.hpp rename to hotspot/src/share/vm/gc/shared/generationCounters.hpp index 6e92cd50638..2b53549d575 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/generationCounters.hpp +++ b/hotspot/src/share/vm/gc/shared/generationCounters.hpp @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_GENERATIONCOUNTERS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_GENERATIONCOUNTERS_HPP +#ifndef SHARE_VM_GC_SHARED_GENERATIONCOUNTERS_HPP +#define SHARE_VM_GC_SHARED_GENERATIONCOUNTERS_HPP #include "memory/virtualspace.hpp" #include "runtime/perfData.hpp" @@ -77,4 +77,4 @@ private: const char* name_space() const { return _name_space; } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_GENERATIONCOUNTERS_HPP +#endif // SHARE_VM_GC_SHARED_GENERATIONCOUNTERS_HPP diff --git a/hotspot/src/share/vm/memory/generationSpec.cpp b/hotspot/src/share/vm/gc/shared/generationSpec.cpp similarity index 87% rename from hotspot/src/share/vm/memory/generationSpec.cpp rename to hotspot/src/share/vm/gc/shared/generationSpec.cpp index bed0d5484ab..0593ccce7eb 100644 --- a/hotspot/src/share/vm/memory/generationSpec.cpp +++ b/hotspot/src/share/vm/gc/shared/generationSpec.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,17 +23,17 @@ */ #include "precompiled.hpp" +#include "gc/serial/defNewGeneration.hpp" +#include "gc/serial/tenuredGeneration.hpp" +#include "gc/shared/genRemSet.hpp" +#include "gc/shared/generationSpec.hpp" #include "memory/binaryTreeDictionary.hpp" -#include "memory/defNewGeneration.hpp" #include "memory/filemap.hpp" -#include "memory/genRemSet.hpp" -#include "memory/generationSpec.hpp" -#include "memory/tenuredGeneration.hpp" #include "runtime/java.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp" -#include "gc_implementation/parNew/parNewGeneration.hpp" +#include "gc/cms/concurrentMarkSweepGeneration.hpp" +#include "gc/cms/parNewGeneration.hpp" #endif // INCLUDE_ALL_GCS Generation* GenerationSpec::init(ReservedSpace rs, int level, diff --git a/hotspot/src/share/vm/memory/generationSpec.hpp b/hotspot/src/share/vm/gc/shared/generationSpec.hpp similarity index 92% rename from hotspot/src/share/vm/memory/generationSpec.hpp rename to hotspot/src/share/vm/gc/shared/generationSpec.hpp index 5c0e57ed14b..5b8126e6990 100644 --- a/hotspot/src/share/vm/memory/generationSpec.hpp +++ b/hotspot/src/share/vm/gc/shared/generationSpec.hpp @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_MEMORY_GENERATIONSPEC_HPP -#define SHARE_VM_MEMORY_GENERATIONSPEC_HPP +#ifndef SHARE_VM_GC_SHARED_GENERATIONSPEC_HPP +#define SHARE_VM_GC_SHARED_GENERATIONSPEC_HPP -#include "memory/generation.hpp" +#include "gc/shared/generation.hpp" // The specification of a generation. This class also encapsulates // some generation-specific behavior. This is done here rather than as a @@ -57,4 +57,4 @@ public: typedef GenerationSpec* GenerationSpecPtr; -#endif // SHARE_VM_MEMORY_GENERATIONSPEC_HPP +#endif // SHARE_VM_GC_SHARED_GENERATIONSPEC_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/isGCActiveMark.hpp b/hotspot/src/share/vm/gc/shared/isGCActiveMark.hpp similarity index 83% rename from hotspot/src/share/vm/gc_implementation/shared/isGCActiveMark.hpp rename to hotspot/src/share/vm/gc/shared/isGCActiveMark.hpp index dc1041b28dd..b3eee7107f6 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/isGCActiveMark.hpp +++ b/hotspot/src/share/vm/gc/shared/isGCActiveMark.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,12 +22,12 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_ISGCACTIVEMARK_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_ISGCACTIVEMARK_HPP +#ifndef SHARE_VM_GC_SHARED_ISGCACTIVEMARK_HPP +#define SHARE_VM_GC_SHARED_ISGCACTIVEMARK_HPP #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" #endif // INCLUDE_ALL_GCS // This class provides a method for block structured setting of the @@ -48,4 +48,4 @@ class IsGCActiveMark : public StackObj { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_ISGCACTIVEMARK_HPP +#endif // SHARE_VM_GC_SHARED_ISGCACTIVEMARK_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/liveRange.hpp b/hotspot/src/share/vm/gc/shared/liveRange.hpp similarity index 91% rename from hotspot/src/share/vm/gc_implementation/shared/liveRange.hpp rename to hotspot/src/share/vm/gc/shared/liveRange.hpp index 7894183ac28..51c7ccc19cc 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/liveRange.hpp +++ b/hotspot/src/share/vm/gc/shared/liveRange.hpp @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_LIVERANGE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_LIVERANGE_HPP +#ifndef SHARE_VM_GC_SHARED_LIVERANGE_HPP +#define SHARE_VM_GC_SHARED_LIVERANGE_HPP #include "memory/memRegion.hpp" #include "utilities/copy.hpp" @@ -52,4 +52,4 @@ public: } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_LIVERANGE_HPP +#endif // SHARE_VM_GC_SHARED_LIVERANGE_HPP diff --git a/hotspot/src/share/vm/memory/modRefBarrierSet.hpp b/hotspot/src/share/vm/gc/shared/modRefBarrierSet.hpp similarity index 95% rename from hotspot/src/share/vm/memory/modRefBarrierSet.hpp rename to hotspot/src/share/vm/gc/shared/modRefBarrierSet.hpp index ac7db902f83..faacbc4a07f 100644 --- a/hotspot/src/share/vm/memory/modRefBarrierSet.hpp +++ b/hotspot/src/share/vm/gc/shared/modRefBarrierSet.hpp @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_MEMORY_MODREFBARRIERSET_HPP -#define SHARE_VM_MEMORY_MODREFBARRIERSET_HPP +#ifndef SHARE_VM_GC_SHARED_MODREFBARRIERSET_HPP +#define SHARE_VM_GC_SHARED_MODREFBARRIERSET_HPP -#include "memory/barrierSet.hpp" +#include "gc/shared/barrierSet.hpp" // This kind of "BarrierSet" allows a "CollectedHeap" to detect and // enumerate ref fields that have been modified (since the last @@ -102,4 +102,4 @@ struct BarrierSet::GetName { static const BarrierSet::Name value = BarrierSet::ModRef; }; -#endif // SHARE_VM_MEMORY_MODREFBARRIERSET_HPP +#endif // SHARE_VM_GC_SHARED_MODREFBARRIERSET_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/objectCountEventSender.cpp b/hotspot/src/share/vm/gc/shared/objectCountEventSender.cpp similarity index 91% rename from hotspot/src/share/vm/gc_implementation/shared/objectCountEventSender.cpp rename to hotspot/src/share/vm/gc/shared/objectCountEventSender.cpp index 8b9d6a141f5..8b809ae1545 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/objectCountEventSender.cpp +++ b/hotspot/src/share/vm/gc/shared/objectCountEventSender.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,8 +24,8 @@ #include "precompiled.hpp" -#include "gc_implementation/shared/gcId.hpp" -#include "gc_implementation/shared/objectCountEventSender.hpp" +#include "gc/shared/gcId.hpp" +#include "gc/shared/objectCountEventSender.hpp" #include "memory/heapInspection.hpp" #include "trace/tracing.hpp" #include "utilities/globalDefinitions.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/shared/objectCountEventSender.hpp b/hotspot/src/share/vm/gc/shared/objectCountEventSender.hpp similarity index 84% rename from hotspot/src/share/vm/gc_implementation/shared/objectCountEventSender.hpp rename to hotspot/src/share/vm/gc/shared/objectCountEventSender.hpp index c814f5e6cd2..201d5ddfc0e 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/objectCountEventSender.hpp +++ b/hotspot/src/share/vm/gc/shared/objectCountEventSender.hpp @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_OBJECTCOUNTEVENTSENDER_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_OBJECTCOUNTEVENTSENDER_HPP +#ifndef SHARE_VM_GC_SHARED_OBJECTCOUNTEVENTSENDER_HPP +#define SHARE_VM_GC_SHARED_OBJECTCOUNTEVENTSENDER_HPP -#include "gc_implementation/shared/gcTrace.hpp" +#include "gc/shared/gcTrace.hpp" #include "memory/allocation.hpp" #include "utilities/macros.hpp" @@ -42,4 +42,4 @@ class ObjectCountEventSender : public AllStatic { #endif // INCLUDE_SERVICES -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_OBJECTCOUNTEVENTSENDER_HPP +#endif // SHARE_VM_GC_SHARED_OBJECTCOUNTEVENTSENDER_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/plab.cpp b/hotspot/src/share/vm/gc/shared/plab.cpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/shared/plab.cpp rename to hotspot/src/share/vm/gc/shared/plab.cpp index 93eb5e94f14..135f6792e01 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/plab.cpp +++ b/hotspot/src/share/vm/gc/shared/plab.cpp @@ -23,9 +23,9 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/plab.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "memory/threadLocalAllocBuffer.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/plab.hpp" +#include "gc/shared/threadLocalAllocBuffer.hpp" #include "oops/arrayOop.hpp" #include "oops/oop.inline.hpp" diff --git a/hotspot/src/share/vm/gc_implementation/shared/plab.hpp b/hotspot/src/share/vm/gc/shared/plab.hpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/shared/plab.hpp rename to hotspot/src/share/vm/gc/shared/plab.hpp index 3660f16e610..6533ff7e7f4 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/plab.hpp +++ b/hotspot/src/share/vm/gc/shared/plab.hpp @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_PLAB_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_PLAB_HPP +#ifndef SHARE_VM_GC_SHARED_PLAB_HPP +#define SHARE_VM_GC_SHARED_PLAB_HPP -#include "gc_implementation/shared/gcUtil.hpp" +#include "gc/shared/gcUtil.hpp" #include "memory/allocation.hpp" #include "runtime/atomic.hpp" #include "utilities/globalDefinitions.hpp" @@ -207,4 +207,4 @@ class PLABStats VALUE_OBJ_CLASS_SPEC { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_PLAB_HPP +#endif // SHARE_VM_GC_SHARED_PLAB_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/plab.inline.hpp b/hotspot/src/share/vm/gc/shared/plab.inline.hpp similarity index 84% rename from hotspot/src/share/vm/gc_implementation/shared/plab.inline.hpp rename to hotspot/src/share/vm/gc/shared/plab.inline.hpp index 5c9fe845b1c..c6eb35a6a9e 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/plab.inline.hpp +++ b/hotspot/src/share/vm/gc/shared/plab.inline.hpp @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_PLAB_INLINE_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_PLAB_INLINE_HPP +#ifndef SHARE_VM_GC_SHARED_PLAB_INLINE_HPP +#define SHARE_VM_GC_SHARED_PLAB_INLINE_HPP -#include "gc_implementation/shared/plab.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/plab.hpp" HeapWord* PLAB::allocate_aligned(size_t word_sz, unsigned short alignment_in_bytes) { @@ -41,4 +41,4 @@ HeapWord* PLAB::allocate_aligned(size_t word_sz, unsigned short alignment_in_byt return allocate(word_sz); } -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_PLAB_INLINE_HPP +#endif // SHARE_VM_GC_SHARED_PLAB_INLINE_HPP diff --git a/hotspot/src/share/vm/memory/referencePolicy.cpp b/hotspot/src/share/vm/gc/shared/referencePolicy.cpp similarity index 96% rename from hotspot/src/share/vm/memory/referencePolicy.cpp rename to hotspot/src/share/vm/gc/shared/referencePolicy.cpp index a667332a7c8..e6102de2272 100644 --- a/hotspot/src/share/vm/memory/referencePolicy.cpp +++ b/hotspot/src/share/vm/gc/shared/referencePolicy.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,7 +24,7 @@ #include "precompiled.hpp" #include "classfile/javaClasses.hpp" -#include "memory/referencePolicy.hpp" +#include "gc/shared/referencePolicy.hpp" #include "memory/universe.hpp" #include "runtime/arguments.hpp" #include "runtime/globals.hpp" diff --git a/hotspot/src/share/vm/memory/referencePolicy.hpp b/hotspot/src/share/vm/gc/shared/referencePolicy.hpp similarity index 91% rename from hotspot/src/share/vm/memory/referencePolicy.hpp rename to hotspot/src/share/vm/gc/shared/referencePolicy.hpp index 971b9d0a620..f94862a6696 100644 --- a/hotspot/src/share/vm/memory/referencePolicy.hpp +++ b/hotspot/src/share/vm/gc/shared/referencePolicy.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_MEMORY_REFERENCEPOLICY_HPP -#define SHARE_VM_MEMORY_REFERENCEPOLICY_HPP +#ifndef SHARE_VM_GC_SHARED_REFERENCEPOLICY_HPP +#define SHARE_VM_GC_SHARED_REFERENCEPOLICY_HPP // referencePolicy is used to determine when soft reference objects // should be cleared. @@ -78,4 +78,4 @@ class LRUMaxHeapPolicy : public ReferencePolicy { virtual bool should_clear_reference(oop p, jlong timestamp_clock); }; -#endif // SHARE_VM_MEMORY_REFERENCEPOLICY_HPP +#endif // SHARE_VM_GC_SHARED_REFERENCEPOLICY_HPP diff --git a/hotspot/src/share/vm/memory/referenceProcessor.cpp b/hotspot/src/share/vm/gc/shared/referenceProcessor.cpp similarity index 99% rename from hotspot/src/share/vm/memory/referenceProcessor.cpp rename to hotspot/src/share/vm/gc/shared/referenceProcessor.cpp index 2b8c20d383a..d9a68282e9d 100644 --- a/hotspot/src/share/vm/memory/referenceProcessor.cpp +++ b/hotspot/src/share/vm/gc/shared/referenceProcessor.cpp @@ -25,12 +25,12 @@ #include "precompiled.hpp" #include "classfile/javaClasses.hpp" #include "classfile/systemDictionary.hpp" -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_implementation/shared/gcTraceTime.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "memory/referencePolicy.hpp" -#include "memory/referenceProcessor.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/gcTimer.hpp" +#include "gc/shared/gcTraceTime.hpp" +#include "gc/shared/referencePolicy.hpp" +#include "gc/shared/referenceProcessor.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" #include "runtime/jniHandles.hpp" diff --git a/hotspot/src/share/vm/memory/referenceProcessor.hpp b/hotspot/src/share/vm/gc/shared/referenceProcessor.hpp similarity index 98% rename from hotspot/src/share/vm/memory/referenceProcessor.hpp rename to hotspot/src/share/vm/gc/shared/referenceProcessor.hpp index 0f7b6f77673..1a8c805e233 100644 --- a/hotspot/src/share/vm/memory/referenceProcessor.hpp +++ b/hotspot/src/share/vm/gc/shared/referenceProcessor.hpp @@ -22,12 +22,12 @@ * */ -#ifndef SHARE_VM_MEMORY_REFERENCEPROCESSOR_HPP -#define SHARE_VM_MEMORY_REFERENCEPROCESSOR_HPP +#ifndef SHARE_VM_GC_SHARED_REFERENCEPROCESSOR_HPP +#define SHARE_VM_GC_SHARED_REFERENCEPROCESSOR_HPP -#include "gc_implementation/shared/gcTrace.hpp" -#include "memory/referencePolicy.hpp" -#include "memory/referenceProcessorStats.hpp" +#include "gc/shared/gcTrace.hpp" +#include "gc/shared/referencePolicy.hpp" +#include "gc/shared/referenceProcessorStats.hpp" #include "memory/referenceType.hpp" #include "oops/instanceRefKlass.hpp" @@ -657,4 +657,4 @@ protected: int _n_queues; }; -#endif // SHARE_VM_MEMORY_REFERENCEPROCESSOR_HPP +#endif // SHARE_VM_GC_SHARED_REFERENCEPROCESSOR_HPP diff --git a/hotspot/src/share/vm/memory/referenceProcessorStats.hpp b/hotspot/src/share/vm/gc/shared/referenceProcessorStats.hpp similarity index 92% rename from hotspot/src/share/vm/memory/referenceProcessorStats.hpp rename to hotspot/src/share/vm/gc/shared/referenceProcessorStats.hpp index 7497c09b92f..472430e818b 100644 --- a/hotspot/src/share/vm/memory/referenceProcessorStats.hpp +++ b/hotspot/src/share/vm/gc/shared/referenceProcessorStats.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_MEMORY_REFERENCEPROCESSORSTATS_HPP -#define SHARE_VM_MEMORY_REFERENCEPROCESSORSTATS_HPP +#ifndef SHARE_VM_GC_SHARED_REFERENCEPROCESSORSTATS_HPP +#define SHARE_VM_GC_SHARED_REFERENCEPROCESSORSTATS_HPP #include "utilities/globalDefinitions.hpp" diff --git a/hotspot/src/share/vm/memory/space.cpp b/hotspot/src/share/vm/gc/shared/space.cpp similarity index 98% rename from hotspot/src/share/vm/memory/space.cpp rename to hotspot/src/share/vm/gc/shared/space.cpp index 681c8e84201..b57e0a6936a 100644 --- a/hotspot/src/share/vm/memory/space.cpp +++ b/hotspot/src/share/vm/gc/shared/space.cpp @@ -25,21 +25,21 @@ #include "precompiled.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" -#include "gc_implementation/shared/liveRange.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "memory/blockOffsetTable.inline.hpp" -#include "memory/defNewGeneration.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/genOopClosures.inline.hpp" -#include "memory/space.hpp" -#include "memory/space.inline.hpp" +#include "gc/serial/defNewGeneration.hpp" +#include "gc/shared/blockOffsetTable.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/genOopClosures.inline.hpp" +#include "gc/shared/liveRange.hpp" +#include "gc/shared/space.hpp" +#include "gc/shared/space.inline.hpp" +#include "gc/shared/spaceDecorator.hpp" #include "memory/universe.inline.hpp" #include "oops/oop.inline.hpp" -#include "runtime/java.hpp" #include "runtime/atomic.inline.hpp" -#include "runtime/prefetch.inline.hpp" +#include "runtime/java.hpp" #include "runtime/orderAccess.inline.hpp" +#include "runtime/prefetch.inline.hpp" #include "runtime/safepoint.hpp" #include "utilities/copy.hpp" #include "utilities/globalDefinitions.hpp" diff --git a/hotspot/src/share/vm/memory/space.hpp b/hotspot/src/share/vm/gc/shared/space.hpp similarity index 99% rename from hotspot/src/share/vm/memory/space.hpp rename to hotspot/src/share/vm/gc/shared/space.hpp index 61761ba3815..ca0941e37a6 100644 --- a/hotspot/src/share/vm/memory/space.hpp +++ b/hotspot/src/share/vm/gc/shared/space.hpp @@ -22,19 +22,19 @@ * */ -#ifndef SHARE_VM_MEMORY_SPACE_HPP -#define SHARE_VM_MEMORY_SPACE_HPP +#ifndef SHARE_VM_GC_SHARED_SPACE_HPP +#define SHARE_VM_GC_SHARED_SPACE_HPP +#include "gc/shared/blockOffsetTable.hpp" +#include "gc/shared/cardTableModRefBS.hpp" +#include "gc/shared/watermark.hpp" +#include "gc/shared/workgroup.hpp" #include "memory/allocation.hpp" -#include "memory/blockOffsetTable.hpp" -#include "memory/cardTableModRefBS.hpp" #include "memory/iterator.hpp" #include "memory/memRegion.hpp" -#include "memory/watermark.hpp" #include "oops/markOop.hpp" #include "runtime/mutexLocker.hpp" #include "utilities/macros.hpp" -#include "utilities/workgroup.hpp" // A space is an abstraction for the "storage units" backing // up the generation abstraction. It includes specific @@ -789,4 +789,4 @@ class TenuredSpace: public OffsetTableContigSpace { MemRegion mr) : OffsetTableContigSpace(sharedOffsetArray, mr) {} }; -#endif // SHARE_VM_MEMORY_SPACE_HPP +#endif // SHARE_VM_GC_SHARED_SPACE_HPP diff --git a/hotspot/src/share/vm/memory/space.inline.hpp b/hotspot/src/share/vm/gc/shared/space.inline.hpp similarity index 96% rename from hotspot/src/share/vm/memory/space.inline.hpp rename to hotspot/src/share/vm/gc/shared/space.inline.hpp index ccb81527586..af6f1a8bfb2 100644 --- a/hotspot/src/share/vm/memory/space.inline.hpp +++ b/hotspot/src/share/vm/gc/shared/space.inline.hpp @@ -22,15 +22,15 @@ * */ -#ifndef SHARE_VM_MEMORY_SPACE_INLINE_HPP -#define SHARE_VM_MEMORY_SPACE_INLINE_HPP +#ifndef SHARE_VM_GC_SHARED_SPACE_INLINE_HPP +#define SHARE_VM_GC_SHARED_SPACE_INLINE_HPP -#include "gc_implementation/shared/liveRange.hpp" -#include "gc_implementation/shared/markSweep.inline.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "memory/generation.hpp" -#include "memory/space.hpp" +#include "gc/serial/markSweep.inline.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/generation.hpp" +#include "gc/shared/liveRange.hpp" +#include "gc/shared/space.hpp" +#include "gc/shared/spaceDecorator.hpp" #include "memory/universe.hpp" #include "runtime/prefetch.inline.hpp" #include "runtime/safepoint.hpp" @@ -331,4 +331,4 @@ inline void CompactibleSpace::scan_and_compact(SpaceType* space) { if (ZapUnusedHeapArea) space->mangle_unused_area(); } } -#endif // SHARE_VM_MEMORY_SPACE_INLINE_HPP +#endif // SHARE_VM_GC_SHARED_SPACE_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.cpp b/hotspot/src/share/vm/gc/shared/spaceDecorator.cpp similarity index 96% rename from hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.cpp rename to hotspot/src/share/vm/gc/shared/spaceDecorator.cpp index 1ff1e51c72d..b69e68762af 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.cpp +++ b/hotspot/src/share/vm/gc/shared/spaceDecorator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" -#include "memory/space.inline.hpp" +#include "gc/shared/space.inline.hpp" +#include "gc/shared/spaceDecorator.hpp" #include "utilities/copy.hpp" // Catch-all file for utility classes diff --git a/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp b/hotspot/src/share/vm/gc/shared/spaceDecorator.hpp similarity index 94% rename from hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp rename to hotspot/src/share/vm/gc/shared/spaceDecorator.hpp index 43bb04911a6..38ef84355f1 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp +++ b/hotspot/src/share/vm/gc/shared/spaceDecorator.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_SPACEDECORATOR_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_SPACEDECORATOR_HPP +#ifndef SHARE_VM_GC_SHARED_SPACEDECORATOR_HPP +#define SHARE_VM_GC_SHARED_SPACEDECORATOR_HPP -#include "gc_implementation/shared/mutableSpace.hpp" -#include "memory/space.hpp" +#include "gc/parallel/mutableSpace.hpp" +#include "gc/shared/space.hpp" #include "utilities/globalDefinitions.hpp" class SpaceDecorator: public AllStatic { @@ -147,4 +147,4 @@ class MutableSpaceMangler: public SpaceMangler { MutableSpaceMangler(MutableSpace* sp) : SpaceMangler(), _sp(sp) {} }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_SPACEDECORATOR_HPP +#endif // SHARE_VM_GC_SHARED_SPACEDECORATOR_HPP diff --git a/hotspot/src/share/vm/memory/specialized_oop_closures.hpp b/hotspot/src/share/vm/gc/shared/specialized_oop_closures.hpp similarity index 95% rename from hotspot/src/share/vm/memory/specialized_oop_closures.hpp rename to hotspot/src/share/vm/gc/shared/specialized_oop_closures.hpp index 5373ad8dcf3..9a2d81a4916 100644 --- a/hotspot/src/share/vm/memory/specialized_oop_closures.hpp +++ b/hotspot/src/share/vm/gc/shared/specialized_oop_closures.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,12 +22,12 @@ * */ -#ifndef SHARE_VM_MEMORY_SPECIALIZED_OOP_CLOSURES_HPP -#define SHARE_VM_MEMORY_SPECIALIZED_OOP_CLOSURES_HPP +#ifndef SHARE_VM_GC_SHARED_SPECIALIZED_OOP_CLOSURES_HPP +#define SHARE_VM_GC_SHARED_SPECIALIZED_OOP_CLOSURES_HPP #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1_specialized_oop_closures.hpp" +#include "gc/g1/g1_specialized_oop_closures.hpp" #endif // INCLUDE_ALL_GCS // The following OopClosure types get specialized versions of @@ -170,4 +170,4 @@ class NoHeaderExtendedOopClosure; f(OopsInGenClosure,_v) \ SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(f) -#endif // SHARE_VM_MEMORY_SPECIALIZED_OOP_CLOSURES_HPP +#endif // SHARE_VM_GC_SHARED_SPECIALIZED_OOP_CLOSURES_HPP diff --git a/hotspot/src/share/vm/memory/strongRootsScope.cpp b/hotspot/src/share/vm/gc/shared/strongRootsScope.cpp similarity index 97% rename from hotspot/src/share/vm/memory/strongRootsScope.cpp rename to hotspot/src/share/vm/gc/shared/strongRootsScope.cpp index 9b28475d485..82989c3e342 100644 --- a/hotspot/src/share/vm/memory/strongRootsScope.cpp +++ b/hotspot/src/share/vm/gc/shared/strongRootsScope.cpp @@ -25,7 +25,7 @@ #include "precompiled.hpp" #include "classfile/stringTable.hpp" #include "code/nmethod.hpp" -#include "memory/strongRootsScope.hpp" +#include "gc/shared/strongRootsScope.hpp" #include "runtime/thread.hpp" MarkScope::MarkScope(bool activate) : _active(activate) { diff --git a/hotspot/src/share/vm/memory/strongRootsScope.hpp b/hotspot/src/share/vm/gc/shared/strongRootsScope.hpp similarity index 90% rename from hotspot/src/share/vm/memory/strongRootsScope.hpp rename to hotspot/src/share/vm/gc/shared/strongRootsScope.hpp index 3f8c7138dbe..3ec8fa6deca 100644 --- a/hotspot/src/share/vm/memory/strongRootsScope.hpp +++ b/hotspot/src/share/vm/gc/shared/strongRootsScope.hpp @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_MEMORY_STRONGROOTSSCOPE_HPP -#define SHARE_VM_MEMORY_STRONGROOTSSCOPE_HPP +#ifndef SHARE_VM_GC_SHARED_STRONGROOTSSCOPE_HPP +#define SHARE_VM_GC_SHARED_STRONGROOTSSCOPE_HPP #include "memory/allocation.hpp" @@ -43,4 +43,4 @@ class StrongRootsScope : public MarkScope { ~StrongRootsScope(); }; -#endif // SHARE_VM_MEMORY_STRONGROOTSSCOPE_HPP +#endif // SHARE_VM_GC_SHARED_STRONGROOTSSCOPE_HPP diff --git a/hotspot/src/share/vm/utilities/taskqueue.cpp b/hotspot/src/share/vm/gc/shared/taskqueue.cpp similarity index 99% rename from hotspot/src/share/vm/utilities/taskqueue.cpp rename to hotspot/src/share/vm/gc/shared/taskqueue.cpp index 18bcd621700..88cdfc69a3f 100644 --- a/hotspot/src/share/vm/utilities/taskqueue.cpp +++ b/hotspot/src/share/vm/gc/shared/taskqueue.cpp @@ -23,13 +23,13 @@ */ #include "precompiled.hpp" +#include "gc/shared/taskqueue.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/os.hpp" #include "runtime/thread.inline.hpp" #include "utilities/debug.hpp" #include "utilities/stack.inline.hpp" -#include "utilities/taskqueue.hpp" #ifdef TRACESPINNING uint ParallelTaskTerminator::_total_yields = 0; diff --git a/hotspot/src/share/vm/utilities/taskqueue.hpp b/hotspot/src/share/vm/gc/shared/taskqueue.hpp similarity index 99% rename from hotspot/src/share/vm/utilities/taskqueue.hpp rename to hotspot/src/share/vm/gc/shared/taskqueue.hpp index 7e091924e04..5b80a9dcc4a 100644 --- a/hotspot/src/share/vm/utilities/taskqueue.hpp +++ b/hotspot/src/share/vm/gc/shared/taskqueue.hpp @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_UTILITIES_TASKQUEUE_HPP -#define SHARE_VM_UTILITIES_TASKQUEUE_HPP +#ifndef SHARE_VM_GC_SHARED_TASKQUEUE_HPP +#define SHARE_VM_GC_SHARED_TASKQUEUE_HPP #include "memory/allocation.hpp" #include "utilities/stack.hpp" @@ -557,4 +557,4 @@ typedef OverflowTaskQueue RegionTaskQueue; typedef GenericTaskQueueSet RegionTaskQueueSet; -#endif // SHARE_VM_UTILITIES_TASKQUEUE_HPP +#endif // SHARE_VM_GC_SHARED_TASKQUEUE_HPP diff --git a/hotspot/src/share/vm/utilities/taskqueue.inline.hpp b/hotspot/src/share/vm/gc/shared/taskqueue.inline.hpp similarity index 98% rename from hotspot/src/share/vm/utilities/taskqueue.inline.hpp rename to hotspot/src/share/vm/gc/shared/taskqueue.inline.hpp index 9f4eb3ea773..4af4765c661 100644 --- a/hotspot/src/share/vm/utilities/taskqueue.inline.hpp +++ b/hotspot/src/share/vm/gc/shared/taskqueue.inline.hpp @@ -22,16 +22,16 @@ * */ -#ifndef SHARE_VM_UTILITIES_TASKQUEUE_INLINE_HPP -#define SHARE_VM_UTILITIES_TASKQUEUE_INLINE_HPP +#ifndef SHARE_VM_GC_SHARED_TASKQUEUE_INLINE_HPP +#define SHARE_VM_GC_SHARED_TASKQUEUE_INLINE_HPP +#include "gc/shared/taskqueue.hpp" #include "memory/allocation.inline.hpp" #include "oops/oop.inline.hpp" -#include "utilities/debug.hpp" -#include "utilities/taskqueue.hpp" -#include "utilities/stack.inline.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/orderAccess.inline.hpp" +#include "utilities/debug.hpp" +#include "utilities/stack.inline.hpp" template inline GenericTaskQueueSet::GenericTaskQueueSet(int n) : _n(n) { @@ -276,4 +276,4 @@ inline void GenericTaskQueue::oops_do(OopClosure* f) { } -#endif // SHARE_VM_UTILITIES_TASKQUEUE_INLINE_HPP +#endif // SHARE_VM_GC_SHARED_TASKQUEUE_INLINE_HPP diff --git a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp b/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.cpp similarity index 98% rename from hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp rename to hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.cpp index 177d638922b..fe24138088e 100644 --- a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp +++ b/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,9 +23,9 @@ */ #include "precompiled.hpp" -#include "memory/genCollectedHeap.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/threadLocalAllocBuffer.inline.hpp" #include "memory/resourceArea.hpp" -#include "memory/threadLocalAllocBuffer.inline.hpp" #include "memory/universe.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/thread.inline.hpp" diff --git a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp b/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.hpp similarity index 97% rename from hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp rename to hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.hpp index 11e70672c93..60e05dcab26 100644 --- a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp +++ b/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_VM_MEMORY_THREADLOCALALLOCBUFFER_HPP -#define SHARE_VM_MEMORY_THREADLOCALALLOCBUFFER_HPP +#ifndef SHARE_VM_GC_SHARED_THREADLOCALALLOCBUFFER_HPP +#define SHARE_VM_GC_SHARED_THREADLOCALALLOCBUFFER_HPP -#include "gc_implementation/shared/gcUtil.hpp" +#include "gc/shared/gcUtil.hpp" #include "oops/typeArrayOop.hpp" #include "runtime/perfData.hpp" #include "runtime/vm_version.hpp" @@ -260,4 +260,4 @@ public: } }; -#endif // SHARE_VM_MEMORY_THREADLOCALALLOCBUFFER_HPP +#endif // SHARE_VM_GC_SHARED_THREADLOCALALLOCBUFFER_HPP diff --git a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.inline.hpp b/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.inline.hpp similarity index 91% rename from hotspot/src/share/vm/memory/threadLocalAllocBuffer.inline.hpp rename to hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.inline.hpp index 60e645fa6ff..774d2a3cda9 100644 --- a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.inline.hpp +++ b/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_MEMORY_THREADLOCALALLOCBUFFER_INLINE_HPP -#define SHARE_VM_MEMORY_THREADLOCALALLOCBUFFER_INLINE_HPP +#ifndef SHARE_VM_GC_SHARED_THREADLOCALALLOCBUFFER_INLINE_HPP +#define SHARE_VM_GC_SHARED_THREADLOCALALLOCBUFFER_INLINE_HPP -#include "gc_interface/collectedHeap.hpp" -#include "memory/threadLocalAllocBuffer.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/threadLocalAllocBuffer.hpp" #include "runtime/thread.hpp" #include "utilities/copy.hpp" @@ -102,4 +102,4 @@ void ThreadLocalAllocBuffer::record_slow_allocation(size_t obj_size) { } } -#endif // SHARE_VM_MEMORY_THREADLOCALALLOCBUFFER_INLINE_HPP +#endif // SHARE_VM_GC_SHARED_THREADLOCALALLOCBUFFER_INLINE_HPP diff --git a/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.cpp b/hotspot/src/share/vm/gc/shared/vmGCOperations.cpp similarity index 98% rename from hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.cpp rename to hotspot/src/share/vm/gc/shared/vmGCOperations.cpp index dcfcbfb82ed..eab327db541 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.cpp +++ b/hotspot/src/share/vm/gc/shared/vmGCOperations.cpp @@ -25,9 +25,9 @@ #include "precompiled.hpp" #include "classfile/classLoader.hpp" #include "classfile/javaClasses.hpp" -#include "gc_implementation/shared/vmGCOperations.hpp" -#include "memory/gcLocker.inline.hpp" -#include "memory/genCollectedHeap.hpp" +#include "gc/shared/gcLocker.inline.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/vmGCOperations.hpp" #include "memory/oopFactory.hpp" #include "oops/instanceKlass.hpp" #include "oops/instanceRefKlass.hpp" @@ -35,10 +35,10 @@ #include "runtime/init.hpp" #include "runtime/interfaceSupport.hpp" #include "utilities/dtrace.hpp" -#include "utilities/preserveException.hpp" #include "utilities/macros.hpp" +#include "utilities/preserveException.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" #endif // INCLUDE_ALL_GCS VM_GC_Operation::~VM_GC_Operation() { diff --git a/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.hpp b/hotspot/src/share/vm/gc/shared/vmGCOperations.hpp similarity index 97% rename from hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.hpp rename to hotspot/src/share/vm/gc/shared/vmGCOperations.hpp index 284d2d13822..6e15272820f 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.hpp +++ b/hotspot/src/share/vm/gc/shared/vmGCOperations.hpp @@ -22,16 +22,16 @@ * */ -#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_VMGCOPERATIONS_HPP -#define SHARE_VM_GC_IMPLEMENTATION_SHARED_VMGCOPERATIONS_HPP +#ifndef SHARE_VM_GC_SHARED_VMGCOPERATIONS_HPP +#define SHARE_VM_GC_SHARED_VMGCOPERATIONS_HPP -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" #include "memory/heapInspection.hpp" +#include "prims/jvmtiExport.hpp" #include "runtime/handles.hpp" #include "runtime/jniHandles.hpp" #include "runtime/synchronizer.hpp" #include "runtime/vm_operations.hpp" -#include "prims/jvmtiExport.hpp" // The following class hierarchy represents // a set of operations (VM_Operation) related to GC. @@ -243,4 +243,4 @@ class SvcGCMarker : public StackObj { } }; -#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_VMGCOPERATIONS_HPP +#endif // SHARE_VM_GC_SHARED_VMGCOPERATIONS_HPP diff --git a/hotspot/src/share/vm/memory/watermark.hpp b/hotspot/src/share/vm/gc/shared/watermark.hpp similarity index 90% rename from hotspot/src/share/vm/memory/watermark.hpp rename to hotspot/src/share/vm/gc/shared/watermark.hpp index 4d65aab1e14..af33e7b94c8 100644 --- a/hotspot/src/share/vm/memory/watermark.hpp +++ b/hotspot/src/share/vm/gc/shared/watermark.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,8 @@ * */ -#ifndef SHARE_VM_MEMORY_WATERMARK_HPP -#define SHARE_VM_MEMORY_WATERMARK_HPP +#ifndef SHARE_VM_GC_SHARED_WATERMARK_HPP +#define SHARE_VM_GC_SHARED_WATERMARK_HPP #include "memory/allocation.hpp" #include "utilities/globalDefinitions.hpp" @@ -58,4 +58,4 @@ inline bool operator!=(const WaterMark& x, const WaterMark& y) { return !(x == y); } -#endif // SHARE_VM_MEMORY_WATERMARK_HPP +#endif // SHARE_VM_GC_SHARED_WATERMARK_HPP diff --git a/hotspot/src/share/vm/utilities/workgroup.cpp b/hotspot/src/share/vm/gc/shared/workgroup.cpp similarity index 99% rename from hotspot/src/share/vm/utilities/workgroup.cpp rename to hotspot/src/share/vm/gc/shared/workgroup.cpp index 61c1ccacf56..571a615c3c2 100644 --- a/hotspot/src/share/vm/utilities/workgroup.cpp +++ b/hotspot/src/share/vm/gc/shared/workgroup.cpp @@ -23,11 +23,11 @@ */ #include "precompiled.hpp" +#include "gc/shared/workgroup.hpp" #include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/os.hpp" -#include "utilities/workgroup.hpp" // Definitions of WorkGang methods. diff --git a/hotspot/src/share/vm/utilities/workgroup.hpp b/hotspot/src/share/vm/gc/shared/workgroup.hpp similarity index 99% rename from hotspot/src/share/vm/utilities/workgroup.hpp rename to hotspot/src/share/vm/gc/shared/workgroup.hpp index ace227d9a78..1f1d82c72f6 100644 --- a/hotspot/src/share/vm/utilities/workgroup.hpp +++ b/hotspot/src/share/vm/gc/shared/workgroup.hpp @@ -22,11 +22,11 @@ * */ -#ifndef SHARE_VM_UTILITIES_WORKGROUP_HPP -#define SHARE_VM_UTILITIES_WORKGROUP_HPP +#ifndef SHARE_VM_GC_SHARED_WORKGROUP_HPP +#define SHARE_VM_GC_SHARED_WORKGROUP_HPP +#include "gc/shared/taskqueue.hpp" #include "runtime/thread.inline.hpp" -#include "utilities/taskqueue.hpp" // Task class hierarchy: // AbstractGangTask @@ -528,4 +528,4 @@ public: void release_par_id(int id); }; -#endif // SHARE_VM_UTILITIES_WORKGROUP_HPP +#endif // SHARE_VM_GC_SHARED_WORKGROUP_HPP diff --git a/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp b/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp index 802879268ab..7a9325c54ec 100644 --- a/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp +++ b/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp @@ -24,7 +24,7 @@ // no precompiled headers #include "classfile/vmSymbols.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" #include "interpreter/bytecodeHistogram.hpp" #include "interpreter/bytecodeInterpreter.hpp" #include "interpreter/bytecodeInterpreter.inline.hpp" diff --git a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp index 287d611edab..f2874943e57 100644 --- a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp +++ b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp @@ -28,7 +28,7 @@ #include "classfile/vmSymbols.hpp" #include "compiler/compileBroker.hpp" #include "compiler/disassembler.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" #include "interpreter/interpreter.hpp" #include "interpreter/interpreterRuntime.hpp" #include "interpreter/linkResolver.hpp" diff --git a/hotspot/src/share/vm/interpreter/linkResolver.cpp b/hotspot/src/share/vm/interpreter/linkResolver.cpp index 49b5a51d026..fe83dc974c0 100644 --- a/hotspot/src/share/vm/interpreter/linkResolver.cpp +++ b/hotspot/src/share/vm/interpreter/linkResolver.cpp @@ -27,7 +27,7 @@ #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" #include "compiler/compileBroker.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/bytecode.hpp" #include "interpreter/interpreterRuntime.hpp" #include "interpreter/linkResolver.hpp" diff --git a/hotspot/src/share/vm/interpreter/rewriter.cpp b/hotspot/src/share/vm/interpreter/rewriter.cpp index 2dc51f345d6..20ddee9a478 100644 --- a/hotspot/src/share/vm/interpreter/rewriter.cpp +++ b/hotspot/src/share/vm/interpreter/rewriter.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,11 +23,11 @@ */ #include "precompiled.hpp" +#include "gc/shared/gcLocker.hpp" #include "interpreter/bytecodes.hpp" #include "interpreter/interpreter.hpp" #include "interpreter/rewriter.hpp" #include "memory/metaspaceShared.hpp" -#include "memory/gcLocker.hpp" #include "memory/resourceArea.hpp" #include "oops/generateOopMap.hpp" #include "prims/methodHandles.hpp" diff --git a/hotspot/src/share/vm/interpreter/templateTable.cpp b/hotspot/src/share/vm/interpreter/templateTable.cpp index 3450dbd825f..ddd7fc6470c 100644 --- a/hotspot/src/share/vm/interpreter/templateTable.cpp +++ b/hotspot/src/share/vm/interpreter/templateTable.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" #include "interpreter/interp_masm.hpp" #include "interpreter/templateTable.hpp" #include "runtime/timer.hpp" diff --git a/hotspot/src/share/vm/memory/allocation.cpp b/hotspot/src/share/vm/memory/allocation.cpp index 56734768eed..ae60b890721 100644 --- a/hotspot/src/share/vm/memory/allocation.cpp +++ b/hotspot/src/share/vm/memory/allocation.cpp @@ -23,9 +23,9 @@ */ #include "precompiled.hpp" +#include "gc/shared/genCollectedHeap.hpp" #include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" -#include "memory/genCollectedHeap.hpp" #include "memory/metaspaceShared.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.hpp" diff --git a/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp b/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp index 5988eeef516..d97547c4116 100644 --- a/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp +++ b/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,19 +23,18 @@ */ #include "precompiled.hpp" -#include "gc_implementation/shared/allocationStats.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" +#include "gc/cms/allocationStats.hpp" +#include "gc/shared/spaceDecorator.hpp" #include "memory/binaryTreeDictionary.hpp" -#include "memory/freeList.hpp" #include "memory/freeBlockDictionary.hpp" +#include "memory/freeList.hpp" #include "memory/metachunk.hpp" #include "runtime/globals.hpp" -#include "utilities/ostream.hpp" #include "utilities/macros.hpp" +#include "utilities/ostream.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/concurrentMarkSweep/adaptiveFreeList.hpp" -#include "gc_implementation/concurrentMarkSweep/freeChunk.hpp" -#include "gc_implementation/concurrentMarkSweep/freeChunk.hpp" +#include "gc/cms/adaptiveFreeList.hpp" +#include "gc/cms/freeChunk.hpp" #endif // INCLUDE_ALL_GCS //////////////////////////////////////////////////////////////////////////////// diff --git a/hotspot/src/share/vm/memory/freeBlockDictionary.cpp b/hotspot/src/share/vm/memory/freeBlockDictionary.cpp index 3ac6f88d4ad..cf7103d710a 100644 --- a/hotspot/src/share/vm/memory/freeBlockDictionary.cpp +++ b/hotspot/src/share/vm/memory/freeBlockDictionary.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,7 @@ #include "runtime/thread.inline.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/concurrentMarkSweep/freeChunk.hpp" +#include "gc/cms/freeChunk.hpp" #endif // INCLUDE_ALL_GCS #ifndef PRODUCT diff --git a/hotspot/src/share/vm/memory/freeList.cpp b/hotspot/src/share/vm/memory/freeList.cpp index 6cddc6aed41..77ee98719f4 100644 --- a/hotspot/src/share/vm/memory/freeList.cpp +++ b/hotspot/src/share/vm/memory/freeList.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" #include "memory/freeBlockDictionary.hpp" #include "memory/freeList.hpp" #include "memory/metachunk.hpp" @@ -32,7 +32,7 @@ #include "runtime/vmThread.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/concurrentMarkSweep/freeChunk.hpp" +#include "gc/cms/freeChunk.hpp" #endif // INCLUDE_ALL_GCS // Free list. A FreeList is used to access a linked list of chunks diff --git a/hotspot/src/share/vm/memory/freeList.hpp b/hotspot/src/share/vm/memory/freeList.hpp index 80d07117ee2..1d3eeddbca9 100644 --- a/hotspot/src/share/vm/memory/freeList.hpp +++ b/hotspot/src/share/vm/memory/freeList.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,7 @@ #ifndef SHARE_VM_MEMORY_FREELIST_HPP #define SHARE_VM_MEMORY_FREELIST_HPP -#include "gc_implementation/shared/allocationStats.hpp" +#include "gc/cms/allocationStats.hpp" class CompactibleFreeListSpace; diff --git a/hotspot/src/share/vm/memory/genRemSet.inline.hpp b/hotspot/src/share/vm/memory/genRemSet.inline.hpp deleted file mode 100644 index c468e859d83..00000000000 --- a/hotspot/src/share/vm/memory/genRemSet.inline.hpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_MEMORY_GENREMSET_INLINE_HPP -#define SHARE_VM_MEMORY_GENREMSET_INLINE_HPP - -// Inline functions of GenRemSet, which de-virtualize this -// performance-critical call when when the rem set is the most common -// card-table kind. - -void GenRemSet::write_ref_field_gc(void* field, oop new_val) { - if (kind() == CardTableModRef) { - ((CardTableRS*)this)->inline_write_ref_field_gc(field, new_val); - } else { - write_ref_field_gc_work(field, new_val); - } -} - -#endif // SHARE_VM_MEMORY_GENREMSET_INLINE_HPP diff --git a/hotspot/src/share/vm/memory/heapInspection.cpp b/hotspot/src/share/vm/memory/heapInspection.cpp index 31ba78e8db1..6f24c4917af 100644 --- a/hotspot/src/share/vm/memory/heapInspection.cpp +++ b/hotspot/src/share/vm/memory/heapInspection.cpp @@ -25,8 +25,8 @@ #include "precompiled.hpp" #include "classfile/classLoaderData.hpp" #include "classfile/systemDictionary.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "memory/genCollectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/genCollectedHeap.hpp" #include "memory/heapInspection.hpp" #include "memory/resourceArea.hpp" #include "oops/oop.inline.hpp" @@ -35,7 +35,7 @@ #include "utilities/macros.hpp" #include "utilities/stack.inline.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" #endif // INCLUDE_ALL_GCS // HeapInspection diff --git a/hotspot/src/share/vm/memory/metaspace.cpp b/hotspot/src/share/vm/memory/metaspace.cpp index bde49b33468..fd48fe11021 100644 --- a/hotspot/src/share/vm/memory/metaspace.cpp +++ b/hotspot/src/share/vm/memory/metaspace.cpp @@ -22,14 +22,13 @@ * */ #include "precompiled.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/collectorPolicy.hpp" +#include "gc/shared/gcLocker.hpp" #include "memory/allocation.hpp" #include "memory/binaryTreeDictionary.hpp" -#include "memory/freeList.hpp" -#include "memory/collectorPolicy.hpp" #include "memory/filemap.hpp" #include "memory/freeList.hpp" -#include "memory/gcLocker.hpp" #include "memory/metachunk.hpp" #include "memory/metaspace.hpp" #include "memory/metaspaceGCThresholdUpdater.hpp" diff --git a/hotspot/src/share/vm/memory/metaspaceShared.cpp b/hotspot/src/share/vm/memory/metaspaceShared.cpp index 613907d8420..4c1d01cae92 100644 --- a/hotspot/src/share/vm/memory/metaspaceShared.cpp +++ b/hotspot/src/share/vm/memory/metaspaceShared.cpp @@ -30,18 +30,18 @@ #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "code/codeCache.hpp" -#include "interpreter/bytecodes.hpp" +#include "gc/shared/gcLocker.hpp" #include "interpreter/bytecodeStream.hpp" +#include "interpreter/bytecodes.hpp" #include "memory/filemap.hpp" -#include "memory/gcLocker.hpp" #include "memory/metaspace.hpp" #include "memory/metaspaceShared.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" #include "runtime/os.hpp" #include "runtime/signature.hpp" -#include "runtime/vm_operations.hpp" #include "runtime/vmThread.hpp" +#include "runtime/vm_operations.hpp" #include "utilities/hashtable.inline.hpp" PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC diff --git a/hotspot/src/share/vm/memory/oopFactory.cpp b/hotspot/src/share/vm/memory/oopFactory.cpp index 8318e3bf0d4..1e214b328d3 100644 --- a/hotspot/src/share/vm/memory/oopFactory.cpp +++ b/hotspot/src/share/vm/memory/oopFactory.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "memory/oopFactory.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.inline.hpp" diff --git a/hotspot/src/share/vm/memory/universe.cpp b/hotspot/src/share/vm/memory/universe.cpp index 1cd4d909b0a..a19aaa43b1d 100644 --- a/hotspot/src/share/vm/memory/universe.cpp +++ b/hotspot/src/share/vm/memory/universe.cpp @@ -31,18 +31,18 @@ #include "classfile/vmSymbols.hpp" #include "code/codeCache.hpp" #include "code/dependencies.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/cardTableModRefBS.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/gcLocker.inline.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/genRemSet.hpp" +#include "gc/shared/generation.hpp" +#include "gc/shared/space.hpp" #include "interpreter/interpreter.hpp" -#include "memory/cardTableModRefBS.hpp" #include "memory/filemap.hpp" -#include "memory/gcLocker.inline.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/genRemSet.hpp" -#include "memory/generation.hpp" #include "memory/metadataFactory.hpp" #include "memory/metaspaceShared.hpp" #include "memory/oopFactory.hpp" -#include "memory/space.hpp" #include "memory/universe.hpp" #include "memory/universe.inline.hpp" #include "oops/constantPool.hpp" @@ -71,14 +71,14 @@ #include "utilities/copy.hpp" #include "utilities/events.hpp" #include "utilities/hashtable.inline.hpp" -#include "utilities/preserveException.hpp" #include "utilities/macros.hpp" +#include "utilities/preserveException.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/shared/adaptiveSizePolicy.hpp" -#include "gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1CollectorPolicy_ext.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" +#include "gc/cms/cmsCollectorPolicy.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1CollectorPolicy_ext.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/shared/adaptiveSizePolicy.hpp" #endif // INCLUDE_ALL_GCS #if INCLUDE_CDS #include "classfile/sharedClassUtil.hpp" diff --git a/hotspot/src/share/vm/oops/arrayKlass.cpp b/hotspot/src/share/vm/oops/arrayKlass.cpp index 74898de3f07..b580c668f87 100644 --- a/hotspot/src/share/vm/oops/arrayKlass.cpp +++ b/hotspot/src/share/vm/oops/arrayKlass.cpp @@ -26,9 +26,9 @@ #include "classfile/javaClasses.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/gcLocker.hpp" #include "jvmtifiles/jvmti.h" -#include "memory/gcLocker.hpp" #include "memory/universe.inline.hpp" #include "oops/arrayKlass.hpp" #include "oops/arrayOop.hpp" diff --git a/hotspot/src/share/vm/oops/constMethod.cpp b/hotspot/src/share/vm/oops/constMethod.cpp index 88d2c0ffee4..5b66ab2b6c9 100644 --- a/hotspot/src/share/vm/oops/constMethod.cpp +++ b/hotspot/src/share/vm/oops/constMethod.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" +#include "gc/shared/gcLocker.hpp" #include "interpreter/interpreter.hpp" -#include "memory/gcLocker.hpp" #include "memory/heapInspection.hpp" #include "memory/metadataFactory.hpp" #include "oops/constMethod.hpp" diff --git a/hotspot/src/share/vm/oops/instanceClassLoaderKlass.hpp b/hotspot/src/share/vm/oops/instanceClassLoaderKlass.hpp index 2585a901261..18d377b66d8 100644 --- a/hotspot/src/share/vm/oops/instanceClassLoaderKlass.hpp +++ b/hotspot/src/share/vm/oops/instanceClassLoaderKlass.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,7 @@ #ifndef SHARE_VM_OOPS_INSTANCECLASSLOADERKLASS_HPP #define SHARE_VM_OOPS_INSTANCECLASSLOADERKLASS_HPP -#include "memory/specialized_oop_closures.hpp" +#include "gc/shared/specialized_oop_closures.hpp" #include "oops/instanceKlass.hpp" #include "utilities/macros.hpp" diff --git a/hotspot/src/share/vm/oops/instanceKlass.cpp b/hotspot/src/share/vm/oops/instanceKlass.cpp index 4aa435bd4c5..a3d6408bb15 100644 --- a/hotspot/src/share/vm/oops/instanceKlass.cpp +++ b/hotspot/src/share/vm/oops/instanceKlass.cpp @@ -28,7 +28,8 @@ #include "classfile/verifier.hpp" #include "classfile/vmSymbols.hpp" #include "compiler/compileBroker.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/specialized_oop_closures.hpp" #include "interpreter/oopMapCache.hpp" #include "interpreter/rewriter.hpp" #include "jvmtifiles/jvmti.h" @@ -36,7 +37,6 @@ #include "memory/iterator.inline.hpp" #include "memory/metadataFactory.hpp" #include "memory/oopFactory.hpp" -#include "memory/specialized_oop_closures.hpp" #include "oops/fieldStreams.hpp" #include "oops/instanceClassLoaderKlass.hpp" #include "oops/instanceKlass.inline.hpp" @@ -47,8 +47,8 @@ #include "oops/oop.inline.hpp" #include "oops/symbol.hpp" #include "prims/jvmtiExport.hpp" -#include "prims/jvmtiRedefineClassesTrace.hpp" #include "prims/jvmtiRedefineClasses.hpp" +#include "prims/jvmtiRedefineClassesTrace.hpp" #include "prims/jvmtiThreadState.hpp" #include "prims/methodComparator.hpp" #include "runtime/atomic.inline.hpp" diff --git a/hotspot/src/share/vm/oops/instanceKlass.hpp b/hotspot/src/share/vm/oops/instanceKlass.hpp index 4219a800aa0..3291e7927ed 100644 --- a/hotspot/src/share/vm/oops/instanceKlass.hpp +++ b/hotspot/src/share/vm/oops/instanceKlass.hpp @@ -26,8 +26,8 @@ #define SHARE_VM_OOPS_INSTANCEKLASS_HPP #include "classfile/classLoaderData.hpp" +#include "gc/shared/specialized_oop_closures.hpp" #include "memory/referenceType.hpp" -#include "memory/specialized_oop_closures.hpp" #include "oops/annotations.hpp" #include "oops/constMethod.hpp" #include "oops/fieldInfo.hpp" @@ -35,10 +35,10 @@ #include "oops/klassVtable.hpp" #include "runtime/handles.hpp" #include "runtime/os.hpp" +#include "trace/traceMacros.hpp" #include "utilities/accessFlags.hpp" #include "utilities/bitMap.inline.hpp" #include "utilities/macros.hpp" -#include "trace/traceMacros.hpp" // An InstanceKlass is the VM level representation of a Java class. // It contains all information needed for at class at execution runtime. diff --git a/hotspot/src/share/vm/oops/instanceMirrorKlass.cpp b/hotspot/src/share/vm/oops/instanceMirrorKlass.cpp index 7ace33c8ba3..aa64aad4e01 100644 --- a/hotspot/src/share/vm/oops/instanceMirrorKlass.cpp +++ b/hotspot/src/share/vm/oops/instanceMirrorKlass.cpp @@ -25,10 +25,10 @@ #include "precompiled.hpp" #include "classfile/javaClasses.hpp" #include "classfile/systemDictionary.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/specialized_oop_closures.hpp" #include "memory/iterator.inline.hpp" #include "memory/oopFactory.hpp" -#include "memory/specialized_oop_closures.hpp" #include "oops/instanceKlass.hpp" #include "oops/instanceMirrorKlass.hpp" #include "oops/instanceOop.hpp" diff --git a/hotspot/src/share/vm/oops/instanceMirrorKlass.hpp b/hotspot/src/share/vm/oops/instanceMirrorKlass.hpp index 888814f0b40..30154a9c18f 100644 --- a/hotspot/src/share/vm/oops/instanceMirrorKlass.hpp +++ b/hotspot/src/share/vm/oops/instanceMirrorKlass.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ #define SHARE_VM_OOPS_INSTANCEMIRRORKLASS_HPP #include "classfile/systemDictionary.hpp" -#include "memory/specialized_oop_closures.hpp" +#include "gc/shared/specialized_oop_closures.hpp" #include "oops/instanceKlass.hpp" #include "runtime/handles.hpp" #include "utilities/macros.hpp" diff --git a/hotspot/src/share/vm/oops/instanceRefKlass.cpp b/hotspot/src/share/vm/oops/instanceRefKlass.cpp index bf932f83305..8e31ef851b5 100644 --- a/hotspot/src/share/vm/oops/instanceRefKlass.cpp +++ b/hotspot/src/share/vm/oops/instanceRefKlass.cpp @@ -25,13 +25,13 @@ #include "precompiled.hpp" #include "classfile/javaClasses.hpp" #include "classfile/systemDictionary.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/specialized_oop_closures.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/specialized_oop_closures.hpp" #include "oops/instanceRefKlass.inline.hpp" #include "oops/oop.inline.hpp" -#include "utilities/preserveException.hpp" #include "utilities/macros.hpp" +#include "utilities/preserveException.hpp" PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC diff --git a/hotspot/src/share/vm/oops/instanceRefKlass.hpp b/hotspot/src/share/vm/oops/instanceRefKlass.hpp index 854c4aaea18..b13dc403beb 100644 --- a/hotspot/src/share/vm/oops/instanceRefKlass.hpp +++ b/hotspot/src/share/vm/oops/instanceRefKlass.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,7 @@ #ifndef SHARE_VM_OOPS_INSTANCEREFKLASS_HPP #define SHARE_VM_OOPS_INSTANCEREFKLASS_HPP -#include "memory/specialized_oop_closures.hpp" +#include "gc/shared/specialized_oop_closures.hpp" #include "oops/instanceKlass.hpp" #include "utilities/macros.hpp" diff --git a/hotspot/src/share/vm/oops/instanceRefKlass.inline.hpp b/hotspot/src/share/vm/oops/instanceRefKlass.inline.hpp index 56cbf5e0f50..26a2017402a 100644 --- a/hotspot/src/share/vm/oops/instanceRefKlass.inline.hpp +++ b/hotspot/src/share/vm/oops/instanceRefKlass.inline.hpp @@ -26,9 +26,9 @@ #define SHARE_VM_OOPS_INSTANCEREFKLASS_INLINE_HPP #include "classfile/javaClasses.hpp" -#include "memory/referenceProcessor.hpp" -#include "oops/instanceRefKlass.hpp" +#include "gc/shared/referenceProcessor.hpp" #include "oops/instanceKlass.inline.hpp" +#include "oops/instanceRefKlass.hpp" #include "oops/oop.inline.hpp" #include "utilities/debug.hpp" #include "utilities/globalDefinitions.hpp" diff --git a/hotspot/src/share/vm/oops/klass.cpp b/hotspot/src/share/vm/oops/klass.cpp index cc193fd415a..e6c7e3e4f01 100644 --- a/hotspot/src/share/vm/oops/klass.cpp +++ b/hotspot/src/share/vm/oops/klass.cpp @@ -23,11 +23,11 @@ */ #include "precompiled.hpp" -#include "classfile/javaClasses.hpp" #include "classfile/dictionary.hpp" +#include "classfile/javaClasses.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "memory/heapInspection.hpp" #include "memory/metadataFactory.hpp" #include "memory/oopFactory.hpp" @@ -41,7 +41,7 @@ #include "utilities/macros.hpp" #include "utilities/stack.inline.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" #endif // INCLUDE_ALL_GCS void Klass::set_name(Symbol* n) { diff --git a/hotspot/src/share/vm/oops/klass.hpp b/hotspot/src/share/vm/oops/klass.hpp index 3e19e7ebe10..d6e0e06c7e9 100644 --- a/hotspot/src/share/vm/oops/klass.hpp +++ b/hotspot/src/share/vm/oops/klass.hpp @@ -25,9 +25,9 @@ #ifndef SHARE_VM_OOPS_KLASS_HPP #define SHARE_VM_OOPS_KLASS_HPP +#include "gc/shared/specialized_oop_closures.hpp" #include "memory/iterator.hpp" #include "memory/memRegion.hpp" -#include "memory/specialized_oop_closures.hpp" #include "oops/metadata.hpp" #include "oops/oop.hpp" #include "trace/traceMacros.hpp" diff --git a/hotspot/src/share/vm/oops/klassVtable.cpp b/hotspot/src/share/vm/oops/klassVtable.cpp index 3d9e0553429..e60ec8e8038 100644 --- a/hotspot/src/share/vm/oops/klassVtable.cpp +++ b/hotspot/src/share/vm/oops/klassVtable.cpp @@ -25,7 +25,7 @@ #include "precompiled.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" -#include "memory/gcLocker.hpp" +#include "gc/shared/gcLocker.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.inline.hpp" #include "oops/instanceKlass.hpp" diff --git a/hotspot/src/share/vm/oops/method.cpp b/hotspot/src/share/vm/oops/method.cpp index 0785c9d9211..b40e347405e 100644 --- a/hotspot/src/share/vm/oops/method.cpp +++ b/hotspot/src/share/vm/oops/method.cpp @@ -27,20 +27,20 @@ #include "classfile/systemDictionary.hpp" #include "code/codeCache.hpp" #include "code/debugInfoRec.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/gcLocker.hpp" +#include "gc/shared/generation.hpp" #include "interpreter/bytecodeStream.hpp" #include "interpreter/bytecodeTracer.hpp" #include "interpreter/bytecodes.hpp" #include "interpreter/interpreter.hpp" #include "interpreter/oopMapCache.hpp" -#include "memory/gcLocker.hpp" -#include "memory/generation.hpp" #include "memory/heapInspection.hpp" #include "memory/metadataFactory.hpp" #include "memory/oopFactory.hpp" #include "oops/constMethod.hpp" -#include "oops/methodData.hpp" #include "oops/method.hpp" +#include "oops/methodData.hpp" #include "oops/oop.inline.hpp" #include "oops/symbol.hpp" #include "prims/jvmtiExport.hpp" diff --git a/hotspot/src/share/vm/oops/objArrayKlass.cpp b/hotspot/src/share/vm/oops/objArrayKlass.cpp index fb59a969cd1..6e281a2a3a0 100644 --- a/hotspot/src/share/vm/oops/objArrayKlass.cpp +++ b/hotspot/src/share/vm/oops/objArrayKlass.cpp @@ -26,11 +26,11 @@ #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/specialized_oop_closures.hpp" #include "memory/iterator.inline.hpp" #include "memory/metadataFactory.hpp" #include "memory/resourceArea.hpp" -#include "memory/specialized_oop_closures.hpp" #include "memory/universe.inline.hpp" #include "oops/instanceKlass.hpp" #include "oops/klass.inline.hpp" diff --git a/hotspot/src/share/vm/oops/objArrayOop.cpp b/hotspot/src/share/vm/oops/objArrayOop.cpp index a0265ee5cba..8db64451c30 100644 --- a/hotspot/src/share/vm/oops/objArrayOop.cpp +++ b/hotspot/src/share/vm/oops/objArrayOop.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "memory/specialized_oop_closures.hpp" +#include "gc/shared/specialized_oop_closures.hpp" #include "oops/objArrayKlass.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" diff --git a/hotspot/src/share/vm/oops/objArrayOop.hpp b/hotspot/src/share/vm/oops/objArrayOop.hpp index 5ffc0d7aab9..0a9cb141925 100644 --- a/hotspot/src/share/vm/oops/objArrayOop.hpp +++ b/hotspot/src/share/vm/oops/objArrayOop.hpp @@ -25,7 +25,7 @@ #ifndef SHARE_VM_OOPS_OBJARRAYOOP_HPP #define SHARE_VM_OOPS_OBJARRAYOOP_HPP -#include "memory/specialized_oop_closures.hpp" +#include "gc/shared/specialized_oop_closures.hpp" #include "oops/arrayOop.hpp" // An objArrayOop is an array containing oops. diff --git a/hotspot/src/share/vm/oops/oop.hpp b/hotspot/src/share/vm/oops/oop.hpp index c050a5ffb0f..da6e7e70a15 100644 --- a/hotspot/src/share/vm/oops/oop.hpp +++ b/hotspot/src/share/vm/oops/oop.hpp @@ -25,9 +25,9 @@ #ifndef SHARE_VM_OOPS_OOP_HPP #define SHARE_VM_OOPS_OOP_HPP +#include "gc/shared/specialized_oop_closures.hpp" #include "memory/iterator.hpp" #include "memory/memRegion.hpp" -#include "memory/specialized_oop_closures.hpp" #include "oops/metadata.hpp" #include "utilities/macros.hpp" #include "utilities/top.hpp" diff --git a/hotspot/src/share/vm/oops/oop.inline.hpp b/hotspot/src/share/vm/oops/oop.inline.hpp index 11884598ab9..8e0842110e0 100644 --- a/hotspot/src/share/vm/oops/oop.inline.hpp +++ b/hotspot/src/share/vm/oops/oop.inline.hpp @@ -25,12 +25,12 @@ #ifndef SHARE_VM_OOPS_OOP_INLINE_HPP #define SHARE_VM_OOPS_OOP_INLINE_HPP -#include "gc_implementation/shared/ageTable.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "memory/barrierSet.inline.hpp" -#include "memory/cardTableModRefBS.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/generation.hpp" +#include "gc/shared/ageTable.hpp" +#include "gc/shared/barrierSet.inline.hpp" +#include "gc/shared/cardTableModRefBS.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/generation.hpp" #include "oops/arrayKlass.hpp" #include "oops/arrayOop.hpp" #include "oops/klass.inline.hpp" diff --git a/hotspot/src/share/vm/oops/oopsHierarchy.cpp b/hotspot/src/share/vm/oops/oopsHierarchy.cpp index 1b6536194b5..b2fdba28d3f 100644 --- a/hotspot/src/share/vm/oops/oopsHierarchy.cpp +++ b/hotspot/src/share/vm/oops/oopsHierarchy.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "oops/oopsHierarchy.hpp" #include "runtime/thread.inline.hpp" #include "utilities/globalDefinitions.hpp" diff --git a/hotspot/src/share/vm/oops/typeArrayKlass.cpp b/hotspot/src/share/vm/oops/typeArrayKlass.cpp index 54bb11df3ee..8b1453ff6c6 100644 --- a/hotspot/src/share/vm/oops/typeArrayKlass.cpp +++ b/hotspot/src/share/vm/oops/typeArrayKlass.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,8 +26,8 @@ #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "memory/metadataFactory.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.hpp" diff --git a/hotspot/src/share/vm/opto/graphKit.cpp b/hotspot/src/share/vm/opto/graphKit.cpp index 26d24e3560b..b52f90c4d34 100644 --- a/hotspot/src/share/vm/opto/graphKit.cpp +++ b/hotspot/src/share/vm/opto/graphKit.cpp @@ -24,11 +24,11 @@ #include "precompiled.hpp" #include "compiler/compileLog.hpp" -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" -#include "gc_implementation/g1/heapRegion.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "memory/barrierSet.hpp" -#include "memory/cardTableModRefBS.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/heapRegion.hpp" +#include "gc/shared/barrierSet.hpp" +#include "gc/shared/cardTableModRefBS.hpp" +#include "gc/shared/collectedHeap.hpp" #include "opto/addnode.hpp" #include "opto/castnode.hpp" #include "opto/convertnode.hpp" diff --git a/hotspot/src/share/vm/opto/machnode.cpp b/hotspot/src/share/vm/opto/machnode.cpp index cd809abb5f8..514a9b5912e 100644 --- a/hotspot/src/share/vm/opto/machnode.cpp +++ b/hotspot/src/share/vm/opto/machnode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" #include "opto/machnode.hpp" #include "opto/regalloc.hpp" diff --git a/hotspot/src/share/vm/opto/runtime.cpp b/hotspot/src/share/vm/opto/runtime.cpp index 20674525aed..ca5e5af7833 100644 --- a/hotspot/src/share/vm/opto/runtime.cpp +++ b/hotspot/src/share/vm/opto/runtime.cpp @@ -35,14 +35,14 @@ #include "compiler/compileBroker.hpp" #include "compiler/compilerOracle.hpp" #include "compiler/oopMap.hpp" -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" -#include "gc_implementation/g1/heapRegion.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/heapRegion.hpp" +#include "gc/shared/barrierSet.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/gcLocker.inline.hpp" #include "interpreter/bytecode.hpp" #include "interpreter/interpreter.hpp" #include "interpreter/linkResolver.hpp" -#include "memory/barrierSet.hpp" -#include "memory/gcLocker.inline.hpp" #include "memory/oopFactory.hpp" #include "oops/objArrayKlass.hpp" #include "oops/oop.inline.hpp" diff --git a/hotspot/src/share/vm/opto/type.cpp b/hotspot/src/share/vm/opto/type.cpp index c21fd8e158c..0b5e91013fa 100644 --- a/hotspot/src/share/vm/opto/type.cpp +++ b/hotspot/src/share/vm/opto/type.cpp @@ -28,8 +28,8 @@ #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "compiler/compileLog.hpp" +#include "gc/shared/gcLocker.hpp" #include "libadt/dict.hpp" -#include "memory/gcLocker.hpp" #include "memory/oopFactory.hpp" #include "memory/resourceArea.hpp" #include "oops/instanceKlass.hpp" diff --git a/hotspot/src/share/vm/precompiled/precompiled.hpp b/hotspot/src/share/vm/precompiled/precompiled.hpp index 864965e8181..24f6aa491c3 100644 --- a/hotspot/src/share/vm/precompiled/precompiled.hpp +++ b/hotspot/src/share/vm/precompiled/precompiled.hpp @@ -80,21 +80,38 @@ # include "compiler/disassembler.hpp" # include "compiler/methodLiveness.hpp" # include "compiler/oopMap.hpp" -# include "gc_implementation/shared/adaptiveSizePolicy.hpp" -# include "gc_implementation/shared/ageTable.hpp" -# include "gc_implementation/shared/allocationStats.hpp" -# include "gc_implementation/shared/cSpaceCounters.hpp" -# include "gc_implementation/shared/collectorCounters.hpp" -# include "gc_implementation/shared/gSpaceCounters.hpp" -# include "gc_implementation/shared/gcStats.hpp" -# include "gc_implementation/shared/gcUtil.hpp" -# include "gc_implementation/shared/generationCounters.hpp" -# include "gc_implementation/shared/immutableSpace.hpp" -# include "gc_implementation/shared/mutableSpace.hpp" -# include "gc_implementation/shared/spaceCounters.hpp" -# include "gc_implementation/shared/spaceDecorator.hpp" -# include "gc_interface/collectedHeap.hpp" -# include "gc_interface/gcCause.hpp" +# include "gc/cms/allocationStats.hpp" +# include "gc/cms/gSpaceCounters.hpp" +# include "gc/parallel/immutableSpace.hpp" +# include "gc/parallel/mutableSpace.hpp" +# include "gc/parallel/spaceCounters.hpp" +# include "gc/serial/cSpaceCounters.hpp" +# include "gc/serial/defNewGeneration.hpp" +# include "gc/shared/adaptiveSizePolicy.hpp" +# include "gc/shared/ageTable.hpp" +# include "gc/shared/barrierSet.hpp" +# include "gc/shared/blockOffsetTable.hpp" +# include "gc/shared/cardTableModRefBS.hpp" +# include "gc/shared/collectedHeap.hpp" +# include "gc/shared/collectorCounters.hpp" +# include "gc/shared/collectorPolicy.hpp" +# include "gc/shared/gcCause.hpp" +# include "gc/shared/gcLocker.hpp" +# include "gc/shared/gcStats.hpp" +# include "gc/shared/gcUtil.hpp" +# include "gc/shared/genCollectedHeap.hpp" +# include "gc/shared/genRemSet.hpp" +# include "gc/shared/generation.hpp" +# include "gc/shared/generationCounters.hpp" +# include "gc/shared/modRefBarrierSet.hpp" +# include "gc/shared/referencePolicy.hpp" +# include "gc/shared/referenceProcessor.hpp" +# include "gc/shared/space.hpp" +# include "gc/shared/spaceDecorator.hpp" +# include "gc/shared/taskqueue.hpp" +# include "gc/shared/threadLocalAllocBuffer.hpp" +# include "gc/shared/watermark.hpp" +# include "gc/shared/workgroup.hpp" # include "interpreter/abstractInterpreter.hpp" # include "interpreter/bytecode.hpp" # include "interpreter/bytecodeHistogram.hpp" @@ -103,8 +120,8 @@ # include "interpreter/bytecodeTracer.hpp" # include "interpreter/bytecodes.hpp" # include "interpreter/cppInterpreter.hpp" -# include "interpreter/interpreter.hpp" # include "interpreter/interp_masm.hpp" +# include "interpreter/interpreter.hpp" # include "interpreter/invocationCounter.hpp" # include "interpreter/linkResolver.hpp" # include "interpreter/templateInterpreter.hpp" @@ -112,29 +129,14 @@ # include "jvmtifiles/jvmti.h" # include "memory/allocation.hpp" # include "memory/allocation.inline.hpp" -# include "memory/barrierSet.hpp" -# include "memory/blockOffsetTable.hpp" -# include "memory/cardTableModRefBS.hpp" -# include "memory/collectorPolicy.hpp" -# include "memory/defNewGeneration.hpp" -# include "memory/gcLocker.hpp" -# include "memory/genCollectedHeap.hpp" -# include "memory/genRemSet.hpp" -# include "memory/generation.hpp" # include "memory/heap.hpp" # include "memory/iterator.hpp" # include "memory/memRegion.hpp" -# include "memory/modRefBarrierSet.hpp" # include "memory/oopFactory.hpp" -# include "memory/referencePolicy.hpp" -# include "memory/referenceProcessor.hpp" # include "memory/resourceArea.hpp" -# include "memory/space.hpp" -# include "memory/threadLocalAllocBuffer.hpp" # include "memory/universe.hpp" # include "memory/universe.inline.hpp" # include "memory/virtualspace.hpp" -# include "memory/watermark.hpp" # include "oops/arrayKlass.hpp" # include "oops/arrayOop.hpp" # include "oops/constMethod.hpp" @@ -145,8 +147,8 @@ # include "oops/klassVtable.hpp" # include "oops/markOop.hpp" # include "oops/markOop.inline.hpp" -# include "oops/methodData.hpp" # include "oops/method.hpp" +# include "oops/methodData.hpp" # include "oops/objArrayKlass.hpp" # include "oops/objArrayOop.hpp" # include "oops/oop.hpp" @@ -212,11 +214,11 @@ # include "services/lowMemoryDetector.hpp" # include "services/mallocTracker.hpp" # include "services/memBaseline.hpp" +# include "services/memReporter.hpp" +# include "services/memTracker.hpp" # include "services/memoryPool.hpp" # include "services/memoryService.hpp" # include "services/memoryUsage.hpp" -# include "services/memReporter.hpp" -# include "services/memTracker.hpp" # include "services/nmtCommon.hpp" # include "services/virtualMemoryTracker.hpp" # include "utilities/accessFlags.hpp" @@ -238,11 +240,8 @@ # include "utilities/ostream.hpp" # include "utilities/preserveException.hpp" # include "utilities/sizes.hpp" -# include "utilities/taskqueue.hpp" # include "utilities/top.hpp" # include "utilities/utf8.hpp" -# include "utilities/workgroup.hpp" -# include "utilities/yieldingWorkgroup.hpp" #ifdef COMPILER2 # include "libadt/dict.hpp" # include "libadt/set.hpp" @@ -269,8 +268,8 @@ # include "opto/mulnode.hpp" # include "opto/multnode.hpp" # include "opto/narrowptrnode.hpp" -# include "opto/opcodes.hpp" # include "opto/opaquenode.hpp" +# include "opto/opcodes.hpp" # include "opto/optoreg.hpp" # include "opto/phase.hpp" # include "opto/phaseX.hpp" @@ -291,31 +290,31 @@ # include "c1/c1_globals.hpp" #endif // COMPILER1 #if INCLUDE_ALL_GCS -# include "gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp" -# include "gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp" -# include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp" -# include "gc_implementation/concurrentMarkSweep/freeChunk.hpp" -# include "gc_implementation/concurrentMarkSweep/promotionInfo.hpp" -# include "gc_implementation/g1/dirtyCardQueue.hpp" -# include "gc_implementation/g1/g1BlockOffsetTable.hpp" -# include "gc_implementation/g1/g1OopClosures.hpp" -# include "gc_implementation/g1/g1_globals.hpp" -# include "gc_implementation/g1/ptrQueue.hpp" -# include "gc_implementation/g1/satbQueue.hpp" -# include "gc_implementation/parNew/parOopClosures.hpp" -# include "gc_implementation/parallelScavenge/objectStartArray.hpp" -# include "gc_implementation/parallelScavenge/parMarkBitMap.hpp" -# include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -# include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp" -# include "gc_implementation/parallelScavenge/psCompactionManager.hpp" -# include "gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp" -# include "gc_implementation/parallelScavenge/psGenerationCounters.hpp" -# include "gc_implementation/parallelScavenge/psOldGen.hpp" -# include "gc_implementation/parallelScavenge/psVirtualspace.hpp" -# include "gc_implementation/parallelScavenge/psYoungGen.hpp" -# include "gc_implementation/shared/gcAdaptivePolicyCounters.hpp" -# include "gc_implementation/shared/gcPolicyCounters.hpp" -# include "gc_implementation/shared/plab.hpp" +# include "gc/cms/compactibleFreeListSpace.hpp" +# include "gc/cms/concurrentMarkSweepGeneration.hpp" +# include "gc/cms/freeChunk.hpp" +# include "gc/cms/parOopClosures.hpp" +# include "gc/cms/promotionInfo.hpp" +# include "gc/cms/yieldingWorkgroup.hpp" +# include "gc/g1/dirtyCardQueue.hpp" +# include "gc/g1/g1BlockOffsetTable.hpp" +# include "gc/g1/g1OopClosures.hpp" +# include "gc/g1/g1_globals.hpp" +# include "gc/g1/ptrQueue.hpp" +# include "gc/g1/satbQueue.hpp" +# include "gc/parallel/gcAdaptivePolicyCounters.hpp" +# include "gc/parallel/objectStartArray.hpp" +# include "gc/parallel/parMarkBitMap.hpp" +# include "gc/parallel/parallelScavengeHeap.hpp" +# include "gc/parallel/psAdaptiveSizePolicy.hpp" +# include "gc/parallel/psCompactionManager.hpp" +# include "gc/parallel/psGCAdaptivePolicyCounters.hpp" +# include "gc/parallel/psGenerationCounters.hpp" +# include "gc/parallel/psOldGen.hpp" +# include "gc/parallel/psVirtualspace.hpp" +# include "gc/parallel/psYoungGen.hpp" +# include "gc/shared/gcPolicyCounters.hpp" +# include "gc/shared/plab.hpp" #endif // INCLUDE_ALL_GCS #endif // !DONT_USE_PRECOMPILED_HEADER diff --git a/hotspot/src/share/vm/prims/forte.cpp b/hotspot/src/share/vm/prims/forte.cpp index 19d715ce36f..69281701646 100644 --- a/hotspot/src/share/vm/prims/forte.cpp +++ b/hotspot/src/share/vm/prims/forte.cpp @@ -25,8 +25,8 @@ #include "precompiled.hpp" #include "code/debugInfoRec.hpp" #include "code/pcDesc.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "memory/space.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/space.hpp" #include "memory/universe.inline.hpp" #include "oops/oop.inline.hpp" #include "prims/forte.hpp" diff --git a/hotspot/src/share/vm/prims/jni.cpp b/hotspot/src/share/vm/prims/jni.cpp index 63d865bca49..a8b6ec79134 100644 --- a/hotspot/src/share/vm/prims/jni.cpp +++ b/hotspot/src/share/vm/prims/jni.cpp @@ -31,10 +31,10 @@ #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" +#include "gc/shared/gcLocker.inline.hpp" #include "interpreter/linkResolver.hpp" #include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" -#include "memory/gcLocker.inline.hpp" #include "memory/oopFactory.hpp" #include "memory/universe.inline.hpp" #include "oops/instanceKlass.hpp" @@ -79,7 +79,7 @@ #include "utilities/histogram.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" #endif // INCLUDE_ALL_GCS static jint CurrentVersion = JNI_VERSION_1_8; @@ -3838,14 +3838,14 @@ _JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_GetDefaultJavaVMInitArgs(void *args_) { #ifndef PRODUCT -#include "gc_implementation/shared/gcTimer.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/gcTimer.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/heapRegionRemSet.hpp" +#include "gc/g1/heapRegionRemSet.hpp" #endif #include "memory/guardedMemory.hpp" -#include "utilities/quickSort.hpp" #include "utilities/ostream.hpp" +#include "utilities/quickSort.hpp" #if INCLUDE_VM_STRUCTS #include "runtime/vmStructs.hpp" #endif diff --git a/hotspot/src/share/vm/prims/jvm.cpp b/hotspot/src/share/vm/prims/jvm.cpp index 9b5b9b1fbf5..ee57481dc69 100644 --- a/hotspot/src/share/vm/prims/jvm.cpp +++ b/hotspot/src/share/vm/prims/jvm.cpp @@ -29,16 +29,16 @@ #include "classfile/stringTable.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/barrierSet.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/bytecode.hpp" -#include "memory/barrierSet.inline.hpp" #include "memory/oopFactory.hpp" #include "memory/universe.inline.hpp" #include "oops/fieldStreams.hpp" #include "oops/instanceKlass.hpp" +#include "oops/method.hpp" #include "oops/objArrayKlass.hpp" #include "oops/objArrayOop.inline.hpp" -#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/jvm.h" #include "prims/jvm_misc.hpp" diff --git a/hotspot/src/share/vm/prims/jvmtiExport.cpp b/hotspot/src/share/vm/prims/jvmtiExport.cpp index 13a1f62ccae..4e1faf37204 100644 --- a/hotspot/src/share/vm/prims/jvmtiExport.cpp +++ b/hotspot/src/share/vm/prims/jvmtiExport.cpp @@ -40,9 +40,9 @@ #include "prims/jvmtiImpl.hpp" #include "prims/jvmtiManageCapabilities.hpp" #include "prims/jvmtiRawMonitor.hpp" +#include "prims/jvmtiRedefineClasses.hpp" #include "prims/jvmtiTagMap.hpp" #include "prims/jvmtiThreadState.inline.hpp" -#include "prims/jvmtiRedefineClasses.hpp" #include "runtime/arguments.hpp" #include "runtime/handles.hpp" #include "runtime/interfaceSupport.hpp" @@ -55,7 +55,7 @@ #include "services/serviceUtil.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/parallelScavenge/psMarkSweep.hpp" +#include "gc/parallel/psMarkSweep.hpp" #endif // INCLUDE_ALL_GCS PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC diff --git a/hotspot/src/share/vm/prims/jvmtiGetLoadedClasses.cpp b/hotspot/src/share/vm/prims/jvmtiGetLoadedClasses.cpp index 2cebc4ab922..9546652cce2 100644 --- a/hotspot/src/share/vm/prims/jvmtiGetLoadedClasses.cpp +++ b/hotspot/src/share/vm/prims/jvmtiGetLoadedClasses.cpp @@ -24,7 +24,7 @@ #include "precompiled.hpp" #include "classfile/systemDictionary.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" #include "memory/universe.inline.hpp" #include "prims/jvmtiGetLoadedClasses.hpp" #include "runtime/thread.hpp" diff --git a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp index 5460707b853..4211c93987a 100644 --- a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp +++ b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp @@ -28,9 +28,9 @@ #include "classfile/verifier.hpp" #include "code/codeCache.hpp" #include "compiler/compileBroker.hpp" +#include "gc/shared/gcLocker.hpp" #include "interpreter/oopMapCache.hpp" #include "interpreter/rewriter.hpp" -#include "memory/gcLocker.hpp" #include "memory/metadataFactory.hpp" #include "memory/metaspaceShared.hpp" #include "memory/universe.inline.hpp" diff --git a/hotspot/src/share/vm/prims/jvmtiTagMap.cpp b/hotspot/src/share/vm/prims/jvmtiTagMap.cpp index 2c10db3776b..3200d857ce4 100644 --- a/hotspot/src/share/vm/prims/jvmtiTagMap.cpp +++ b/hotspot/src/share/vm/prims/jvmtiTagMap.cpp @@ -49,7 +49,7 @@ #include "services/serviceUtil.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" #endif // INCLUDE_ALL_GCS // JvmtiTagHashmapEntry diff --git a/hotspot/src/share/vm/prims/jvmtiTagMap.hpp b/hotspot/src/share/vm/prims/jvmtiTagMap.hpp index 89e3947807d..196abda21b8 100644 --- a/hotspot/src/share/vm/prims/jvmtiTagMap.hpp +++ b/hotspot/src/share/vm/prims/jvmtiTagMap.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,11 +27,11 @@ #ifndef SHARE_VM_PRIMS_JVMTITAGMAP_HPP #define SHARE_VM_PRIMS_JVMTITAGMAP_HPP -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/genCollectedHeap.hpp" #include "jvmtifiles/jvmti.h" #include "jvmtifiles/jvmtiEnv.hpp" #include "memory/allocation.hpp" -#include "memory/genCollectedHeap.hpp" #include "memory/universe.hpp" // forward references diff --git a/hotspot/src/share/vm/prims/jvmtiThreadState.cpp b/hotspot/src/share/vm/prims/jvmtiThreadState.cpp index 42f4854bd89..b5ed5fb9146 100644 --- a/hotspot/src/share/vm/prims/jvmtiThreadState.cpp +++ b/hotspot/src/share/vm/prims/jvmtiThreadState.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" +#include "gc/shared/gcLocker.hpp" #include "jvmtifiles/jvmtiEnv.hpp" -#include "memory/gcLocker.hpp" #include "memory/resourceArea.hpp" #include "prims/jvmtiEventController.inline.hpp" #include "prims/jvmtiImpl.hpp" diff --git a/hotspot/src/share/vm/prims/unsafe.cpp b/hotspot/src/share/vm/prims/unsafe.cpp index cadf5a0c2e3..e04d9ae1c82 100644 --- a/hotspot/src/share/vm/prims/unsafe.cpp +++ b/hotspot/src/share/vm/prims/unsafe.cpp @@ -41,7 +41,7 @@ #include "utilities/dtrace.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" +#include "gc/g1/g1SATBCardTableModRefBS.hpp" #endif // INCLUDE_ALL_GCS PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC diff --git a/hotspot/src/share/vm/prims/whitebox.cpp b/hotspot/src/share/vm/prims/whitebox.cpp index ff8acdcb9bc..400dded43e1 100644 --- a/hotspot/src/share/vm/prims/whitebox.cpp +++ b/hotspot/src/share/vm/prims/whitebox.cpp @@ -39,9 +39,9 @@ #include "runtime/compilationPolicy.hpp" #include "runtime/deoptimization.hpp" #include "runtime/interfaceSupport.hpp" +#include "runtime/javaCalls.hpp" #include "runtime/os.hpp" #include "runtime/sweeper.hpp" -#include "runtime/javaCalls.hpp" #include "runtime/thread.hpp" #include "runtime/vm_version.hpp" #include "utilities/array.hpp" @@ -49,11 +49,11 @@ #include "utilities/exceptions.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.inline.hpp" -#include "gc_implementation/g1/concurrentMark.hpp" -#include "gc_implementation/g1/concurrentMarkThread.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/heapRegionRemSet.hpp" +#include "gc/g1/concurrentMark.hpp" +#include "gc/g1/concurrentMarkThread.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/heapRegionRemSet.hpp" +#include "gc/parallel/parallelScavengeHeap.inline.hpp" #endif // INCLUDE_ALL_GCS #if INCLUDE_NMT #include "services/mallocSiteTable.hpp" diff --git a/hotspot/src/share/vm/runtime/arguments.cpp b/hotspot/src/share/vm/runtime/arguments.cpp index cdd00e1c566..8eff73dab06 100644 --- a/hotspot/src/share/vm/runtime/arguments.cpp +++ b/hotspot/src/share/vm/runtime/arguments.cpp @@ -28,10 +28,11 @@ #include "classfile/stringTable.hpp" #include "classfile/symbolTable.hpp" #include "compiler/compilerOracle.hpp" +#include "gc/shared/cardTableRS.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/referenceProcessor.hpp" +#include "gc/shared/taskqueue.hpp" #include "memory/allocation.inline.hpp" -#include "memory/cardTableRS.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/referenceProcessor.hpp" #include "memory/universe.inline.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" @@ -46,11 +47,10 @@ #include "utilities/defaultStream.hpp" #include "utilities/macros.hpp" #include "utilities/stringUtils.hpp" -#include "utilities/taskqueue.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" +#include "gc/cms/compactibleFreeListSpace.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" #endif // INCLUDE_ALL_GCS // Note: This is a special bug reporting site for the JVM diff --git a/hotspot/src/share/vm/runtime/fprofiler.cpp b/hotspot/src/share/vm/runtime/fprofiler.cpp index cd387113f61..83b308c1495 100644 --- a/hotspot/src/share/vm/runtime/fprofiler.cpp +++ b/hotspot/src/share/vm/runtime/fprofiler.cpp @@ -26,7 +26,7 @@ #include "classfile/classLoader.hpp" #include "code/codeCache.hpp" #include "code/vtableStubs.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/interpreter.hpp" #include "memory/allocation.inline.hpp" #include "memory/universe.inline.hpp" diff --git a/hotspot/src/share/vm/runtime/frame.cpp b/hotspot/src/share/vm/runtime/frame.cpp index 140a587800b..c48cc28a3ad 100644 --- a/hotspot/src/share/vm/runtime/frame.cpp +++ b/hotspot/src/share/vm/runtime/frame.cpp @@ -27,14 +27,14 @@ #include "code/vmreg.inline.hpp" #include "compiler/abstractCompiler.hpp" #include "compiler/disassembler.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/interpreter.hpp" #include "interpreter/oopMapCache.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.inline.hpp" #include "oops/markOop.hpp" -#include "oops/methodData.hpp" #include "oops/method.hpp" +#include "oops/methodData.hpp" #include "oops/oop.inline.hpp" #include "oops/verifyOopClosure.hpp" #include "prims/methodHandles.hpp" diff --git a/hotspot/src/share/vm/runtime/globals.cpp b/hotspot/src/share/vm/runtime/globals.cpp index 6d403239bea..7d4fdc5d7fa 100644 --- a/hotspot/src/share/vm/runtime/globals.cpp +++ b/hotspot/src/share/vm/runtime/globals.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,11 +30,11 @@ #include "runtime/globals_extension.hpp" #include "runtime/os.hpp" #include "trace/tracing.hpp" -#include "utilities/ostream.hpp" #include "utilities/macros.hpp" +#include "utilities/ostream.hpp" #include "utilities/top.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1_globals.hpp" +#include "gc/g1/g1_globals.hpp" #endif // INCLUDE_ALL_GCS #ifdef COMPILER1 #include "c1/c1_globals.hpp" diff --git a/hotspot/src/share/vm/runtime/init.cpp b/hotspot/src/share/vm/runtime/init.cpp index eaa78a30420..7ef62065e57 100644 --- a/hotspot/src/share/vm/runtime/init.cpp +++ b/hotspot/src/share/vm/runtime/init.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,7 @@ #include "precompiled.hpp" #include "classfile/stringTable.hpp" #include "code/icBuffer.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" #include "interpreter/bytecodes.hpp" #include "memory/universe.hpp" #include "prims/methodHandles.hpp" diff --git a/hotspot/src/share/vm/runtime/interfaceSupport.cpp b/hotspot/src/share/vm/runtime/interfaceSupport.cpp index 70d03f3c36e..337fb594cb2 100644 --- a/hotspot/src/share/vm/runtime/interfaceSupport.cpp +++ b/hotspot/src/share/vm/runtime/interfaceSupport.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,9 +23,9 @@ */ #include "precompiled.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "memory/genCollectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/genCollectedHeap.hpp" #include "memory/resourceArea.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/init.hpp" diff --git a/hotspot/src/share/vm/runtime/interfaceSupport.hpp b/hotspot/src/share/vm/runtime/interfaceSupport.hpp index 471be25d751..590b772af36 100644 --- a/hotspot/src/share/vm/runtime/interfaceSupport.hpp +++ b/hotspot/src/share/vm/runtime/interfaceSupport.hpp @@ -25,7 +25,7 @@ #ifndef SHARE_VM_RUNTIME_INTERFACESUPPORT_HPP #define SHARE_VM_RUNTIME_INTERFACESUPPORT_HPP -#include "memory/gcLocker.hpp" +#include "gc/shared/gcLocker.hpp" #include "runtime/handles.inline.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/orderAccess.hpp" diff --git a/hotspot/src/share/vm/runtime/java.cpp b/hotspot/src/share/vm/runtime/java.cpp index 896c676407d..9288b12755c 100644 --- a/hotspot/src/share/vm/runtime/java.cpp +++ b/hotspot/src/share/vm/runtime/java.cpp @@ -29,8 +29,8 @@ #include "code/codeCache.hpp" #include "compiler/compileBroker.hpp" #include "compiler/compilerOracle.hpp" +#include "gc/shared/genCollectedHeap.hpp" #include "interpreter/bytecodeHistogram.hpp" -#include "memory/genCollectedHeap.hpp" #include "memory/oopFactory.hpp" #include "memory/universe.hpp" #include "oops/constantPool.hpp" @@ -65,8 +65,8 @@ #include "utilities/macros.hpp" #include "utilities/vmError.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.hpp" +#include "gc/cms/concurrentMarkSweepThread.hpp" +#include "gc/parallel/psScavenge.hpp" #endif // INCLUDE_ALL_GCS #ifdef COMPILER1 #include "c1/c1_Compiler.hpp" diff --git a/hotspot/src/share/vm/runtime/memprofiler.cpp b/hotspot/src/share/vm/runtime/memprofiler.cpp index 279277ed0b0..aeffd06845b 100644 --- a/hotspot/src/share/vm/runtime/memprofiler.cpp +++ b/hotspot/src/share/vm/runtime/memprofiler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,9 +25,9 @@ #include "precompiled.hpp" #include "classfile/systemDictionary.hpp" #include "code/codeCache.hpp" -#include "gc_interface/collectedHeap.inline.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/generation.hpp" #include "interpreter/oopMapCache.hpp" -#include "memory/generation.hpp" #include "memory/resourceArea.hpp" #include "runtime/handles.inline.hpp" #include "runtime/jniHandles.hpp" diff --git a/hotspot/src/share/vm/runtime/os.cpp b/hotspot/src/share/vm/runtime/os.cpp index b3e5a0664d0..525c1a929c8 100644 --- a/hotspot/src/share/vm/runtime/os.cpp +++ b/hotspot/src/share/vm/runtime/os.cpp @@ -30,7 +30,7 @@ #include "code/codeCache.hpp" #include "code/icBuffer.hpp" #include "code/vtableStubs.hpp" -#include "gc_implementation/shared/vmGCOperations.hpp" +#include "gc/shared/vmGCOperations.hpp" #include "interpreter/interpreter.hpp" #include "memory/allocation.inline.hpp" #ifdef ASSERT @@ -52,9 +52,9 @@ #include "runtime/thread.inline.hpp" #include "runtime/vm_version.hpp" #include "services/attachListener.hpp" -#include "services/nmtCommon.hpp" #include "services/mallocTracker.hpp" #include "services/memTracker.hpp" +#include "services/nmtCommon.hpp" #include "services/threadService.hpp" #include "utilities/defaultStream.hpp" #include "utilities/events.hpp" diff --git a/hotspot/src/share/vm/runtime/safepoint.cpp b/hotspot/src/share/vm/runtime/safepoint.cpp index d7c32ccb009..2c9ce08a344 100644 --- a/hotspot/src/share/vm/runtime/safepoint.cpp +++ b/hotspot/src/share/vm/runtime/safepoint.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,9 +30,9 @@ #include "code/nmethod.hpp" #include "code/pcDesc.hpp" #include "code/scopeDesc.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/gcLocker.inline.hpp" #include "interpreter/interpreter.hpp" -#include "memory/gcLocker.inline.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.inline.hpp" #include "oops/oop.inline.hpp" @@ -56,8 +56,8 @@ #include "utilities/events.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp" -#include "gc_implementation/shared/suspendibleThreadSet.hpp" +#include "gc/cms/concurrentMarkSweepThread.hpp" +#include "gc/g1/suspendibleThreadSet.hpp" #endif // INCLUDE_ALL_GCS #ifdef COMPILER1 #include "c1/c1_globals.hpp" diff --git a/hotspot/src/share/vm/runtime/sharedRuntime.cpp b/hotspot/src/share/vm/runtime/sharedRuntime.cpp index 80a075e73d7..50c8a732431 100644 --- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp +++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp @@ -33,9 +33,9 @@ #include "compiler/compileBroker.hpp" #include "compiler/compilerOracle.hpp" #include "compiler/disassembler.hpp" +#include "gc/shared/gcLocker.inline.hpp" #include "interpreter/interpreter.hpp" #include "interpreter/interpreterRuntime.hpp" -#include "memory/gcLocker.inline.hpp" #include "memory/universe.inline.hpp" #include "oops/oop.inline.hpp" #include "prims/forte.hpp" @@ -43,8 +43,8 @@ #include "prims/jvmtiRedefineClassesTrace.hpp" #include "prims/methodHandles.hpp" #include "prims/nativeLookup.hpp" -#include "runtime/atomic.inline.hpp" #include "runtime/arguments.hpp" +#include "runtime/atomic.inline.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/handles.inline.hpp" #include "runtime/init.hpp" diff --git a/hotspot/src/share/vm/runtime/thread.cpp b/hotspot/src/share/vm/runtime/thread.cpp index ac1ed761671..490b6da6846 100644 --- a/hotspot/src/share/vm/runtime/thread.cpp +++ b/hotspot/src/share/vm/runtime/thread.cpp @@ -30,11 +30,12 @@ #include "code/codeCache.hpp" #include "code/scopeDesc.hpp" #include "compiler/compileBroker.hpp" +#include "gc/shared/gcLocker.inline.hpp" +#include "gc/shared/workgroup.hpp" #include "interpreter/interpreter.hpp" #include "interpreter/linkResolver.hpp" #include "interpreter/oopMapCache.hpp" #include "jvmtifiles/jvmtiEnv.hpp" -#include "memory/gcLocker.inline.hpp" #include "memory/metaspaceShared.hpp" #include "memory/oopFactory.hpp" #include "memory/universe.inline.hpp" @@ -82,18 +83,17 @@ #include "services/management.hpp" #include "services/memTracker.hpp" #include "services/threadService.hpp" -#include "trace/tracing.hpp" #include "trace/traceMacros.hpp" +#include "trace/tracing.hpp" #include "utilities/defaultStream.hpp" #include "utilities/dtrace.hpp" #include "utilities/events.hpp" #include "utilities/macros.hpp" #include "utilities/preserveException.hpp" -#include "utilities/workgroup.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp" -#include "gc_implementation/g1/concurrentMarkThread.inline.hpp" -#include "gc_implementation/parallelScavenge/pcTasks.hpp" +#include "gc/cms/concurrentMarkSweepThread.hpp" +#include "gc/g1/concurrentMarkThread.inline.hpp" +#include "gc/parallel/pcTasks.hpp" #endif // INCLUDE_ALL_GCS #ifdef COMPILER1 #include "c1/c1_Compiler.hpp" diff --git a/hotspot/src/share/vm/runtime/thread.hpp b/hotspot/src/share/vm/runtime/thread.hpp index 4d0ec4d7176..b26ec6b0982 100644 --- a/hotspot/src/share/vm/runtime/thread.hpp +++ b/hotspot/src/share/vm/runtime/thread.hpp @@ -25,8 +25,8 @@ #ifndef SHARE_VM_RUNTIME_THREAD_HPP #define SHARE_VM_RUNTIME_THREAD_HPP +#include "gc/shared/threadLocalAllocBuffer.hpp" #include "memory/allocation.hpp" -#include "memory/threadLocalAllocBuffer.hpp" #include "oops/oop.hpp" #include "prims/jni.h" #include "prims/jvmtiExport.hpp" @@ -48,8 +48,8 @@ #include "utilities/macros.hpp" #include "utilities/top.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/dirtyCardQueue.hpp" -#include "gc_implementation/g1/satbQueue.hpp" +#include "gc/g1/dirtyCardQueue.hpp" +#include "gc/g1/satbQueue.hpp" #endif // INCLUDE_ALL_GCS #ifdef TARGET_ARCH_zero # include "stack_zero.hpp" diff --git a/hotspot/src/share/vm/runtime/threadLocalStorage.hpp b/hotspot/src/share/vm/runtime/threadLocalStorage.hpp index a0c08c2df42..9d6d9f6f8c2 100644 --- a/hotspot/src/share/vm/runtime/threadLocalStorage.hpp +++ b/hotspot/src/share/vm/runtime/threadLocalStorage.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,7 @@ #ifndef SHARE_VM_RUNTIME_THREADLOCALSTORAGE_HPP #define SHARE_VM_RUNTIME_THREADLOCALSTORAGE_HPP -#include "gc_implementation/shared/gcUtil.hpp" +#include "gc/shared/gcUtil.hpp" #include "runtime/os.hpp" #include "utilities/top.hpp" diff --git a/hotspot/src/share/vm/runtime/unhandledOops.cpp b/hotspot/src/share/vm/runtime/unhandledOops.cpp index d27b1fb2f71..446fefa59df 100644 --- a/hotspot/src/share/vm/runtime/unhandledOops.cpp +++ b/hotspot/src/share/vm/runtime/unhandledOops.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "memory/gcLocker.inline.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/gcLocker.inline.hpp" #include "memory/universe.hpp" #include "oops/oop.inline.hpp" #include "runtime/thread.hpp" diff --git a/hotspot/src/share/vm/runtime/vmStructs.cpp b/hotspot/src/share/vm/runtime/vmStructs.cpp index b40dbd9592a..c275c5df4c8 100644 --- a/hotspot/src/share/vm/runtime/vmStructs.cpp +++ b/hotspot/src/share/vm/runtime/vmStructs.cpp @@ -23,18 +23,18 @@ */ #include "precompiled.hpp" +#include "ci/ciField.hpp" +#include "ci/ciInstance.hpp" +#include "ci/ciMethodData.hpp" +#include "ci/ciObjArrayKlass.hpp" +#include "ci/ciSymbol.hpp" +#include "classfile/compactHashtable.hpp" #include "classfile/dictionary.hpp" #include "classfile/javaClasses.hpp" #include "classfile/loaderConstraints.hpp" #include "classfile/placeholders.hpp" -#include "classfile/compactHashtable.hpp" #include "classfile/stringTable.hpp" #include "classfile/systemDictionary.hpp" -#include "ci/ciField.hpp" -#include "ci/ciInstance.hpp" -#include "ci/ciObjArrayKlass.hpp" -#include "ci/ciMethodData.hpp" -#include "ci/ciSymbol.hpp" #include "code/codeBlob.hpp" #include "code/codeCache.hpp" #include "code/compressedStream.hpp" @@ -43,30 +43,30 @@ #include "code/pcDesc.hpp" #include "code/stubs.hpp" #include "code/vmreg.hpp" -#include "compiler/oopMap.hpp" #include "compiler/compileBroker.hpp" -#include "gc_implementation/shared/immutableSpace.hpp" -#include "gc_implementation/shared/mutableSpace.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "compiler/oopMap.hpp" +#include "gc/parallel/immutableSpace.hpp" +#include "gc/parallel/mutableSpace.hpp" +#include "gc/serial/defNewGeneration.hpp" +#include "gc/serial/tenuredGeneration.hpp" +#include "gc/shared/cardTableRS.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/generation.hpp" +#include "gc/shared/generationSpec.hpp" +#include "gc/shared/space.hpp" +#include "gc/shared/watermark.hpp" #include "interpreter/bytecodeInterpreter.hpp" #include "interpreter/bytecodes.hpp" #include "interpreter/interpreter.hpp" #include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" -#include "memory/cardTableRS.hpp" -#include "memory/defNewGeneration.hpp" #include "memory/freeBlockDictionary.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/generation.hpp" -#include "memory/generationSpec.hpp" #include "memory/heap.hpp" #include "memory/metachunk.hpp" #include "memory/referenceType.hpp" -#include "memory/space.hpp" -#include "memory/tenuredGeneration.hpp" #include "memory/universe.hpp" #include "memory/virtualspace.hpp" -#include "memory/watermark.hpp" #include "oops/arrayKlass.hpp" #include "oops/arrayOop.hpp" #include "oops/compiledICHolder.hpp" @@ -79,9 +79,9 @@ #include "oops/instanceOop.hpp" #include "oops/klass.hpp" #include "oops/markOop.hpp" -#include "oops/methodData.hpp" -#include "oops/methodCounters.hpp" #include "oops/method.hpp" +#include "oops/methodCounters.hpp" +#include "oops/methodData.hpp" #include "oops/objArrayKlass.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" @@ -91,7 +91,6 @@ #include "prims/jvmtiAgentThread.hpp" #include "runtime/arguments.hpp" #include "runtime/deoptimization.hpp" -#include "runtime/vframeArray.hpp" #include "runtime/globals.hpp" #include "runtime/java.hpp" #include "runtime/javaCalls.hpp" @@ -101,6 +100,7 @@ #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" #include "runtime/thread.inline.hpp" +#include "runtime/vframeArray.hpp" #include "runtime/vmStructs.hpp" #include "utilities/array.hpp" #include "utilities/globalDefinitions.hpp" @@ -162,20 +162,20 @@ # include "vmStructs_bsd_zero.hpp" #endif #if INCLUDE_ALL_GCS -#include "gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp" -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp" -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp" -#include "gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp" -#include "gc_implementation/parNew/parNewGeneration.hpp" -#include "gc_implementation/parNew/vmStructs_parNew.hpp" -#include "gc_implementation/parallelScavenge/asPSOldGen.hpp" -#include "gc_implementation/parallelScavenge/asPSYoungGen.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psOldGen.hpp" -#include "gc_implementation/parallelScavenge/psVirtualspace.hpp" -#include "gc_implementation/parallelScavenge/psYoungGen.hpp" -#include "gc_implementation/parallelScavenge/vmStructs_parallelgc.hpp" -#include "gc_implementation/g1/vmStructs_g1.hpp" +#include "gc/cms/compactibleFreeListSpace.hpp" +#include "gc/cms/concurrentMarkSweepGeneration.hpp" +#include "gc/cms/concurrentMarkSweepThread.hpp" +#include "gc/cms/parNewGeneration.hpp" +#include "gc/cms/vmStructs_cms.hpp" +#include "gc/cms/vmStructs_parNew.hpp" +#include "gc/g1/vmStructs_g1.hpp" +#include "gc/parallel/asPSOldGen.hpp" +#include "gc/parallel/asPSYoungGen.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/psOldGen.hpp" +#include "gc/parallel/psVirtualspace.hpp" +#include "gc/parallel/psYoungGen.hpp" +#include "gc/parallel/vmStructs_parallelgc.hpp" #endif // INCLUDE_ALL_GCS #if INCLUDE_TRACE @@ -197,13 +197,13 @@ #include "opto/machnode.hpp" #include "opto/matcher.hpp" #include "opto/mathexactnode.hpp" -#include "opto/mulnode.hpp" #include "opto/movenode.hpp" +#include "opto/mulnode.hpp" #include "opto/narrowptrnode.hpp" #include "opto/opaquenode.hpp" #include "opto/optoreg.hpp" -#include "opto/phaseX.hpp" #include "opto/parse.hpp" +#include "opto/phaseX.hpp" #include "opto/regalloc.hpp" #include "opto/rootnode.hpp" #include "opto/subnode.hpp" diff --git a/hotspot/src/share/vm/runtime/vmThread.cpp b/hotspot/src/share/vm/runtime/vmThread.cpp index 8e34fa48525..927b25545f4 100644 --- a/hotspot/src/share/vm/runtime/vmThread.cpp +++ b/hotspot/src/share/vm/runtime/vmThread.cpp @@ -24,7 +24,7 @@ #include "precompiled.hpp" #include "compiler/compileBroker.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" #include "memory/resourceArea.hpp" #include "oops/method.hpp" #include "oops/oop.inline.hpp" diff --git a/hotspot/src/share/vm/runtime/vm_operations.cpp b/hotspot/src/share/vm/runtime/vm_operations.cpp index 5685589813f..d5d7e7e989a 100644 --- a/hotspot/src/share/vm/runtime/vm_operations.cpp +++ b/hotspot/src/share/vm/runtime/vm_operations.cpp @@ -28,7 +28,7 @@ #include "code/codeCache.hpp" #include "compiler/compileBroker.hpp" #include "compiler/compilerOracle.hpp" -#include "gc_implementation/shared/isGCActiveMark.hpp" +#include "gc/shared/isGCActiveMark.hpp" #include "memory/heapInspection.hpp" #include "memory/resourceArea.hpp" #include "oops/symbol.hpp" diff --git a/hotspot/src/share/vm/services/attachListener.cpp b/hotspot/src/share/vm/services/attachListener.cpp index 89c0d13420a..a1c8b8a43f9 100644 --- a/hotspot/src/share/vm/services/attachListener.cpp +++ b/hotspot/src/share/vm/services/attachListener.cpp @@ -25,7 +25,7 @@ #include "precompiled.hpp" #include "classfile/javaClasses.hpp" #include "classfile/systemDictionary.hpp" -#include "gc_implementation/shared/vmGCOperations.hpp" +#include "gc/shared/vmGCOperations.hpp" #include "memory/resourceArea.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" @@ -36,8 +36,8 @@ #include "runtime/os.hpp" #include "services/attachListener.hpp" #include "services/diagnosticCommand.hpp" -#include "services/writeableFlags.hpp" #include "services/heapDumper.hpp" +#include "services/writeableFlags.hpp" volatile bool AttachListener::_initialized; diff --git a/hotspot/src/share/vm/services/diagnosticCommand.cpp b/hotspot/src/share/vm/services/diagnosticCommand.cpp index 287f958a794..491f3568d47 100644 --- a/hotspot/src/share/vm/services/diagnosticCommand.cpp +++ b/hotspot/src/share/vm/services/diagnosticCommand.cpp @@ -25,16 +25,16 @@ #include "precompiled.hpp" #include "classfile/classLoaderStats.hpp" #include "classfile/compactHashtable.hpp" -#include "gc_implementation/shared/vmGCOperations.hpp" +#include "gc/shared/vmGCOperations.hpp" #include "oops/oop.inline.hpp" #include "runtime/javaCalls.hpp" #include "runtime/os.hpp" #include "services/diagnosticArgument.hpp" #include "services/diagnosticCommand.hpp" #include "services/diagnosticFramework.hpp" -#include "services/writeableFlags.hpp" #include "services/heapDumper.hpp" #include "services/management.hpp" +#include "services/writeableFlags.hpp" #include "utilities/macros.hpp" PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC diff --git a/hotspot/src/share/vm/services/g1MemoryPool.cpp b/hotspot/src/share/vm/services/g1MemoryPool.cpp index 61411ce4128..49328908920 100644 --- a/hotspot/src/share/vm/services/g1MemoryPool.cpp +++ b/hotspot/src/share/vm/services/g1MemoryPool.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,10 +23,10 @@ */ #include "precompiled.hpp" -#include "gc_implementation/g1/g1CollectedHeap.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/g1/g1CollectorPolicy.hpp" -#include "gc_implementation/g1/heapRegion.hpp" +#include "gc/g1/g1CollectedHeap.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/g1/g1CollectorPolicy.hpp" +#include "gc/g1/heapRegion.hpp" #include "services/g1MemoryPool.hpp" G1MemoryPoolSuper::G1MemoryPoolSuper(G1CollectedHeap* g1h, diff --git a/hotspot/src/share/vm/services/g1MemoryPool.hpp b/hotspot/src/share/vm/services/g1MemoryPool.hpp index 78b877a0980..fddc439e899 100644 --- a/hotspot/src/share/vm/services/g1MemoryPool.hpp +++ b/hotspot/src/share/vm/services/g1MemoryPool.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1MonitoringSupport.hpp" +#include "gc/g1/g1MonitoringSupport.hpp" #include "services/memoryPool.hpp" #include "services/memoryUsage.hpp" #endif // INCLUDE_ALL_GCS diff --git a/hotspot/src/share/vm/services/heapDumper.cpp b/hotspot/src/share/vm/services/heapDumper.cpp index 2cee37ab358..c1e786b0931 100644 --- a/hotspot/src/share/vm/services/heapDumper.cpp +++ b/hotspot/src/share/vm/services/heapDumper.cpp @@ -26,9 +26,9 @@ #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" -#include "gc_implementation/shared/vmGCOperations.hpp" -#include "memory/gcLocker.inline.hpp" -#include "memory/genCollectedHeap.hpp" +#include "gc/shared/gcLocker.inline.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/vmGCOperations.hpp" #include "memory/universe.hpp" #include "oops/objArrayKlass.hpp" #include "oops/objArrayOop.inline.hpp" @@ -42,10 +42,10 @@ #include "runtime/vm_operations.hpp" #include "services/heapDumper.hpp" #include "services/threadService.hpp" -#include "utilities/ostream.hpp" #include "utilities/macros.hpp" +#include "utilities/ostream.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" #endif // INCLUDE_ALL_GCS /* diff --git a/hotspot/src/share/vm/services/memoryPool.cpp b/hotspot/src/share/vm/services/memoryPool.cpp index 086530bd0d8..ec8d823e01d 100644 --- a/hotspot/src/share/vm/services/memoryPool.cpp +++ b/hotspot/src/share/vm/services/memoryPool.cpp @@ -25,9 +25,9 @@ #include "precompiled.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" -#include "memory/defNewGeneration.hpp" +#include "gc/serial/defNewGeneration.hpp" +#include "gc/shared/space.hpp" #include "memory/metaspace.hpp" -#include "memory/space.hpp" #include "oops/oop.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/javaCalls.hpp" @@ -39,7 +39,7 @@ #include "utilities/globalDefinitions.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp" +#include "gc/cms/compactibleFreeListSpace.hpp" #endif MemoryPool::MemoryPool(const char* name, diff --git a/hotspot/src/share/vm/services/memoryService.cpp b/hotspot/src/share/vm/services/memoryService.cpp index bb1f7f19d3c..595fc1ae743 100644 --- a/hotspot/src/share/vm/services/memoryService.cpp +++ b/hotspot/src/share/vm/services/memoryService.cpp @@ -25,15 +25,15 @@ #include "precompiled.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" -#include "gc_implementation/shared/mutableSpace.hpp" -#include "memory/collectorPolicy.hpp" -#include "memory/defNewGeneration.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/generation.hpp" -#include "memory/generationSpec.hpp" +#include "gc/parallel/mutableSpace.hpp" +#include "gc/serial/defNewGeneration.hpp" +#include "gc/serial/tenuredGeneration.hpp" +#include "gc/shared/collectorPolicy.hpp" +#include "gc/shared/genCollectedHeap.hpp" +#include "gc/shared/generation.hpp" +#include "gc/shared/generationSpec.hpp" #include "memory/heap.hpp" #include "memory/memRegion.hpp" -#include "memory/tenuredGeneration.hpp" #include "oops/oop.inline.hpp" #include "runtime/globals.hpp" #include "runtime/javaCalls.hpp" @@ -46,12 +46,12 @@ #include "utilities/growableArray.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp" -#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" -#include "gc_implementation/parNew/parNewGeneration.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psOldGen.hpp" -#include "gc_implementation/parallelScavenge/psYoungGen.hpp" +#include "gc/cms/concurrentMarkSweepGeneration.hpp" +#include "gc/cms/parNewGeneration.hpp" +#include "gc/g1/g1CollectedHeap.inline.hpp" +#include "gc/parallel/parallelScavengeHeap.hpp" +#include "gc/parallel/psOldGen.hpp" +#include "gc/parallel/psYoungGen.hpp" #include "services/g1MemoryPool.hpp" #include "services/psMemoryPool.hpp" #endif // INCLUDE_ALL_GCS diff --git a/hotspot/src/share/vm/services/memoryService.hpp b/hotspot/src/share/vm/services/memoryService.hpp index e24cce73c57..3013f6a5909 100644 --- a/hotspot/src/share/vm/services/memoryService.hpp +++ b/hotspot/src/share/vm/services/memoryService.hpp @@ -25,11 +25,11 @@ #ifndef SHARE_VM_SERVICES_MEMORYSERVICE_HPP #define SHARE_VM_SERVICES_MEMORYSERVICE_HPP +#include "gc/shared/gcCause.hpp" +#include "gc/shared/generation.hpp" #include "memory/allocation.hpp" -#include "memory/generation.hpp" #include "runtime/handles.hpp" #include "services/memoryUsage.hpp" -#include "gc_interface/gcCause.hpp" // Forward declaration class MemoryPool; diff --git a/hotspot/src/share/vm/services/psMemoryPool.hpp b/hotspot/src/share/vm/services/psMemoryPool.hpp index e00f3c3e821..c59e82d05d6 100644 --- a/hotspot/src/share/vm/services/psMemoryPool.hpp +++ b/hotspot/src/share/vm/services/psMemoryPool.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,12 +27,12 @@ #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/parallelScavenge/psOldGen.hpp" -#include "gc_implementation/parallelScavenge/psYoungGen.hpp" -#include "gc_implementation/shared/mutableSpace.hpp" -#include "memory/defNewGeneration.hpp" +#include "gc/parallel/mutableSpace.hpp" +#include "gc/parallel/psOldGen.hpp" +#include "gc/parallel/psYoungGen.hpp" +#include "gc/serial/defNewGeneration.hpp" +#include "gc/shared/space.hpp" #include "memory/heap.hpp" -#include "memory/space.hpp" #include "services/memoryPool.hpp" #include "services/memoryUsage.hpp" #endif // INCLUDE_ALL_GCS diff --git a/hotspot/src/share/vm/shark/sharkBuilder.hpp b/hotspot/src/share/vm/shark/sharkBuilder.hpp index e594a196026..4dec366342a 100644 --- a/hotspot/src/share/vm/shark/sharkBuilder.hpp +++ b/hotspot/src/share/vm/shark/sharkBuilder.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. * Copyright 2008, 2009, 2010 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -27,8 +27,8 @@ #define SHARE_VM_SHARK_SHARKBUILDER_HPP #include "ci/ciType.hpp" -#include "memory/barrierSet.hpp" -#include "memory/cardTableModRefBS.hpp" +#include "gc/shared/barrierSet.hpp" +#include "gc/shared/cardTableModRefBS.hpp" #include "shark/llvmHeaders.hpp" #include "shark/llvmValue.hpp" #include "shark/sharkCodeBuffer.hpp" diff --git a/hotspot/src/share/vm/utilities/debug.cpp b/hotspot/src/share/vm/utilities/debug.cpp index 3a0c9cc6d1a..a44e5a568fe 100644 --- a/hotspot/src/share/vm/utilities/debug.cpp +++ b/hotspot/src/share/vm/utilities/debug.cpp @@ -30,7 +30,7 @@ #include "code/vtableStubs.hpp" #include "compiler/compileBroker.hpp" #include "compiler/disassembler.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" #include "interpreter/bytecodeHistogram.hpp" #include "interpreter/interpreter.hpp" #include "memory/resourceArea.hpp" diff --git a/hotspot/src/share/vm/utilities/ostream.cpp b/hotspot/src/share/vm/utilities/ostream.cpp index 57fe3465136..d53e9313ac5 100644 --- a/hotspot/src/share/vm/utilities/ostream.cpp +++ b/hotspot/src/share/vm/utilities/ostream.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,7 +24,7 @@ #include "precompiled.hpp" #include "compiler/compileLog.hpp" -#include "gc_implementation/shared/gcId.hpp" +#include "gc/shared/gcId.hpp" #include "oops/oop.inline.hpp" #include "runtime/arguments.hpp" #include "runtime/os.hpp" diff --git a/hotspot/src/share/vm/utilities/top.hpp b/hotspot/src/share/vm/utilities/top.hpp index 9fb48d0e045..2d294cc2e20 100644 --- a/hotspot/src/share/vm/utilities/top.hpp +++ b/hotspot/src/share/vm/utilities/top.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,7 +34,7 @@ #include "utilities/ostream.hpp" #include "utilities/sizes.hpp" #if INCLUDE_ALL_GCS -#include "gc_implementation/g1/g1_globals.hpp" +#include "gc/g1/g1_globals.hpp" #endif // INCLUDE_ALL_GCS #ifdef COMPILER1 #include "c1/c1_globals.hpp" diff --git a/hotspot/src/share/vm/utilities/vmError.cpp b/hotspot/src/share/vm/utilities/vmError.cpp index 4eef724f6ec..af190553572 100644 --- a/hotspot/src/share/vm/utilities/vmError.cpp +++ b/hotspot/src/share/vm/utilities/vmError.cpp @@ -26,7 +26,7 @@ #include "precompiled.hpp" #include "code/codeCache.hpp" #include "compiler/compileBroker.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc/shared/collectedHeap.hpp" #include "prims/whitebox.hpp" #include "runtime/arguments.hpp" #include "runtime/atomic.inline.hpp" diff --git a/hotspot/test/TEST.groups b/hotspot/test/TEST.groups index 31ae122778a..91d0b48f017 100644 --- a/hotspot/test/TEST.groups +++ b/hotspot/test/TEST.groups @@ -249,7 +249,7 @@ needs_serialgc = \ gc/arguments/TestMaxNewSize.java \ gc/arguments/TestSerialHeapSizeFlags.java \ gc/arguments/TestUseCompressedOopsErgo.java \ - gc/defnew/HeapChangeLogging.java \ + gc/serial/HeapChangeLogging.java \ gc/metaspace/TestMetaspacePerfCounters.java \ gc/metaspace/TestPerfCountersAndMemoryPools.java \ gc/startup_warnings/TestSerialGC.java @@ -265,7 +265,7 @@ needs_parallelgc = \ gc/arguments/TestUseCompressedOopsErgo.java \ gc/ergonomics/TestDynamicNumberOfGCThreads.java gc/metaspace/TestMetaspacePerfCounters.java \ - gc/parallelScavenge/ \ + gc/parallel/ \ gc/startup_warnings/TestParallelGC.java \ gc/startup_warnings/TestParallelScavengeSerialOld.java @@ -280,7 +280,7 @@ needs_cmsgc = \ gc/arguments/TestParallelGCThreads.java \ gc/arguments/TestUseCompressedOopsErgo.java \ gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java \ - gc/concurrentMarkSweep/ \ + gc/cms/ \ gc/ergonomics/TestDynamicNumberOfGCThreads.java gc/startup_warnings/TestCMS.java \ gc/startup_warnings/TestDefNewCMS.java \ diff --git a/hotspot/test/gc/concurrentMarkSweep/DisableResizePLAB.java b/hotspot/test/gc/cms/DisableResizePLAB.java similarity index 95% rename from hotspot/test/gc/concurrentMarkSweep/DisableResizePLAB.java rename to hotspot/test/gc/cms/DisableResizePLAB.java index be8ac5d958c..b7cad24eae6 100644 --- a/hotspot/test/gc/concurrentMarkSweep/DisableResizePLAB.java +++ b/hotspot/test/gc/cms/DisableResizePLAB.java @@ -1,5 +1,5 @@ /* -* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. +* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it diff --git a/hotspot/test/gc/concurrentMarkSweep/GuardShrinkWarning.java b/hotspot/test/gc/cms/GuardShrinkWarning.java similarity index 100% rename from hotspot/test/gc/concurrentMarkSweep/GuardShrinkWarning.java rename to hotspot/test/gc/cms/GuardShrinkWarning.java diff --git a/hotspot/test/gc/parallelScavenge/AdaptiveGCBoundary.java b/hotspot/test/gc/parallel/AdaptiveGCBoundary.java similarity index 100% rename from hotspot/test/gc/parallelScavenge/AdaptiveGCBoundary.java rename to hotspot/test/gc/parallel/AdaptiveGCBoundary.java diff --git a/hotspot/test/gc/parallelScavenge/TestDynShrinkHeap.java b/hotspot/test/gc/parallel/TestDynShrinkHeap.java similarity index 100% rename from hotspot/test/gc/parallelScavenge/TestDynShrinkHeap.java rename to hotspot/test/gc/parallel/TestDynShrinkHeap.java diff --git a/hotspot/test/gc/defnew/HeapChangeLogging.java b/hotspot/test/gc/serial/HeapChangeLogging.java similarity index 100% rename from hotspot/test/gc/defnew/HeapChangeLogging.java rename to hotspot/test/gc/serial/HeapChangeLogging.java From f05640eb98ce24681234d89f42ea97db07dc95fd Mon Sep 17 00:00:00 2001 From: Bertrand Delsart Date: Mon, 24 Feb 2014 12:49:21 +0100 Subject: [PATCH 02/82] 8035496: G1 ARM: missing remset entry noticed by VerifyAfterGC for vm/gc/concurrent/lp50yp10rp70mr30st0 Release_store used when registering a PerRegionTable. Also reviewed-by: vitalyd@gmail.com Reviewed-by: jmasa, tschatzl, brutisso --- hotspot/src/share/vm/gc/g1/heapRegionRemSet.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/hotspot/src/share/vm/gc/g1/heapRegionRemSet.cpp b/hotspot/src/share/vm/gc/g1/heapRegionRemSet.cpp index 02ac68eee8d..c8625f01435 100644 --- a/hotspot/src/share/vm/gc/g1/heapRegionRemSet.cpp +++ b/hotspot/src/share/vm/gc/g1/heapRegionRemSet.cpp @@ -497,7 +497,15 @@ void OtherRegionsTable::add_reference(OopOrNarrowOopStar from, uint tid) { PerRegionTable* first_prt = _fine_grain_regions[ind]; prt->set_collision_list_next(first_prt); - _fine_grain_regions[ind] = prt; + // The assignment into _fine_grain_regions allows the prt to + // start being used concurrently. In addition to + // collision_list_next which must be visible (else concurrent + // parsing of the list, if any, may fail to see other entries), + // the content of the prt must be visible (else for instance + // some mark bits may not yet seem cleared or a 'later' update + // performed by a concurrent thread could be undone when the + // zeroing becomes visible). This requires store ordering. + OrderAccess::release_store_ptr((volatile PerRegionTable*)&_fine_grain_regions[ind], prt); _n_fine_entries++; if (G1HRRSUseSparseTable) { From ffe4b47d2053e08db86975d9176a68251b184685 Mon Sep 17 00:00:00 2001 From: Jaroslav Bachorik Date: Fri, 3 Apr 2015 15:39:38 +0200 Subject: [PATCH 03/82] 8075926: Add a sun.management.JMXConnectorServer perf counter to track its state Reviewed-by: duke --- .../share/classes/sun/management/Agent.java | 1 + .../sun/management/ConnectorAddressLink.java | 43 +++- .../bootstrap/JvmstatCountersTest.java | 13 +- .../startstop/JMXStatusPerfCountersTest.java | 188 ++++++++++++++++++ .../startstop/ManagementAgentJcmd.java | 36 ++++ 5 files changed, 274 insertions(+), 7 deletions(-) create mode 100644 jdk/test/sun/management/jmxremote/startstop/JMXStatusPerfCountersTest.java diff --git a/jdk/src/java.management/share/classes/sun/management/Agent.java b/jdk/src/java.management/share/classes/sun/management/Agent.java index ffb3105255e..e0b781dc71c 100644 --- a/jdk/src/java.management/share/classes/sun/management/Agent.java +++ b/jdk/src/java.management/share/classes/sun/management/Agent.java @@ -345,6 +345,7 @@ public class Agent { if (jmxServer != null) { ConnectorBootstrap.unexportRegistry(); + ConnectorAddressLink.unexportRemote(); // Attempt to stop already stopped agent // Don't cause any errors. diff --git a/jdk/src/java.management/share/classes/sun/management/ConnectorAddressLink.java b/jdk/src/java.management/share/classes/sun/management/ConnectorAddressLink.java index 893f11c1f46..4ec5ec799cc 100644 --- a/jdk/src/java.management/share/classes/sun/management/ConnectorAddressLink.java +++ b/jdk/src/java.management/share/classes/sun/management/ConnectorAddressLink.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ package sun.management; import java.io.IOException; import java.nio.ByteBuffer; +import java.nio.ByteOrder; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -45,9 +46,26 @@ import sun.management.counter.perf.PerfInstrumentation; * @since 1.5 */ public class ConnectorAddressLink { + /** + * A simple wrapper for the perf-counter backing {@linkplain ByteBuffer} + */ + private static final class PerfHandle { + private ByteBuffer bb; + + private PerfHandle(ByteBuffer bb) { + this.bb = bb.order(ByteOrder.nativeOrder()); + } + + private void putLong(long l) { + this.bb = bb.clear(); + this.bb.asLongBuffer().put(l); + } + } private static final String CONNECTOR_ADDRESS_COUNTER = "sun.management.JMXConnectorServer.address"; + private static final String REMOTE_CONNECTOR_STATE_COUNTER = + "sun.management.JMXConnectorServer.remote.enabled"; /* * The format of the jvmstat counters representing the properties of @@ -78,7 +96,9 @@ public class ConnectorAddressLink { * JMX remote connector counter (it will be incremented every * time a new out-of-the-box JMX remote connector is created). */ - private static AtomicInteger counter = new AtomicInteger(); + private static final AtomicInteger counter = new AtomicInteger(); + + private static PerfHandle remotePerfHandle = null; /** * Exports the specified connector address to the instrumentation buffer @@ -93,7 +113,17 @@ public class ConnectorAddressLink { } Perf perf = Perf.getPerf(); perf.createString( - CONNECTOR_ADDRESS_COUNTER, 1, Units.STRING.intValue(), address); + CONNECTOR_ADDRESS_COUNTER, 1, Units.STRING.intValue(), address); + } + + public static void unexportRemote() { + unexport(remotePerfHandle); + } + + private static void unexport(PerfHandle ph) { + if (ph != null) { + ph.putLong(-1L); + } } /** @@ -143,6 +173,13 @@ public class ConnectorAddressLink { perf.createString(REMOTE_CONNECTOR_COUNTER_PREFIX + index + "." + entry.getKey(), 1, Units.STRING.intValue(), entry.getValue()); } + if (remotePerfHandle != null) { + remotePerfHandle.putLong(index); + } else { + remotePerfHandle = new PerfHandle( + perf.createLong(REMOTE_CONNECTOR_STATE_COUNTER, 1, Units.NONE.intValue(), (long)index) + ); + } } /** diff --git a/jdk/test/sun/management/jmxremote/bootstrap/JvmstatCountersTest.java b/jdk/test/sun/management/jmxremote/bootstrap/JvmstatCountersTest.java index 277edb33e5f..80f74b37ce3 100644 --- a/jdk/test/sun/management/jmxremote/bootstrap/JvmstatCountersTest.java +++ b/jdk/test/sun/management/jmxremote/bootstrap/JvmstatCountersTest.java @@ -116,10 +116,10 @@ public class JvmstatCountersTest { throw new IllegalArgumentException("Test case 3 failed"); } for (String key : remoteData.keySet()) { - if (!key.startsWith("sun.management.JMXConnectorServer.0.")) { + if (!isKeyAcceptable(key)) { System.out.println("Test FAILED! The OOTB management " + "agent shouldn't publish anything which isn't " + - "related to the remote connector."); + "related to the remote connector (" + key + ")."); throw new IllegalArgumentException("Test case 3 failed"); } } @@ -165,10 +165,10 @@ public class JvmstatCountersTest { throw new IllegalArgumentException("Test case 4 failed"); } for (String key : remoteData2.keySet()) { - if (!key.startsWith("sun.management.JMXConnectorServer.0.")) { + if (!isKeyAcceptable(key)) { System.out.println("Test FAILED! The OOTB management " + "agent shouldn't publish anything which isn't " + - "related to the remote connector."); + "related to the remote connector (" + key + ")."); throw new IllegalArgumentException("Test case 4 failed"); } } @@ -184,4 +184,9 @@ public class JvmstatCountersTest { } System.out.println("Bye! Bye!"); } + + private static boolean isKeyAcceptable(String key) { + return key.startsWith("sun.management.JMXConnectorServer.0.") || + key.startsWith("sun.management.JMXConnectorServer.remote.enabled"); + } } diff --git a/jdk/test/sun/management/jmxremote/startstop/JMXStatusPerfCountersTest.java b/jdk/test/sun/management/jmxremote/startstop/JMXStatusPerfCountersTest.java new file mode 100644 index 00000000000..4d1eef69f50 --- /dev/null +++ b/jdk/test/sun/management/jmxremote/startstop/JMXStatusPerfCountersTest.java @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.IOException; +import java.net.BindException; +import java.util.Properties; +import java.util.function.Predicate; +import static org.testng.Assert.*; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import jdk.testlibrary.ProcessTools; + + +/** + * @test + * @bug 8075926 + * @summary Makes sure that the current management agent status is reflected + * in the related performance counters. + * @library /lib/testlibrary + * @build jdk.testlibrary.* PortAllocator TestApp ManagementAgentJcmd + * @run testng/othervm -XX:+UsePerfData JMXStatusPerfCountersTest + */ +public class JMXStatusPerfCountersTest { + private final static String TEST_APP_NAME = "TestApp"; + + private final static String REMOTE_STATUS_KEY = "sun.management.JMXConnectorServer.remote.enabled"; + + private static ProcessBuilder testAppPb; + private Process testApp; + + private ManagementAgentJcmd jcmd; + + @BeforeClass + public static void setupClass() throws Exception { + testAppPb = ProcessTools.createJavaProcessBuilder( + "-XX:+UsePerfData", + "-cp", System.getProperty("test.class.path"), + TEST_APP_NAME + ); + } + + @BeforeTest + public void setup() { + jcmd = new ManagementAgentJcmd(TEST_APP_NAME, false); + } + + @BeforeMethod + public void startTestApp() throws Exception { + testApp = ProcessTools.startProcess( + TEST_APP_NAME, testAppPb, + (Predicate)l->l.trim().equals("main enter") + ); + } + + @AfterMethod + public void stopTestApp() throws Exception { + testApp.getOutputStream().write(1); + testApp.getOutputStream().flush(); + testApp.waitFor(); + testApp = null; + } + + /** + * The 'sun.management.JMXConnectorServer.remote.enabled' counter must not be + * exported if the remote agent is not enabled. + * @throws Exception + */ + @Test + public void testNotInitializedRemote() throws Exception { + assertFalse( + getCounters().containsKey(REMOTE_STATUS_KEY), + "Unexpected occurrence of " + REMOTE_STATUS_KEY + " in perf counters" + ); + } + + /** + * After enabling the remote agent the 'sun.management.JMXConnectorServer.remote.enabled' + * counter will be exported with value of '0' - corresponding to the actual + * version of the associated remote connector perf counters. + * @throws Exception + */ + @Test + public void testRemoteEnabled() throws Exception { + while (true) { + try { + int[] ports = PortAllocator.allocatePorts(1); + jcmd.start( + "jmxremote.port=" + ports[0], + "jmxremote.authenticate=false", + "jmxremote.ssl=false" + ); + String v = getCounters().getProperty(REMOTE_STATUS_KEY); + assertNotNull(v); + assertEquals("0", v); + return; + } catch (BindException e) { + System.out.println("Failed to allocate ports. Retrying ..."); + } + } + } + + /** + * After disabling the remote agent the value of 'sun.management.JMXConnectorServer.remote.enabled' + * counter will become '-1'. + * @throws Exception + */ + @Test + public void testRemoteDisabled() throws Exception { + while (true) { + try { + int[] ports = PortAllocator.allocatePorts(1); + jcmd.start( + "jmxremote.port=" + ports[0], + "jmxremote.authenticate=false", + "jmxremote.ssl=false" + ); + jcmd.stop(); + String v = getCounters().getProperty(REMOTE_STATUS_KEY); + assertNotNull(v); + assertEquals("-1", v); + return; + } catch (BindException e) { + System.out.println("Failed to allocate ports. Retrying ..."); + } + } + } + + /** + * Each subsequent re-enablement of the remote agent must keep the value of + * 'sun.management.JMXConnectorServer.remote.enabled' counter in sync with + * the actual version of the associated remote connector perf counters. + * @throws Exception + */ + @Test + public void testRemoteReEnabled() throws Exception { + while (true) { + try { + int[] ports = PortAllocator.allocatePorts(1); + jcmd.start( + "jmxremote.port=" + ports[0], + "jmxremote.authenticate=false", + "jmxremote.ssl=false" + ); + jcmd.stop(); + jcmd.start( + "jmxremote.port=" + ports[0], + "jmxremote.authenticate=false", + "jmxremote.ssl=false" + ); + + String v = getCounters().getProperty(REMOTE_STATUS_KEY); + assertNotNull(v); + assertEquals("1", v); + return; + } catch (BindException e) { + System.out.println("Failed to allocate ports. Retrying ..."); + } + } + } + + private Properties getCounters() throws IOException, InterruptedException { + return jcmd.perfCounters("sun\\.management\\.JMXConnectorServer\\..*"); + } +} \ No newline at end of file diff --git a/jdk/test/sun/management/jmxremote/startstop/ManagementAgentJcmd.java b/jdk/test/sun/management/jmxremote/startstop/ManagementAgentJcmd.java index efee771cf4a..f273cd2ce4b 100644 --- a/jdk/test/sun/management/jmxremote/startstop/ManagementAgentJcmd.java +++ b/jdk/test/sun/management/jmxremote/startstop/ManagementAgentJcmd.java @@ -25,8 +25,10 @@ import java.net.BindException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Properties; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; +import java.util.regex.Pattern; import java.util.stream.Collectors; import sun.management.Agent; import sun.management.AgentConfigurationError; @@ -43,6 +45,7 @@ final class ManagementAgentJcmd { private static final String CMD_START = "ManagementAgent.start"; private static final String CMD_START_LOCAL = "ManagementAgent.start_local"; private static final String CMD_STATUS = "ManagementAgent.status"; + private static final String CMD_PRINTPERF = "PerfCounter.print"; private final String id; private final boolean verbose; @@ -62,6 +65,39 @@ final class ManagementAgentJcmd { return jcmd(); } + /** + * `jcmd PerfCounter.print` + * @return Returns the available performance counters with their values as + * {@linkplain Properties} instance + * @throws IOException + * @throws InterruptedException + */ + public Properties perfCounters() throws IOException, InterruptedException { + return perfCounters(".*"); + } + + /** + * `jcmd PerfCounter.print | grep {exp}>` + * @param regex Regular expression for including perf counters in the result + * @return Returns the matching performance counters with their values + * as {@linkplain Properties} instance + * @throws IOException + * @throws InterruptedException + */ + public Properties perfCounters(String regex) throws IOException, InterruptedException { + Pattern pat = Pattern.compile(regex); + Properties p = new Properties(); + for(String l : jcmd(CMD_PRINTPERF).split("\\n")) { + String[] kv = l.split("="); + if (kv.length > 1) { + if (pat.matcher(kv[0]).matches()) { + p.setProperty(kv[0], kv[1].replace("\"", "")); + } + } + } + return p; + } + /** * `jcmd ManagementAgent.stop` * @return The JCMD output From 5c859405b5ee573f188f881b697b4c3e636363d1 Mon Sep 17 00:00:00 2001 From: David Holmes Date: Tue, 12 May 2015 20:55:40 -0400 Subject: [PATCH 04/82] 8078470: [Linux] Replace syscall use in os::fork_and_exec with glibc fork() and execve() Reviewed-by: stuefe, dsamersoff, dcubed --- hotspot/src/os/linux/vm/os_linux.cpp | 26 +------ hotspot/src/share/vm/utilities/vmError.cpp | 8 ++- .../runtime/ErrorHandling/TestOnError.java | 66 +++++++++++++++++ .../ErrorHandling/TestOnOutOfMemoryError.java | 70 +++++++++++++++++++ 4 files changed, 144 insertions(+), 26 deletions(-) create mode 100644 hotspot/test/runtime/ErrorHandling/TestOnError.java create mode 100644 hotspot/test/runtime/ErrorHandling/TestOnOutOfMemoryError.java diff --git a/hotspot/src/os/linux/vm/os_linux.cpp b/hotspot/src/os/linux/vm/os_linux.cpp index 6cecb0dd85a..ad8a227b491 100644 --- a/hotspot/src/os/linux/vm/os_linux.cpp +++ b/hotspot/src/os/linux/vm/os_linux.cpp @@ -5878,14 +5878,6 @@ void Parker::unpark() { extern char** environ; -#ifndef __NR_fork - #define __NR_fork IA32_ONLY(2) IA64_ONLY(not defined) AMD64_ONLY(57) AARCH64_ONLY(1079) -#endif - -#ifndef __NR_execve - #define __NR_execve IA32_ONLY(11) IA64_ONLY(1033) AMD64_ONLY(59) AARCH64_ONLY(221) -#endif - // Run the specified command in a separate process. Return its exit value, // or -1 on failure (e.g. can't fork a new process). // Unlike system(), this function can be called from signal handler. It @@ -5893,13 +5885,7 @@ extern char** environ; int os::fork_and_exec(char* cmd) { const char * argv[4] = {"sh", "-c", cmd, NULL}; - // fork() in LinuxThreads/NPTL is not async-safe. It needs to run - // pthread_atfork handlers and reset pthread library. All we need is a - // separate process to execve. Make a direct syscall to fork process. - // On IA64 there's no fork syscall, we have to use fork() and hope for - // the best... - pid_t pid = NOT_IA64(syscall(__NR_fork);) - IA64_ONLY(fork();) + pid_t pid = fork(); if (pid < 0) { // fork failed @@ -5908,15 +5894,7 @@ int os::fork_and_exec(char* cmd) { } else if (pid == 0) { // child process - // execve() in LinuxThreads will call pthread_kill_other_threads_np() - // first to kill every thread on the thread list. Because this list is - // not reset by fork() (see notes above), execve() will instead kill - // every thread in the parent process. We know this is the only thread - // in the new process, so make a system call directly. - // IA64 should use normal execve() from glibc to match the glibc fork() - // above. - NOT_IA64(syscall(__NR_execve, "/bin/sh", argv, environ);) - IA64_ONLY(execve("/bin/sh", (char* const*)argv, environ);) + execve("/bin/sh", (char* const*)argv, environ); // execve failed _exit(-1); diff --git a/hotspot/src/share/vm/utilities/vmError.cpp b/hotspot/src/share/vm/utilities/vmError.cpp index fb8eefff2c4..a587bde383c 100644 --- a/hotspot/src/share/vm/utilities/vmError.cpp +++ b/hotspot/src/share/vm/utilities/vmError.cpp @@ -1062,7 +1062,9 @@ void VMError::report_and_die() { out.print_raw (cmd); out.print_raw_cr("\" ..."); - os::fork_and_exec(cmd); + if (os::fork_and_exec(cmd) < 0) { + out.print_cr("os::fork_and_exec failed: %s (%d)", strerror(errno), errno); + } } // done with OnError @@ -1147,7 +1149,9 @@ void VM_ReportJavaOutOfMemory::doit() { #endif tty->print_cr("\"%s\"...", cmd); - os::fork_and_exec(cmd); + if (os::fork_and_exec(cmd) < 0) { + tty->print_cr("os::fork_and_exec failed: %s (%d)", strerror(errno), errno); + } } } diff --git a/hotspot/test/runtime/ErrorHandling/TestOnError.java b/hotspot/test/runtime/ErrorHandling/TestOnError.java new file mode 100644 index 00000000000..e896f10cff6 --- /dev/null +++ b/hotspot/test/runtime/ErrorHandling/TestOnError.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test TestOnError + * @summary Test using -XX:OnError= + * @library /testlibrary + * @build TestOnError + * @run main TestOnError + * @bug 8078470 + */ + +import jdk.test.lib.*; + +public class TestOnError { + + public static void main(String[] args) throws Exception { + if (!Platform.isDebugBuild()) { + System.out.println("Test requires a non-product build - skipping"); + return; + } + + String msg = "Test Succeeded"; + + // Execute the VM so that a + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( + "-XX:-TransmitErrorReport", + "-XX:ErrorHandlerTest=12", // trigger potential SEGV + "-XX:OnError=echo " + msg, + TestOnError.class.getName()); + + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + + /* Actual output will include: + # + # -XX:OnError="echo Test Succeeded" + # Executing /bin/sh -c "echo Test Succeeded"... + Test Succeeded + + So we don't want to match on the "# Executing ..." line, and they + both get written to stdout. + */ + output.stdoutShouldMatch("^" + msg); // match start of line only + System.out.println("PASSED"); + } +} diff --git a/hotspot/test/runtime/ErrorHandling/TestOnOutOfMemoryError.java b/hotspot/test/runtime/ErrorHandling/TestOnOutOfMemoryError.java new file mode 100644 index 00000000000..775e1bf1d5b --- /dev/null +++ b/hotspot/test/runtime/ErrorHandling/TestOnOutOfMemoryError.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test TestOnOutOfMemoryError + * @summary Test using -XX:OnOutOfMemoryError= + * @library /testlibrary + * @build TestOnOutOfMemoryError + * @run main TestOnOutOfMemoryError + * @bug 8078470 + */ + +import jdk.test.lib.*; + +public class TestOnOutOfMemoryError { + + public static void main(String[] args) throws Exception { + if (args.length == 1) { + // This should guarantee to throw: + // java.lang.OutOfMemoryError: Requested array size exceeds VM limit + Object[] oa = new Object[Integer.MAX_VALUE]; + return; + } + + // else this is the main test + String msg = "Test Succeeded"; + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( + "-XX:OnOutOfMemoryError=echo " + msg, + TestOnOutOfMemoryError.class.getName(), + "throwOOME"); + + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + + /* Actual output should look like this: + # + # java.lang.OutOfMemoryError: Requested array size exceeds VM limit + # -XX:OnOutOfMemoryError="echo Test Succeeded" + # Executing /bin/sh -c "echo Test Succeeded"... + Test Succeeded + Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit + at OOME.main(OOME.java:3) + + So we don't want to match on the "# Executing ..." line, and they + both get written to stdout. + */ + output.shouldContain("Requested array size exceeds VM limit"); + output.stdoutShouldMatch("^" + msg); // match start of line only + System.out.println("PASSED"); + } +} From 07f87406170d5479aa7fa0b9c3b04888426ed5a2 Mon Sep 17 00:00:00 2001 From: Andreas Eriksson Date: Thu, 7 May 2015 15:05:46 +0200 Subject: [PATCH 05/82] 8051045: HotSpot fails to wrap Exceptions from invokedynamic in a BootstrapMethodError Reviewed-by: coleenp, dsimms --- .../src/share/vm/interpreter/linkResolver.cpp | 48 ++++---- .../BootstrapMethodErrorTest.java | 115 ++++++++++++++++++ 2 files changed, 142 insertions(+), 21 deletions(-) create mode 100644 hotspot/test/runtime/invokedynamic/BootstrapMethodErrorTest.java diff --git a/hotspot/src/share/vm/interpreter/linkResolver.cpp b/hotspot/src/share/vm/interpreter/linkResolver.cpp index 49b5a51d026..d16fc576b6b 100644 --- a/hotspot/src/share/vm/interpreter/linkResolver.cpp +++ b/hotspot/src/share/vm/interpreter/linkResolver.cpp @@ -1587,6 +1587,26 @@ void LinkResolver::resolve_handle_call(CallInfo& result, KlassHandle resolved_kl result.set_handle(resolved_method, resolved_appendix, resolved_method_type, CHECK); } +static void wrap_invokedynamic_exception(TRAPS) { + if (HAS_PENDING_EXCEPTION) { + if (TraceMethodHandles) { + tty->print_cr("invokedynamic throws BSME for " INTPTR_FORMAT, p2i((void *)PENDING_EXCEPTION)); + PENDING_EXCEPTION->print(); + } + if (PENDING_EXCEPTION->is_a(SystemDictionary::BootstrapMethodError_klass())) { + // throw these guys, since they are already wrapped + return; + } + if (!PENDING_EXCEPTION->is_a(SystemDictionary::LinkageError_klass())) { + // intercept only LinkageErrors which might have failed to wrap + return; + } + // See the "Linking Exceptions" section for the invokedynamic instruction in the JVMS. + Handle nested_exception(THREAD, PENDING_EXCEPTION); + CLEAR_PENDING_EXCEPTION; + THROW_CAUSE(vmSymbols::java_lang_BootstrapMethodError(), nested_exception) + } +} void LinkResolver::resolve_invokedynamic(CallInfo& result, constantPoolHandle pool, int index, TRAPS) { //resolve_pool(, method_name, method_signature, current_klass, pool, index, CHECK); @@ -1600,7 +1620,8 @@ void LinkResolver::resolve_invokedynamic(CallInfo& result, constantPoolHandle po ConstantPoolCacheEntry* cpce = pool->invokedynamic_cp_cache_entry_at(index); if (cpce->is_f1_null()) { int pool_index = cpce->constant_pool_index(); - oop bsm_info = pool->resolve_bootstrap_specifier_at(pool_index, CHECK); + oop bsm_info = pool->resolve_bootstrap_specifier_at(pool_index, THREAD); + wrap_invokedynamic_exception(CHECK); assert(bsm_info != NULL, ""); // FIXME: Cache this once per BootstrapMethods entry, not once per CONSTANT_InvokeDynamic. bootstrap_specifier = Handle(THREAD, bsm_info); @@ -1609,7 +1630,8 @@ void LinkResolver::resolve_invokedynamic(CallInfo& result, constantPoolHandle po methodHandle method( THREAD, cpce->f1_as_method()); Handle appendix( THREAD, cpce->appendix_if_resolved(pool)); Handle method_type(THREAD, cpce->method_type_if_resolved(pool)); - result.set_handle(method, appendix, method_type, CHECK); + result.set_handle(method, appendix, method_type, THREAD); + wrap_invokedynamic_exception(CHECK); return; } @@ -1640,25 +1662,9 @@ void LinkResolver::resolve_dynamic_call(CallInfo& result, &resolved_appendix, &resolved_method_type, THREAD); - if (HAS_PENDING_EXCEPTION) { - if (TraceMethodHandles) { - tty->print_cr("invokedynamic throws BSME for " INTPTR_FORMAT, p2i((void *)PENDING_EXCEPTION)); - PENDING_EXCEPTION->print(); - } - if (PENDING_EXCEPTION->is_a(SystemDictionary::BootstrapMethodError_klass())) { - // throw these guys, since they are already wrapped - return; - } - if (!PENDING_EXCEPTION->is_a(SystemDictionary::LinkageError_klass())) { - // intercept only LinkageErrors which might have failed to wrap - return; - } - // See the "Linking Exceptions" section for the invokedynamic instruction in the JVMS. - Handle nested_exception(THREAD, PENDING_EXCEPTION); - CLEAR_PENDING_EXCEPTION; - THROW_CAUSE(vmSymbols::java_lang_BootstrapMethodError(), nested_exception) - } - result.set_handle(resolved_method, resolved_appendix, resolved_method_type, CHECK); + wrap_invokedynamic_exception(CHECK); + result.set_handle(resolved_method, resolved_appendix, resolved_method_type, THREAD); + wrap_invokedynamic_exception(CHECK); } //------------------------------------------------------------------------------------------------------------------------ diff --git a/hotspot/test/runtime/invokedynamic/BootstrapMethodErrorTest.java b/hotspot/test/runtime/invokedynamic/BootstrapMethodErrorTest.java new file mode 100644 index 00000000000..5581771852a --- /dev/null +++ b/hotspot/test/runtime/invokedynamic/BootstrapMethodErrorTest.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8051045 + * @summary Test that exceptions from invokedynamic are wrapped in BootstrapMethodError + * @modules java.base/jdk.internal.org.objectweb.asm + * @run main BootstrapMethodErrorTest + */ + +import java.lang.reflect.Method; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import static java.lang.invoke.MethodHandles.*; +import static java.lang.invoke.MethodType.*; + +import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.Handle; +import jdk.internal.org.objectweb.asm.MethodVisitor; +import jdk.internal.org.objectweb.asm.Opcodes; + +public class BootstrapMethodErrorTest extends ClassLoader implements Opcodes { + + @Override + public Class findClass(String name) throws ClassNotFoundException { + byte[] b; + try { + b = loadClassData(name); + } catch (Throwable th) { + throw new ClassNotFoundException("Loading error", th); + } + return defineClass(name, b, 0, b.length); + } + + private byte[] loadClassData(String name) throws Exception { + ClassWriter cw = new ClassWriter(0); + MethodVisitor mv; + + if (name.equals("C")) { + cw.visit(52, ACC_SUPER | ACC_PUBLIC, "C", null, "java/lang/Object", null); + { + mv = cw.visitMethod(ACC_PRIVATE | ACC_STATIC, "m", "()V", null, null); + mv.visitCode(); + mv.visitInsn(RETURN); + mv.visitMaxs(0, 1); + mv.visitEnd(); + } + cw.visitEnd(); + return cw.toByteArray(); + } else if (name.equals("Exec")) { + cw.visit(52, ACC_SUPER | ACC_PUBLIC, "Exec", null, "java/lang/Object", null); + { + mv = cw.visitMethod(ACC_PUBLIC | ACC_STATIC, "invokeRef", "()V", null, null); + mv.visitCode(); + Handle h = new Handle(H_INVOKESTATIC, "C", "m", "()V"); + mv.visitInvokeDynamicInsn("C", "()V", h); + mv.visitInsn(RETURN); + mv.visitMaxs(0, 0); + mv.visitEnd(); + } + cw.visitEnd(); + return cw.toByteArray(); + } + return null; + } + + public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, NoSuchMethodException { + new BootstrapMethodErrorTest().test(); + } + + public void test() throws ClassNotFoundException, IllegalAccessException, NoSuchMethodException { + Class.forName("C", true, this); + Class exec = Class.forName("Exec", true, this); + + try { + exec.getMethod("invokeRef").invoke(null); + } catch (Throwable e) { + Throwable c = e.getCause(); + if (c == null) { + throw new RuntimeException( + "Expected BootstrapMethodError wrapped in an InvocationTargetException but it wasn't wrapped", e); + } else if (c instanceof BootstrapMethodError) { + // Only way to pass test, all else should throw + return; + } else { + throw new RuntimeException( + "Expected BootstrapMethodError but got another Error: " + + c.getClass().getName(), + c); + } + } + throw new RuntimeException("Expected BootstrapMethodError but no Error at all was thrown"); + } +} From 15fffb90d7af3ef665886c0fcc6f777004e91971 Mon Sep 17 00:00:00 2001 From: Jaroslav Bachorik Date: Wed, 13 May 2015 10:17:38 +0200 Subject: [PATCH 06/82] 8046869: Several java/lang/instrument/PremainClass/* tests fail due to timeout Reviewed-by: sla --- .../java/lang/instrument/PremainClass/NoPremainAgentTest.java | 2 +- .../lang/instrument/PremainClass/ZeroArgPremainAgentTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/jdk/test/java/lang/instrument/PremainClass/NoPremainAgentTest.java b/jdk/test/java/lang/instrument/PremainClass/NoPremainAgentTest.java index 29bf5623352..bd64239320a 100644 --- a/jdk/test/java/lang/instrument/PremainClass/NoPremainAgentTest.java +++ b/jdk/test/java/lang/instrument/PremainClass/NoPremainAgentTest.java @@ -33,7 +33,7 @@ import jdk.testlibrary.Utils; * @modules java.management * @run build jdk.testlibrary.* DummyMain * @run shell ../MakeJAR3.sh NoPremainAgent - * @run main NoPremainAgentTest + * @run main/othervm -XX:-CreateCoredumpOnCrash NoPremainAgentTest */ public class NoPremainAgentTest { // Use a javaagent without the premain() function. diff --git a/jdk/test/java/lang/instrument/PremainClass/ZeroArgPremainAgentTest.java b/jdk/test/java/lang/instrument/PremainClass/ZeroArgPremainAgentTest.java index b879aa10f23..66633ea12d3 100644 --- a/jdk/test/java/lang/instrument/PremainClass/ZeroArgPremainAgentTest.java +++ b/jdk/test/java/lang/instrument/PremainClass/ZeroArgPremainAgentTest.java @@ -33,7 +33,7 @@ import jdk.testlibrary.Utils; * @modules java.management * @run build jdk.testlibrary.* DummyMain * @run shell ../MakeJAR3.sh ZeroArgPremainAgent - * @run main ZeroArgPremainAgentTest + * @run main/othervm -XX:-CreateCoredumpOnCrash ZeroArgPremainAgentTest */ public class ZeroArgPremainAgentTest { // Use a javaagent with a zero argument premain() function. From d7f44658949034f81aa01ab16c107be1a27be0ad Mon Sep 17 00:00:00 2001 From: Jaroslav Bachorik Date: Wed, 13 May 2015 10:17:49 +0200 Subject: [PATCH 07/82] 8029098: Exclude javax/management/remote/mandatory/notif/ListenerScaleTest.java from running on fastdebug builds Reviewed-by: sla, sjiang --- .../remote/mandatory/notif/ListenerScaleTest.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/jdk/test/javax/management/remote/mandatory/notif/ListenerScaleTest.java b/jdk/test/javax/management/remote/mandatory/notif/ListenerScaleTest.java index efebce3b365..0d7080e6b7d 100644 --- a/jdk/test/javax/management/remote/mandatory/notif/ListenerScaleTest.java +++ b/jdk/test/javax/management/remote/mandatory/notif/ListenerScaleTest.java @@ -21,12 +21,16 @@ * questions. */ -/* +/** * @test * @bug 6338874 * @summary Check that notification dispatch is not linear in number of MBeans. * @author Eamonn McManus * @modules java.management + * + * @library /lib/testlibrary + * @run build jdk.testlibrary.* ListenerScaleTest + * @run main ListenerScaleTest */ /* @@ -67,6 +71,8 @@ import javax.management.remote.JMXConnectorServer; import javax.management.remote.JMXConnectorServerFactory; import javax.management.remote.JMXServiceURL; +import jdk.testlibrary.Platform; + public class ListenerScaleTest { private static final int WARMUP_WITH_ONE_MBEAN = 1000; private static final int NOTIFS_TO_TIME = 100; @@ -126,6 +132,10 @@ public class ListenerScaleTest { }; public static void main(String[] args) throws Exception { + if (Platform.isDebugBuild()) { + System.out.println("Running on a debug build. Performance test not applicable. Skipping."); + return; + } MBeanServer mbs = MBeanServerFactory.newMBeanServer(); Sender sender = new Sender(); mbs.registerMBean(sender, testObjectName); From 3e2a1f00e54b94ee9ed515881dd772334fb230c5 Mon Sep 17 00:00:00 2001 From: Jaroslav Bachorik Date: Thu, 14 May 2015 11:41:11 +0200 Subject: [PATCH 08/82] 8078143: java/lang/management/ThreadMXBean/AllThreadIds.java fails intermittently Reviewed-by: dholmes, martin --- .../management/ThreadMXBean/AllThreadIds.java | 220 +++++++++++++----- 1 file changed, 160 insertions(+), 60 deletions(-) diff --git a/jdk/test/java/lang/management/ThreadMXBean/AllThreadIds.java b/jdk/test/java/lang/management/ThreadMXBean/AllThreadIds.java index 3ecacae2569..9de573c3851 100644 --- a/jdk/test/java/lang/management/ThreadMXBean/AllThreadIds.java +++ b/jdk/test/java/lang/management/ThreadMXBean/AllThreadIds.java @@ -32,9 +32,30 @@ */ import java.lang.management.*; +import java.time.Instant; import java.util.concurrent.Phaser; +import java.util.function.Supplier; public class AllThreadIds { + /** + * A supplier wrapper for the delayed format printing. + * The supplied value will have to be formatted as $s + * @param The wrapped type + */ + private static final class ArgWrapper { + private final Supplier val; + + public ArgWrapper(Supplier val) { + this.val = val; + } + + @Override + public String toString() { + T resolved = val.get(); + return resolved != null ? resolved.toString() : null; + } + } + final static int DAEMON_THREADS = 20; final static int USER_THREADS = 5; final static int ALL_THREADS = DAEMON_THREADS + USER_THREADS; @@ -47,15 +68,10 @@ public class AllThreadIds { private static long prevTotalThreadCount = 0; private static int prevLiveThreadCount = 0; private static int prevPeakThreadCount = 0; - private static long curTotalThreadCount = 0; - private static int curLiveThreadCount = 0; - private static int curPeakThreadCount = 0; private static final Phaser startupCheck = new Phaser(ALL_THREADS + 1); private static void printThreadList() { - if (!trace) return; - long[] list = mbean.getAllThreadIds(); for (int i = 1; i <= list.length; i++) { System.out.println(i + ": Thread id = " + list[i-1]); @@ -68,59 +84,13 @@ public class AllThreadIds { } } - private static void fail(String msg) { - trace = true; - printThreadList(); - throw new RuntimeException(msg); - } - - private static void checkThreadCount(int numNewThreads, - int numTerminatedThreads) - throws Exception { - prevTotalThreadCount = curTotalThreadCount; - prevLiveThreadCount = curLiveThreadCount; - prevPeakThreadCount = curPeakThreadCount; - curTotalThreadCount = mbean.getTotalStartedThreadCount(); - curLiveThreadCount = mbean.getThreadCount(); - curPeakThreadCount = mbean.getPeakThreadCount(); - - if ((curLiveThreadCount - prevLiveThreadCount) != - (numNewThreads - numTerminatedThreads)) { - fail("Unexpected number of live threads: " + - " Prev live = " + prevLiveThreadCount + - " Current live = " + curLiveThreadCount + - " Threads added = " + numNewThreads + - " Threads terminated = " + numTerminatedThreads); - } - if (curPeakThreadCount - prevPeakThreadCount != numNewThreads) { - fail("Unexpected number of peak threads: " + - " Prev peak = " + prevPeakThreadCount + - " Current peak = " + curPeakThreadCount + - " Threads added = " + numNewThreads); - } - if (curTotalThreadCount - prevTotalThreadCount != numNewThreads) { - fail("Unexpected number of total threads: " + - " Prev Total = " + prevTotalThreadCount + - " Current Total = " + curTotalThreadCount + - " Threads added = " + numNewThreads); - } - long[] list = mbean.getAllThreadIds(); - if (list.length != curLiveThreadCount) { - fail("Array length returned by " + - "getAllThreadIds() = " + list.length + - " not matched count = " + curLiveThreadCount); - } - } - - public static void main(String args[]) throws Exception { - if (args.length > 0 && args[0].equals("trace")) { - trace = true; - } - - curTotalThreadCount = mbean.getTotalStartedThreadCount(); - curLiveThreadCount = mbean.getThreadCount(); - curPeakThreadCount = mbean.getPeakThreadCount(); + private static void checkInitialState() throws Exception { + updateCounters(); checkThreadCount(0, 0); + } + + private static void checkAllThreadsAlive() throws Exception { + updateCounters(); // Start all threads and wait to be sure they all are alive for (int i = 0; i < ALL_THREADS; i++) { @@ -133,8 +103,9 @@ public class AllThreadIds { startupCheck.arriveAndAwaitAdvance(); checkThreadCount(ALL_THREADS, 0); - printThreadList(); - + if (trace) { + printThreadList(); + } // Check mbean now. All threads must appear in getAllThreadIds() list long[] list = mbean.getAllThreadIds(); @@ -165,6 +136,10 @@ public class AllThreadIds { if (trace) { System.out.println(); } + } + + private static void checkDaemonThreadsDead() throws Exception { + updateCounters(); // Stop daemon threads, wait to be sure they all are dead, and check // that they disappeared from getAllThreadIds() list @@ -179,7 +154,7 @@ public class AllThreadIds { checkThreadCount(0, DAEMON_THREADS); // Check mbean now - list = mbean.getAllThreadIds(); + long[] list = mbean.getAllThreadIds(); for (int i = 0; i < ALL_THREADS; i++) { long expectedId = allThreads[i].getId(); @@ -208,6 +183,10 @@ public class AllThreadIds { } } } + } + + private static void checkAllThreadsDead() throws Exception { + updateCounters(); // Stop all threads and wait to be sure they all are dead for (int i = DAEMON_THREADS; i < ALL_THREADS; i++) { @@ -219,6 +198,127 @@ public class AllThreadIds { // and check the thread count checkThreadCount(0, ALL_THREADS - DAEMON_THREADS); + } + + private static void checkThreadCount(int numNewThreads, + int numTerminatedThreads) + throws Exception { + + checkLiveThreads(numNewThreads, numTerminatedThreads); + checkPeakThreads(numNewThreads); + checkTotalThreads(numNewThreads); + checkThreadIds(); + } + + private static void checkLiveThreads(int numNewThreads, + int numTerminatedThreads) + throws InterruptedException { + int diff = numNewThreads - numTerminatedThreads; + + waitTillEquals( + diff + prevLiveThreadCount, + ()->(long)mbean.getThreadCount(), + "Unexpected number of live threads: " + + " Prev live = %1$d Current live = ${provided} Threads added = %2$d" + + " Threads terminated = %3$d", + ()->prevLiveThreadCount, + ()->numNewThreads, + ()->numTerminatedThreads + ); + } + + private static void checkPeakThreads(int numNewThreads) + throws InterruptedException { + + waitTillEquals(numNewThreads + prevPeakThreadCount, + ()->(long)mbean.getPeakThreadCount(), + "Unexpected number of peak threads: " + + " Prev peak = %1$d Current peak = ${provided} Threads added = %2$d", + ()->prevPeakThreadCount, + ()->numNewThreads + ); + } + + private static void checkTotalThreads(int numNewThreads) + throws InterruptedException { + + waitTillEquals(numNewThreads + prevTotalThreadCount, + ()->mbean.getTotalStartedThreadCount(), + "Unexpected number of total threads: " + + " Prev Total = %1$d Current Total = ${provided} Threads added = %2$d", + ()->prevTotalThreadCount, + ()->numNewThreads + ); + } + + private static void checkThreadIds() throws InterruptedException { + long[] list = mbean.getAllThreadIds(); + + waitTillEquals( + list.length, + ()->(long)mbean.getThreadCount(), + "Array length returned by " + + "getAllThreadIds() = %1$d not matched count = ${provided}", + ()->list.length + ); + } + + /** + * Waits till the expectedVal equals to the retrievedVal. + * It will report a status message on the first occasion of the value mismatch + * and then, subsequently, when the retrievedVal value changes. + * @param expectedVal The value to wait for + * @param retrievedVal The supplier of the value to check against the expectedVal + * @param msgFormat The formatted message to be printed in case of mismatch + * @param msgArgs The parameters to the formatted message + * @throws InterruptedException + */ + private static void waitTillEquals(long expectedVal, Supplier retrievedVal, + String msgFormat, Supplier ... msgArgs) + throws InterruptedException { + Object[] args = null; + + long countPrev = -1; + while (true) { + Long count = retrievedVal.get(); + if (count == expectedVal) break; + if (countPrev == -1 || countPrev != count) { + if (args == null) { + args = new Object[msgArgs.length]; + for(int i=0; i < msgArgs.length; i++) { + args[i] = new ArgWrapper<>((Supplier)msgArgs[i]); + } + } + System.err.format("TS: %s\n", Instant.now()); + System.err.format( + msgFormat + .replace("${provided}", String.valueOf(count)) + .replace("$d", "$s"), + args + ).flush(); + printThreadList(); + System.err.println("\nRetrying ...\n"); + } + countPrev = count; + Thread.sleep(1); + } + } + + private static void updateCounters() { + prevTotalThreadCount = mbean.getTotalStartedThreadCount(); + prevLiveThreadCount = mbean.getThreadCount(); + prevPeakThreadCount = mbean.getPeakThreadCount(); + } + + public static void main(String args[]) throws Exception { + if (args.length > 0 && args[0].equals("trace")) { + trace = true; + } + + checkInitialState(); + checkAllThreadsAlive(); + checkDaemonThreadsDead(); + checkAllThreadsDead(); if (testFailed) throw new RuntimeException("TEST FAILED."); From 38c5fd780d5672c0772e50dc4e1dd1628d0510fd Mon Sep 17 00:00:00 2001 From: Stanislav Smirnov Date: Thu, 14 May 2015 10:09:35 -0700 Subject: [PATCH 09/82] 8033445: [TESTBUG] Add test case for calling default methods from JNI Reviewed-by: ctornqvi, dsimms --- hotspot/make/test/JtregNative.gmk | 1 + .../runtime/jni/8033445/DefaultMethods.java | 106 ++++++++++++++++++ .../runtime/jni/8033445/libDefaultMethods.c | 59 ++++++++++ 3 files changed, 166 insertions(+) create mode 100644 hotspot/test/runtime/jni/8033445/DefaultMethods.java create mode 100644 hotspot/test/runtime/jni/8033445/libDefaultMethods.c diff --git a/hotspot/make/test/JtregNative.gmk b/hotspot/make/test/JtregNative.gmk index edff57fc014..d21283359cf 100644 --- a/hotspot/make/test/JtregNative.gmk +++ b/hotspot/make/test/JtregNative.gmk @@ -42,6 +42,7 @@ include TestFilesCompilation.gmk # Add more directories here when needed. BUILD_HOTSPOT_JTREG_NATIVE_SRC := \ $(HOTSPOT_TOPDIR)/test/native_sanity \ + $(HOTSPOT_TOPDIR)/test/runtime/jni/8033445 \ # BUILD_HOTSPOT_JTREG_OUTPUT_DIR := $(BUILD_OUTPUT)/support/test/hotspot/jtreg/native diff --git a/hotspot/test/runtime/jni/8033445/DefaultMethods.java b/hotspot/test/runtime/jni/8033445/DefaultMethods.java new file mode 100644 index 00000000000..69097feed9a --- /dev/null +++ b/hotspot/test/runtime/jni/8033445/DefaultMethods.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @bug 8033445 + * @summary regression tests for 8033445, verify default methods call from JNI + * @run main/native DefaultMethods + */ + +interface A { + + default int getOne() { + return 1; + } +} + +interface B extends A { + +} + +interface C extends B { + + @Override + default int getOne() { + return 2; + } +} + +abstract class Abstract implements C { +} + +class Impl extends Abstract { + + @Override + public int getOne() { + return 3; + } +} + +class Impl2 extends Impl { + + public static final int expectedValue = 4; + + @Override + public int getOne() { + return expectedValue; + } +} + +public class DefaultMethods { + + static { + System.loadLibrary("DefaultMethods"); + } + + static native int callAndVerify(Impl impl, String className, int expectedResult, int implExpectedResult); + + /** + * @param args the command line arguments + */ + public static void main(String[] args) { + Impl2 impl2 = new Impl2(); + if (args.length == 0) { + callAndVerify(impl2, "A", 1, Impl2.expectedValue); + callAndVerify(impl2, "B", 1, Impl2.expectedValue); + callAndVerify(impl2, "C", 2, Impl2.expectedValue); + callAndVerify(impl2, "Abstract", 2, Impl2.expectedValue); + callAndVerify(impl2, "Impl", 3, Impl2.expectedValue); + callAndVerify(impl2, "Impl2", 4, Impl2.expectedValue); + } else { + verifyAndRun(args, impl2, Impl2.expectedValue); + } + } + + //Method to verify input arguments and run a specific test with an expected result provided in the args array + static void verifyAndRun(String[] args, Impl2 impl, int expectedValue) { + if (args.length != 2) { + throw new RuntimeException("invalid number of input arguments"); + } + + String className = args[0]; + int expectedResult = Integer.parseInt(args[1]); + + callAndVerify(impl, className, expectedResult, expectedValue); + } +} diff --git a/hotspot/test/runtime/jni/8033445/libDefaultMethods.c b/hotspot/test/runtime/jni/8033445/libDefaultMethods.c new file mode 100644 index 00000000000..e4c56eb3c98 --- /dev/null +++ b/hotspot/test/runtime/jni/8033445/libDefaultMethods.c @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include + +//Default methods call test +JNIEXPORT void JNICALL +Java_DefaultMethods_callAndVerify(JNIEnv *env, jclass unused, jobject impl, jstring klass_name, jint expected_result, jint impl_expected_result) { + + jmethodID getOne_id = NULL; + jint res = 0; + jclass clazz = NULL; + const char* class_name = NULL; + + class_name = (*env)->GetStringUTFChars(env, klass_name, NULL); + + clazz = (*env)->FindClass(env, class_name); + (*env)->ReleaseStringUTFChars(env, klass_name, class_name); + if (clazz == NULL) { + (*env)->FatalError(env, "could not find class"); + } + + getOne_id = (*env)->GetMethodID(env, clazz, "getOne", "()I"); + if (getOne_id == NULL) { + (*env)->FatalError(env, "could not find method"); + } + + res = (*env)->CallNonvirtualIntMethod(env, impl, clazz, getOne_id); + + if (res != expected_result) { + (*env)->FatalError(env, "wrong return value"); + } + + res = (*env)->CallIntMethod(env, impl, getOne_id); + + if (res != impl_expected_result) { + (*env)->FatalError(env, "wrong return value"); + } +} From 59c57fb87da744dec527ce1295fd83266e449fb6 Mon Sep 17 00:00:00 2001 From: Stanislav Smirnov Date: Thu, 14 May 2015 10:12:51 -0700 Subject: [PATCH 10/82] 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code Reviewed-by: ctornqvi, dsimms --- hotspot/make/test/JtregNative.gmk | 1 + .../jni/8025979/UninitializedStrings.java | 80 ++++++++++++++ .../jni/8025979/libUninitializedStrings.c | 101 ++++++++++++++++++ 3 files changed, 182 insertions(+) create mode 100644 hotspot/test/runtime/jni/8025979/UninitializedStrings.java create mode 100644 hotspot/test/runtime/jni/8025979/libUninitializedStrings.c diff --git a/hotspot/make/test/JtregNative.gmk b/hotspot/make/test/JtregNative.gmk index d21283359cf..e62bc94abe2 100644 --- a/hotspot/make/test/JtregNative.gmk +++ b/hotspot/make/test/JtregNative.gmk @@ -42,6 +42,7 @@ include TestFilesCompilation.gmk # Add more directories here when needed. BUILD_HOTSPOT_JTREG_NATIVE_SRC := \ $(HOTSPOT_TOPDIR)/test/native_sanity \ + $(HOTSPOT_TOPDIR)/test/runtime/jni/8025979 \ $(HOTSPOT_TOPDIR)/test/runtime/jni/8033445 \ # diff --git a/hotspot/test/runtime/jni/8025979/UninitializedStrings.java b/hotspot/test/runtime/jni/8025979/UninitializedStrings.java new file mode 100644 index 00000000000..46aa305c898 --- /dev/null +++ b/hotspot/test/runtime/jni/8025979/UninitializedStrings.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @bug 8025979 + * @summary + * regression tests for 8025922, verify uninitialized strings reference. + * Affects: + * GetStringLength + * GetStringChars + * GetStringUTFLength + * GetStringUTFChars + * @run main/native UninitializedStrings all + */ + +public class UninitializedStrings { + + static { + System.loadLibrary("UninitializedStrings"); + } + + native static void lengthTest(); + + native static void charsTest(); + + native static void utfLengthTest(); + + native static void utfCharsTest(); + + /** + * @param args the command line arguments + * @throws java.lang.Exception + */ + public static void main(String[] args) throws Exception { + if (args.length != 1) { + throw new RuntimeException("invalid number of input arguments"); + } + + switch (args[0]) { + case "length": + lengthTest(); + break; + case "chars": + charsTest(); + break; + case "utf_length": + utfLengthTest(); + break; + case "utf_chars": + utfCharsTest(); + break; + default: + lengthTest(); + charsTest(); + utfLengthTest(); + utfCharsTest(); + break; + } + } +} diff --git a/hotspot/test/runtime/jni/8025979/libUninitializedStrings.c b/hotspot/test/runtime/jni/8025979/libUninitializedStrings.c new file mode 100644 index 00000000000..cc7bec46b26 --- /dev/null +++ b/hotspot/test/runtime/jni/8025979/libUninitializedStrings.c @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include "jni.h" + +//Method to verify expression and throw java/lang/Exception if it is FALSE +void Assert(JNIEnv *jni_env, jint expr, const char* message) { + if(expr == 0){ //if expr is false + (*jni_env)->FatalError(jni_env, message); + } +} + +//Method to allocate a java/lang/String object and return jstring as a result +jstring AllocateString(JNIEnv *jni_env) { + jclass classString = NULL; + jstring allocatedString = NULL; + classString = (*jni_env)->FindClass(jni_env, "java/lang/String"); + //NULL check + Assert(jni_env, (classString != NULL), "class String not found"); + //allocate object of type java/lang/String + allocatedString = (jstring) (*jni_env)->AllocObject(jni_env, classString); + //NULL check + Assert(jni_env, (allocatedString != NULL), "allocated string is NULL"); + return allocatedString; +} + +//GetStringLength test +JNIEXPORT void JNICALL Java_UninitializedStrings_lengthTest +(JNIEnv *jni_env, jclass cl) { + jint stringLength = 0; + jstring allocatedString = NULL; + //allocate object of type java/lang/String + allocatedString = AllocateString(jni_env); + + stringLength = (*jni_env)->GetStringLength(jni_env, allocatedString); + Assert(jni_env, (stringLength == 0), "string length must be 0"); +} + +//GetStringChars test +JNIEXPORT void JNICALL Java_UninitializedStrings_charsTest +(JNIEnv *jni_env, jclass cl) { + jint compareRes = 0; + const jchar* stringChars = NULL; + jstring allocatedString = NULL; + //allocate object of type java/lang/String + allocatedString = AllocateString(jni_env); + + stringChars = (*jni_env)->GetStringChars(jni_env, allocatedString, NULL); + compareRes = (stringChars == NULL); + //release stringChars pointer + (*jni_env)->ReleaseStringChars(jni_env, allocatedString, stringChars); + Assert(jni_env, compareRes, "string chars must be NULL"); +} + +//GetStringUTFLength test +JNIEXPORT void JNICALL Java_UninitializedStrings_utfLengthTest +(JNIEnv *jni_env, jclass cl) { + jint stringLength = 0; + jstring allocatedString = NULL; + //allocate object of type java/lang/String + allocatedString = AllocateString(jni_env); + + stringLength = (*jni_env)->GetStringUTFLength(jni_env, allocatedString); + Assert(jni_env, (stringLength == 0), "string utf length must be 0"); +} + +//GetStringUTFChars test +JNIEXPORT void JNICALL Java_UninitializedStrings_utfCharsTest +(JNIEnv *jni_env, jclass cl) { + jint compareRes = 0; + const char* stringUtfChars = NULL; + jstring allocatedString = NULL; + //allocate object of type java/lang/String + allocatedString = AllocateString(jni_env); + + stringUtfChars = (*jni_env)->GetStringUTFChars(jni_env, allocatedString, NULL); + compareRes = (stringUtfChars == NULL); + //release stringUtfChars pointer + (*jni_env)->ReleaseStringUTFChars(jni_env, allocatedString, stringUtfChars); + Assert(jni_env, compareRes, "string utf chars must be NULL"); +} From 813f34059b3bbf1a66b961eb8f75961461324787 Mon Sep 17 00:00:00 2001 From: Max Ockner Date: Thu, 14 May 2015 14:03:58 -0400 Subject: [PATCH 11/82] 6811960: x86 biasedlocking epoch expired rare bug It is now guaranteed that biased_locking_enter will be passed a valid tmp_reg. Reviewed-by: coleenp, dcubed, kvn --- hotspot/src/cpu/x86/vm/interp_masm_x86.cpp | 7 ++-- hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp | 41 +------------------ 2 files changed, 6 insertions(+), 42 deletions(-) diff --git a/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp b/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp index e9e238001aa..80995b130f9 100644 --- a/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp +++ b/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp @@ -1035,8 +1035,7 @@ void InterpreterMacroAssembler::get_method_counters(Register method, // rdx, c_rarg1: BasicObjectLock to be used for locking // // Kills: -// rax -// rscratch1 (scratch regs) +// rax, rbx void InterpreterMacroAssembler::lock_object(Register lock_reg) { assert(lock_reg == LP64_ONLY(c_rarg1) NOT_LP64(rdx), "The argument is only for looks. It must be c_rarg1"); @@ -1049,6 +1048,8 @@ void InterpreterMacroAssembler::lock_object(Register lock_reg) { Label done; const Register swap_reg = rax; // Must use rax for cmpxchg instruction + const Register tmp_reg = rbx; // Will be passed to biased_locking_enter to avoid a + // problematic case where tmp_reg = no_reg. const Register obj_reg = LP64_ONLY(c_rarg3) NOT_LP64(rcx); // Will contain the oop const int obj_offset = BasicObjectLock::obj_offset_in_bytes(); @@ -1062,7 +1063,7 @@ void InterpreterMacroAssembler::lock_object(Register lock_reg) { movptr(obj_reg, Address(lock_reg, obj_offset)); if (UseBiasedLocking) { - biased_locking_enter(lock_reg, obj_reg, swap_reg, rscratch1, false, done, &slow_case); + biased_locking_enter(lock_reg, obj_reg, swap_reg, tmp_reg, false, done, &slow_case); } // Load immediate 1 into swap_reg %rax diff --git a/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp b/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp index ec36f2beaaf..059aadb2618 100644 --- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp +++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp @@ -1069,15 +1069,8 @@ int MacroAssembler::biased_locking_enter(Register lock_reg, BiasedLockingCounters* counters) { assert(UseBiasedLocking, "why call this otherwise?"); assert(swap_reg == rax, "swap_reg must be rax for cmpxchgq"); - LP64_ONLY( assert(tmp_reg != noreg, "tmp_reg must be supplied"); ) - bool need_tmp_reg = false; - if (tmp_reg == noreg) { - need_tmp_reg = true; - tmp_reg = lock_reg; - assert_different_registers(lock_reg, obj_reg, swap_reg); - } else { - assert_different_registers(lock_reg, obj_reg, swap_reg, tmp_reg); - } + assert(tmp_reg != noreg, "tmp_reg must be supplied"); + assert_different_registers(lock_reg, obj_reg, swap_reg, tmp_reg); assert(markOopDesc::age_shift == markOopDesc::lock_bits + markOopDesc::biased_lock_bits, "biased locking makes assumptions about bit layout"); Address mark_addr (obj_reg, oopDesc::mark_offset_in_bytes()); Address saved_mark_addr(lock_reg, 0); @@ -1097,15 +1090,9 @@ int MacroAssembler::biased_locking_enter(Register lock_reg, null_check_offset = offset(); movptr(swap_reg, mark_addr); } - if (need_tmp_reg) { - push(tmp_reg); - } movptr(tmp_reg, swap_reg); andptr(tmp_reg, markOopDesc::biased_lock_mask_in_place); cmpptr(tmp_reg, markOopDesc::biased_lock_pattern); - if (need_tmp_reg) { - pop(tmp_reg); - } jcc(Assembler::notEqual, cas_label); // The bias pattern is present in the object's header. Need to check // whether the bias owner and the epoch are both still current. @@ -1117,9 +1104,6 @@ int MacroAssembler::biased_locking_enter(Register lock_reg, // simpler. movptr(saved_mark_addr, swap_reg); #endif - if (need_tmp_reg) { - push(tmp_reg); - } if (swap_reg_contains_mark) { null_check_offset = offset(); } @@ -1135,9 +1119,6 @@ int MacroAssembler::biased_locking_enter(Register lock_reg, Register header_reg = swap_reg; #endif andptr(header_reg, ~((int) markOopDesc::age_mask_in_place)); - if (need_tmp_reg) { - pop(tmp_reg); - } if (counters != NULL) { cond_inc32(Assembler::zero, ExternalAddress((address) counters->biased_lock_entry_count_addr())); @@ -1180,9 +1161,6 @@ int MacroAssembler::biased_locking_enter(Register lock_reg, NOT_LP64( movptr(swap_reg, saved_mark_addr); ) andptr(swap_reg, markOopDesc::biased_lock_mask_in_place | markOopDesc::age_mask_in_place | markOopDesc::epoch_mask_in_place); - if (need_tmp_reg) { - push(tmp_reg); - } #ifdef _LP64 movptr(tmp_reg, swap_reg); orptr(tmp_reg, r15_thread); @@ -1194,9 +1172,6 @@ int MacroAssembler::biased_locking_enter(Register lock_reg, lock(); } cmpxchgptr(tmp_reg, mark_addr); // compare tmp_reg and swap_reg - if (need_tmp_reg) { - pop(tmp_reg); - } // If the biasing toward our thread failed, this means that // another thread succeeded in biasing it toward itself and we // need to revoke that bias. The revocation will occur in the @@ -1220,9 +1195,6 @@ int MacroAssembler::biased_locking_enter(Register lock_reg, // // FIXME: due to a lack of registers we currently blow away the age // bits in this situation. Should attempt to preserve them. - if (need_tmp_reg) { - push(tmp_reg); - } load_prototype_header(tmp_reg, obj_reg); #ifdef _LP64 orptr(tmp_reg, r15_thread); @@ -1235,9 +1207,6 @@ int MacroAssembler::biased_locking_enter(Register lock_reg, lock(); } cmpxchgptr(tmp_reg, mark_addr); // compare tmp_reg and swap_reg - if (need_tmp_reg) { - pop(tmp_reg); - } // If the biasing toward our thread failed, then another thread // succeeded in biasing it toward itself and we need to revoke that // bias. The revocation will occur in the runtime in the slow case. @@ -1263,17 +1232,11 @@ int MacroAssembler::biased_locking_enter(Register lock_reg, // FIXME: due to a lack of registers we currently blow away the age // bits in this situation. Should attempt to preserve them. NOT_LP64( movptr(swap_reg, saved_mark_addr); ) - if (need_tmp_reg) { - push(tmp_reg); - } load_prototype_header(tmp_reg, obj_reg); if (os::is_MP()) { lock(); } cmpxchgptr(tmp_reg, mark_addr); // compare tmp_reg and swap_reg - if (need_tmp_reg) { - pop(tmp_reg); - } // Fall through to the normal CAS-based lock, because no matter what // the result of the above CAS, some thread must have succeeded in // removing the bias bit from the object's header. From ab4ba3b40feed74049d7ceda9c4d26c1a2371be9 Mon Sep 17 00:00:00 2001 From: Kim Barrett Date: Thu, 14 May 2015 15:17:36 -0400 Subject: [PATCH 12/82] 8058265: No callers of ReferenceProcessor::clear_discovered_references Removed unused or unneeded code. Reviewed-by: brutisso, jmasa --- .../share/vm/gc/shared/referenceProcessor.cpp | 26 +------------------ .../share/vm/gc/shared/referenceProcessor.hpp | 5 ---- 2 files changed, 1 insertion(+), 30 deletions(-) diff --git a/hotspot/src/share/vm/gc/shared/referenceProcessor.cpp b/hotspot/src/share/vm/gc/shared/referenceProcessor.cpp index d9a68282e9d..bd91e1b7559 100644 --- a/hotspot/src/share/vm/gc/shared/referenceProcessor.cpp +++ b/hotspot/src/share/vm/gc/shared/referenceProcessor.cpp @@ -189,7 +189,6 @@ ReferenceProcessorStats ReferenceProcessor::process_discovered_references( AbstractRefProcTaskExecutor* task_executor, GCTimer* gc_timer, GCId gc_id) { - NOT_PRODUCT(verify_ok_to_handle_reflists()); assert(!enqueuing_is_done(), "If here enqueuing should not be complete"); // Stop treating discovered references specially. @@ -329,7 +328,6 @@ bool enqueue_discovered_ref_helper(ReferenceProcessor* ref, } bool ReferenceProcessor::enqueue_discovered_references(AbstractRefProcTaskExecutor* task_executor) { - NOT_PRODUCT(verify_ok_to_handle_reflists()); if (UseCompressedOops) { return enqueue_discovered_ref_helper(this, task_executor); } else { @@ -651,18 +649,13 @@ ReferenceProcessor::clear_discovered_references(DiscoveredList& refs_list) { refs_list.set_length(0); } -void -ReferenceProcessor::abandon_partial_discovered_list(DiscoveredList& refs_list) { - clear_discovered_references(refs_list); -} - void ReferenceProcessor::abandon_partial_discovery() { // loop over the lists for (uint i = 0; i < _max_num_q * number_of_subclasses_of_ref(); i++) { if (TraceReferenceGC && PrintGCDetails && ((i % _max_num_q) == 0)) { gclog_or_tty->print_cr("\nAbandoning %s discovered list", list_name(i)); } - abandon_partial_discovered_list(_discovered_refs[i]); + clear_discovered_references(_discovered_refs[i]); } } @@ -1160,8 +1153,6 @@ void ReferenceProcessor::preclean_discovered_references( GCTimer* gc_timer, GCId gc_id) { - NOT_PRODUCT(verify_ok_to_handle_reflists()); - // Soft references { GCTraceTime tt("Preclean SoftReferences", PrintGCDetails && PrintReferenceGC, @@ -1297,18 +1288,3 @@ const char* ReferenceProcessor::list_name(uint i) { return NULL; } -#ifndef PRODUCT -void ReferenceProcessor::verify_ok_to_handle_reflists() { - // empty for now -} -#endif - -#ifndef PRODUCT -void ReferenceProcessor::clear_discovered_references() { - guarantee(!_discovering_refs, "Discovering refs?"); - for (uint i = 0; i < _max_num_q * number_of_subclasses_of_ref(); i++) { - clear_discovered_references(_discovered_refs[i]); - } -} - -#endif // PRODUCT diff --git a/hotspot/src/share/vm/gc/shared/referenceProcessor.hpp b/hotspot/src/share/vm/gc/shared/referenceProcessor.hpp index 1a8c805e233..add86a1e928 100644 --- a/hotspot/src/share/vm/gc/shared/referenceProcessor.hpp +++ b/hotspot/src/share/vm/gc/shared/referenceProcessor.hpp @@ -361,10 +361,8 @@ class ReferenceProcessor : public CHeapObj { DiscoveredList* get_discovered_list(ReferenceType rt); inline void add_to_discovered_list_mt(DiscoveredList& refs_list, oop obj, HeapWord* discovered_addr); - void verify_ok_to_handle_reflists() PRODUCT_RETURN; void clear_discovered_references(DiscoveredList& refs_list); - void abandon_partial_discovered_list(DiscoveredList& refs_list); // Calculate the number of jni handles. unsigned int count_jni_refs(); @@ -457,9 +455,6 @@ class ReferenceProcessor : public CHeapObj { // debugging void verify_no_references_recorded() PRODUCT_RETURN; void verify_referent(oop obj) PRODUCT_RETURN; - - // clear the discovered lists (unlinking each entry). - void clear_discovered_references() PRODUCT_RETURN; }; // A utility class to disable reference discovery in From 48b40a26110fbb8aeab5873c70a4507aaa1073e9 Mon Sep 17 00:00:00 2001 From: Jungwoo Ha Date: Fri, 15 May 2015 15:40:58 -0700 Subject: [PATCH 13/82] 8079216: Remove undefined method oopDesc::is_null(Klass *) Reviewed-by: kbarrett, coleenp, stefank --- hotspot/src/share/vm/oops/oop.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/hotspot/src/share/vm/oops/oop.hpp b/hotspot/src/share/vm/oops/oop.hpp index da6e7e70a15..6186a0a0331 100644 --- a/hotspot/src/share/vm/oops/oop.hpp +++ b/hotspot/src/share/vm/oops/oop.hpp @@ -149,7 +149,6 @@ class oopDesc { static bool is_null(oop obj); static bool is_null(narrowOop obj); - static bool is_null(Klass* obj); // Decode an oop pointer from a narrowOop if compressed. // These are overloaded for oop and narrowOop as are the other functions From 49ab7a3900abec6d98b3536fd0928b574147e3ed Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Fri, 15 May 2015 18:12:21 -0700 Subject: [PATCH 14/82] 8080483: Incorrect test execution string at SumRed_Long.java Reviewed-by: iveresov --- hotspot/test/compiler/loopopts/superword/SumRed_Long.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hotspot/test/compiler/loopopts/superword/SumRed_Long.java b/hotspot/test/compiler/loopopts/superword/SumRed_Long.java index 1f504a8ef52..c11b6275f1c 100644 --- a/hotspot/test/compiler/loopopts/superword/SumRed_Long.java +++ b/hotspot/test/compiler/loopopts/superword/SumRed_Long.java @@ -27,11 +27,11 @@ * @bug 8076276 * @summary Add C2 x86 Superword support for scalar sum reduction optimizations : long test * - * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+SuperWordReductions -XX:LoopUnrollLimit=250 -XX:LoopMaxUnroll=4 -XX:CompileThresholdScaling=0.1 SumRed_Double - * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-SuperWordReductions -XX:LoopUnrollLimit=250 -XX:LoopMaxUnroll=4 -XX:CompileThresholdScaling=0.1 SumRed_Double + * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+SuperWordReductions -XX:LoopUnrollLimit=250 -XX:LoopMaxUnroll=4 -XX:CompileThresholdScaling=0.1 SumRed_Long + * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-SuperWordReductions -XX:LoopUnrollLimit=250 -XX:LoopMaxUnroll=4 -XX:CompileThresholdScaling=0.1 SumRed_Long * - * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+SuperWordReductions -XX:LoopUnrollLimit=250 -XX:LoopMaxUnroll=8 -XX:CompileThresholdScaling=0.1 SumRed_Double - * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-SuperWordReductions -XX:LoopUnrollLimit=250 -XX:LoopMaxUnroll=8 -XX:CompileThresholdScaling=0.1 SumRed_Double + * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+SuperWordReductions -XX:LoopUnrollLimit=250 -XX:LoopMaxUnroll=8 -XX:CompileThresholdScaling=0.1 SumRed_Long + * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-SuperWordReductions -XX:LoopUnrollLimit=250 -XX:LoopMaxUnroll=8 -XX:CompileThresholdScaling=0.1 SumRed_Long * */ From f5c1e4d57635b17962ed4a66512c83d41f0d2483 Mon Sep 17 00:00:00 2001 From: Zoltan Majo Date: Mon, 18 May 2015 19:54:49 +0200 Subject: [PATCH 15/82] 8080281: 8068945 changes break building the zero JVM variant Define the PreserveFramePointer flag also in globals_zero.hpp Reviewed-by: simonis, kvn, sgehwolf --- hotspot/src/cpu/zero/vm/globals_zero.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hotspot/src/cpu/zero/vm/globals_zero.hpp b/hotspot/src/cpu/zero/vm/globals_zero.hpp index 9e2020ea159..1f7a4f87114 100644 --- a/hotspot/src/cpu/zero/vm/globals_zero.hpp +++ b/hotspot/src/cpu/zero/vm/globals_zero.hpp @@ -61,6 +61,8 @@ define_pd_global(size_t, CMSYoungGenPerWorker, 16*M); // default max size of CM define_pd_global(uintx, TypeProfileLevel, 0); +define_pd_global(bool, PreserveFramePointer, false); + #define ARCH_FLAGS(develop, product, diagnostic, experimental, notproduct) \ product(bool, UseFastEmptyMethods, true, \ "Use fast method entry code for empty methods") \ From 99f80917827f0dba5365786d586166a1d7725f04 Mon Sep 17 00:00:00 2001 From: Serguei Spitsyn Date: Mon, 18 May 2015 16:42:46 -0700 Subject: [PATCH 16/82] 8079644: memory stomping error with ResourceManagement and TestAgentStress.java The cached class file structure must be deallocated instead of the cached class file bytes Reviewed-by: coleenp, sla --- hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp index 5460707b853..3b2717c9c69 100644 --- a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp +++ b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp @@ -3993,8 +3993,8 @@ void VM_RedefineClasses::redefine_single_class(jclass the_jclass, the_class->get_cached_class_file_bytes()) { // The same class can be present twice in the scratch classes list or there // are multiple concurrent RetransformClasses calls on different threads. - // In such cases we have to deallocate scratch_class cached_class_file_bytes. - os::free(scratch_class->get_cached_class_file_bytes()); + // In such cases we have to deallocate scratch_class cached_class_file. + os::free(scratch_class->get_cached_class_file()); } // NULL out in scratch class to not delete twice. The class to be redefined From c0fcbe951e6cdf49536e15c3a13ba4e01d550c56 Mon Sep 17 00:00:00 2001 From: Jungwoo Ha Date: Tue, 19 May 2015 01:34:53 -0400 Subject: [PATCH 17/82] 8075288: malloc without free in VM_PopulateDumpSharedSpace::doit() Reviewed-by: dholmes, stuefe --- hotspot/src/share/vm/memory/metaspaceShared.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/hotspot/src/share/vm/memory/metaspaceShared.cpp b/hotspot/src/share/vm/memory/metaspaceShared.cpp index 613907d8420..db1a380535c 100644 --- a/hotspot/src/share/vm/memory/metaspaceShared.cpp +++ b/hotspot/src/share/vm/memory/metaspaceShared.cpp @@ -649,6 +649,7 @@ void VM_PopulateDumpSharedSpace::doit() { mapinfo->close(); memmove(vtbl_list, saved_vtbl, vtbl_list_size * sizeof(void*)); + os::free(saved_vtbl); if (PrintSharedSpaces) { DumpAllocClosure dac; From 40acb10f774dac05e04a6c4c7eef799d2b3628a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20Lid=C3=A9n?= Date: Tue, 19 May 2015 09:41:52 +0200 Subject: [PATCH 18/82] 8080581: Align SA with new GC directory structure Reviewed-by: dsamersoff, sla --- .../{memory => gc/cms}/AdaptiveFreeList.java | 4 +-- .../hotspot/{memory => gc/cms}/CMSBitMap.java | 5 ++-- .../{memory => gc/cms}/CMSCollector.java | 4 +-- .../cms}/CompactibleFreeListSpace.java | 29 +++++++------------ .../cms}/ConcurrentMarkSweepGeneration.java | 5 ++-- .../{memory => gc/cms}/LinearAllocBlock.java | 4 +-- .../{memory => gc/cms}/ParNewGeneration.java | 6 ++-- .../jvm/hotspot/gc/g1/G1CollectedHeap.java | 2 +- .../sun/jvm/hotspot/gc/g1/HeapRegion.java | 2 +- .../{shared => parallel}/ImmutableSpace.java | 2 +- .../gc/{shared => parallel}/MutableSpace.java | 2 +- .../sun/jvm/hotspot/gc/parallel/PSOldGen.java | 1 - .../jvm/hotspot/gc/parallel/PSYoungGen.java | 1 - .../serial}/DefNewGeneration.java | 5 ++-- .../serial}/TenuredGeneration.java | 5 ++-- .../{memory => gc/shared}/CardGeneration.java | 4 +-- .../shared}/CompactibleSpace.java | 4 +-- .../shared}/ContiguousSpace.java | 5 ++-- .../shared}/GenCollectedHeap.java | 3 +- .../{memory => gc/shared}/Generation.java | 7 +++-- .../shared}/GenerationFactory.java | 6 ++-- .../shared}/GenerationIsInClosure.java | 4 +-- .../{memory => gc/shared}/GenerationSpec.java | 4 +-- .../shared}/OffsetTableContigSpace.java | 4 +-- .../hotspot/{memory => gc/shared}/Space.java | 7 +++-- .../{memory => gc/shared}/SpaceClosure.java | 4 +-- .../{memory => gc/shared}/TenuredSpace.java | 4 +-- .../sun/jvm/hotspot/oops/ObjectHeap.java | 1 + .../sun/jvm/hotspot/tools/HeapSummary.java | 4 +-- 29 files changed, 70 insertions(+), 68 deletions(-) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/cms}/AdaptiveFreeList.java (95%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/cms}/CMSBitMap.java (96%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/cms}/CMSCollector.java (96%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/cms}/CompactibleFreeListSpace.java (91%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/cms}/ConcurrentMarkSweepGeneration.java (94%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/cms}/LinearAllocBlock.java (95%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/cms}/ParNewGeneration.java (86%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/{shared => parallel}/ImmutableSpace.java (98%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/{shared => parallel}/MutableSpace.java (98%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/serial}/DefNewGeneration.java (96%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/serial}/TenuredGeneration.java (95%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/shared}/CardGeneration.java (92%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/shared}/CompactibleSpace.java (94%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/shared}/ContiguousSpace.java (95%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/shared}/GenCollectedHeap.java (98%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/shared}/Generation.java (98%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/shared}/GenerationFactory.java (94%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/shared}/GenerationIsInClosure.java (92%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/shared}/GenerationSpec.java (95%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/shared}/OffsetTableContigSpace.java (91%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/shared}/Space.java (96%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/shared}/SpaceClosure.java (90%) rename hotspot/agent/src/share/classes/sun/jvm/hotspot/{memory => gc/shared}/TenuredSpace.java (91%) diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/AdaptiveFreeList.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/AdaptiveFreeList.java similarity index 95% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/AdaptiveFreeList.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/AdaptiveFreeList.java index 19dca2610ce..3e9a518b074 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/AdaptiveFreeList.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/AdaptiveFreeList.java @@ -1,7 +1,7 @@ /* * @(#)AdaptiveFreeList.java * - * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,7 +24,7 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.cms; import java.util.Observable; import java.util.Observer; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CMSBitMap.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/CMSBitMap.java similarity index 96% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CMSBitMap.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/CMSBitMap.java index cdbfd3cfda9..feaac965aaa 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CMSBitMap.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/CMSBitMap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,12 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.cms; import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; import sun.jvm.hotspot.utilities.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CMSCollector.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/CMSCollector.java similarity index 96% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CMSCollector.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/CMSCollector.java index 28205ae0b03..1ffcf405f6e 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CMSCollector.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/CMSCollector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.cms; import java.io.*; import java.util.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/CompactibleFreeListSpace.java similarity index 91% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/CompactibleFreeListSpace.java index ed26af725e0..86b2d520516 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/CompactibleFreeListSpace.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,25 +22,18 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.cms; -import java.io.PrintStream; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Observable; -import java.util.Observer; +import java.io.*; +import java.util.*; -import sun.jvm.hotspot.debugger.Address; -import sun.jvm.hotspot.debugger.Debugger; -import sun.jvm.hotspot.oops.ObjectHeap; -import sun.jvm.hotspot.oops.Oop; -import sun.jvm.hotspot.runtime.VM; -import sun.jvm.hotspot.runtime.VMObjectFactory; -import sun.jvm.hotspot.types.AddressField; -import sun.jvm.hotspot.types.Type; -import sun.jvm.hotspot.types.TypeDataBase; -import sun.jvm.hotspot.utilities.Assert; +import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.gc.shared.*; +import sun.jvm.hotspot.memory.*; +import sun.jvm.hotspot.oops.*; +import sun.jvm.hotspot.runtime.*; +import sun.jvm.hotspot.types.*; +import sun.jvm.hotspot.utilities.*; public class CompactibleFreeListSpace extends CompactibleSpace { private static AddressField collectorField; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/ConcurrentMarkSweepGeneration.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/ConcurrentMarkSweepGeneration.java similarity index 94% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/ConcurrentMarkSweepGeneration.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/ConcurrentMarkSweepGeneration.java index a9eaa9fc55d..86b1caad447 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/ConcurrentMarkSweepGeneration.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/ConcurrentMarkSweepGeneration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,12 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.cms; import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/LinearAllocBlock.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/LinearAllocBlock.java similarity index 95% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/LinearAllocBlock.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/LinearAllocBlock.java index e51c2834ea9..e8af2723727 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/LinearAllocBlock.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/LinearAllocBlock.java @@ -1,6 +1,6 @@ /* * @(#)BinaryTreeDictionary.java - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.cms; import java.util.*; import sun.jvm.hotspot.debugger.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/ParNewGeneration.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/ParNewGeneration.java similarity index 86% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/ParNewGeneration.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/ParNewGeneration.java index 04721a0e6b8..eefe84a9d84 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/ParNewGeneration.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/cms/ParNewGeneration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,9 +22,11 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.cms; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.gc.serial.*; +import sun.jvm.hotspot.gc.shared.*; public class ParNewGeneration extends DefNewGeneration { public ParNewGeneration(Address addr) { diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/G1CollectedHeap.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/G1CollectedHeap.java index 516fcf96f79..0197f90a558 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/G1CollectedHeap.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/G1CollectedHeap.java @@ -31,8 +31,8 @@ import java.util.Observer; import sun.jvm.hotspot.debugger.Address; import sun.jvm.hotspot.gc.shared.CollectedHeap; import sun.jvm.hotspot.gc.shared.CollectedHeapName; +import sun.jvm.hotspot.gc.shared.SpaceClosure; import sun.jvm.hotspot.memory.MemRegion; -import sun.jvm.hotspot.memory.SpaceClosure; import sun.jvm.hotspot.runtime.VM; import sun.jvm.hotspot.runtime.VMObjectFactory; import sun.jvm.hotspot.types.AddressField; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/HeapRegion.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/HeapRegion.java index 42e6f8c46ec..61b2bb1aec5 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/HeapRegion.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/g1/HeapRegion.java @@ -29,7 +29,7 @@ import java.util.List; import java.util.Observable; import java.util.Observer; import sun.jvm.hotspot.debugger.Address; -import sun.jvm.hotspot.memory.CompactibleSpace; +import sun.jvm.hotspot.gc.shared.CompactibleSpace; import sun.jvm.hotspot.memory.MemRegion; import sun.jvm.hotspot.runtime.VM; import sun.jvm.hotspot.types.AddressField; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/ImmutableSpace.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/ImmutableSpace.java similarity index 98% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/ImmutableSpace.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/ImmutableSpace.java index c3f6b5c8e3f..61a3b749c34 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/ImmutableSpace.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/ImmutableSpace.java @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.gc.shared; +package sun.jvm.hotspot.gc.parallel; import java.io.*; import java.util.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/MutableSpace.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/MutableSpace.java similarity index 98% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/MutableSpace.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/MutableSpace.java index dc32b41da0e..7a6aa3914ad 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/MutableSpace.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/MutableSpace.java @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.gc.shared; +package sun.jvm.hotspot.gc.parallel; import java.io.*; import java.util.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/PSOldGen.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/PSOldGen.java index 682cccda6ae..161c61ee940 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/PSOldGen.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/PSOldGen.java @@ -28,7 +28,6 @@ import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/PSYoungGen.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/PSYoungGen.java index 11787a56844..f092d052fb3 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/PSYoungGen.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/parallel/PSYoungGen.java @@ -28,7 +28,6 @@ import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/DefNewGeneration.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/serial/DefNewGeneration.java similarity index 96% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/DefNewGeneration.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/serial/DefNewGeneration.java index bbc44198406..620c2d76cdf 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/DefNewGeneration.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/serial/DefNewGeneration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,12 +22,13 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.serial; import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/TenuredGeneration.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/serial/TenuredGeneration.java similarity index 95% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/TenuredGeneration.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/serial/TenuredGeneration.java index 50ac92752b8..9a81b0774e7 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/TenuredGeneration.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/serial/TenuredGeneration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,12 +22,13 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.serial; import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CardGeneration.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/CardGeneration.java similarity index 92% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CardGeneration.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/CardGeneration.java index 1ea450a6df2..3d96d33d81e 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CardGeneration.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/CardGeneration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.shared; import sun.jvm.hotspot.debugger.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleSpace.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/CompactibleSpace.java similarity index 94% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleSpace.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/CompactibleSpace.java index dfbc5232b80..a3af6048bdb 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleSpace.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/CompactibleSpace.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.shared; import java.util.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/ContiguousSpace.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/ContiguousSpace.java similarity index 95% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/ContiguousSpace.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/ContiguousSpace.java index 6092609dc74..c62c47dc97c 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/ContiguousSpace.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/ContiguousSpace.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,12 +22,13 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.shared; import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/GenCollectedHeap.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GenCollectedHeap.java similarity index 98% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/GenCollectedHeap.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GenCollectedHeap.java index 6f7b311f105..7f4579f879d 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/GenCollectedHeap.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GenCollectedHeap.java @@ -22,13 +22,12 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.shared; import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; import sun.jvm.hotspot.utilities.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/Generation.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/Generation.java similarity index 98% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/Generation.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/Generation.java index 0da3de8b1ed..d00bf48ef01 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/Generation.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/Generation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,14 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.shared; import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.types.*; +import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.runtime.*; +import sun.jvm.hotspot.types.*; /**

The (supported) Generation hierarchy currently looks like this:

diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/GenerationFactory.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GenerationFactory.java similarity index 94% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/GenerationFactory.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GenerationFactory.java index c757ac02a37..5818513c330 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/GenerationFactory.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GenerationFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,11 +22,13 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.shared; import java.util.*; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.gc.cms.*; +import sun.jvm.hotspot.gc.serial.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/GenerationIsInClosure.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GenerationIsInClosure.java similarity index 92% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/GenerationIsInClosure.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GenerationIsInClosure.java index a93819c73af..a0b759918d1 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/GenerationIsInClosure.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GenerationIsInClosure.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.shared; import sun.jvm.hotspot.debugger.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/GenerationSpec.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GenerationSpec.java similarity index 95% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/GenerationSpec.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GenerationSpec.java index 24603b62e6d..484ce6959dc 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/GenerationSpec.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/GenerationSpec.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.shared; import java.util.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/OffsetTableContigSpace.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/OffsetTableContigSpace.java similarity index 91% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/OffsetTableContigSpace.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/OffsetTableContigSpace.java index d3db1bd5e24..30564238287 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/OffsetTableContigSpace.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/OffsetTableContigSpace.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.shared; import sun.jvm.hotspot.debugger.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/Space.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/Space.java similarity index 96% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/Space.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/Space.java index c047a8c81c4..1f941e9747b 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/Space.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/Space.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,14 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.shared; import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.types.*; +import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.runtime.*; +import sun.jvm.hotspot.types.*; /**

A Space describes a heap area. Class Space is an abstract base class.

diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/SpaceClosure.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/SpaceClosure.java similarity index 90% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/SpaceClosure.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/SpaceClosure.java index 4306f4214e3..c8ef40f98ab 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/SpaceClosure.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/SpaceClosure.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.shared; public interface SpaceClosure { public void doSpace(Space s); diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/TenuredSpace.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/TenuredSpace.java similarity index 91% rename from hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/TenuredSpace.java rename to hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/TenuredSpace.java index 1b4d9e0fe07..7a5b46ddff6 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/TenuredSpace.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc/shared/TenuredSpace.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.memory; +package sun.jvm.hotspot.gc.shared; import sun.jvm.hotspot.debugger.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java index 297ac14d641..f7c0a625942 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java @@ -32,6 +32,7 @@ package sun.jvm.hotspot.oops; import java.util.*; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.gc.cms.*; import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.gc.g1.*; import sun.jvm.hotspot.gc.parallel.*; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/HeapSummary.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/HeapSummary.java index 3eba45c49b7..f10e0b4c418 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/HeapSummary.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/HeapSummary.java @@ -25,9 +25,9 @@ package sun.jvm.hotspot.tools; import java.util.*; -import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.gc.g1.*; import sun.jvm.hotspot.gc.parallel.*; +import sun.jvm.hotspot.gc.serial.*; import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.debugger.JVMDebugger; import sun.jvm.hotspot.memory.*; @@ -85,7 +85,7 @@ public class HeapSummary extends Tool { GenCollectedHeap genHeap = (GenCollectedHeap) heap; for (int n = 0; n < genHeap.nGens(); n++) { Generation gen = genHeap.getGen(n); - if (gen instanceof sun.jvm.hotspot.memory.DefNewGeneration) { + if (gen instanceof DefNewGeneration) { System.out.println("New Generation (Eden + 1 Survivor Space):"); printGen(gen); From b48a61e5be7f3a00268e1d6a369d307857664219 Mon Sep 17 00:00:00 2001 From: Volker Simonis Date: Tue, 19 May 2015 11:06:34 +0200 Subject: [PATCH 19/82] 8080190: PPC64: Fix wrong rotate instructions in the .ad file Reviewed-by: kvn --- hotspot/src/cpu/ppc/vm/ppc.ad | 5 +- .../codegen/IntRotateWithImmediate.java | 64 +++++++++++++++++++ 2 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 hotspot/test/compiler/codegen/IntRotateWithImmediate.java diff --git a/hotspot/src/cpu/ppc/vm/ppc.ad b/hotspot/src/cpu/ppc/vm/ppc.ad index 388b102ee11..b4264973cb3 100644 --- a/hotspot/src/cpu/ppc/vm/ppc.ad +++ b/hotspot/src/cpu/ppc/vm/ppc.ad @@ -2173,9 +2173,8 @@ const bool Matcher::clone_shift_expressions = false; // Do we need to mask the count passed to shift instructions or does // the cpu only look at the lower 5/6 bits anyway? -// Off, as masks are generated in expand rules where required. -// Constant shift counts are handled in Ideal phase. -const bool Matcher::need_masked_shift_count = false; +// PowerPC requires masked shift counts. +const bool Matcher::need_masked_shift_count = true; // This affects two different things: // - how Decode nodes are matched diff --git a/hotspot/test/compiler/codegen/IntRotateWithImmediate.java b/hotspot/test/compiler/codegen/IntRotateWithImmediate.java new file mode 100644 index 00000000000..1d617a41526 --- /dev/null +++ b/hotspot/test/compiler/codegen/IntRotateWithImmediate.java @@ -0,0 +1,64 @@ +/* + * Copyright 2015 SAP AG. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8080190 + * @key regression + * @summary Test that the rotate distance used in the rotate instruction is properly masked with 0x1f + * @run main/othervm -Xbatch -XX:-UseOnStackReplacement IntRotateWithImmediate + * @author volker.simonis@gmail.com + */ + +public class IntRotateWithImmediate { + + // This is currently the same as Integer.rotateRight() + static int rotateRight(int i, int distance) { + // On some architectures (i.e. x86_64 and ppc64) the following computation is + // matched in the .ad file into a single MachNode which emmits a single rotate + // machine instruction. It is important that the shift amount is masked to match + // corresponding immediate width in the native instruction. On x86_64 the rotate + // left instruction ('rol') encodes an 8-bit immediate while the corresponding + // 'rotlwi' instruction on Power only encodes a 5-bit immediate. + return ((i >>> distance) | (i << -distance)); + } + + static int compute(int x) { + return rotateRight(x, 3); + } + + public static void main(String args[]) { + int val = 4096; + + int firstResult = compute(val); + + for (int i = 0; i < 100000; i++) { + int newResult = compute(val); + if (firstResult != newResult) { + throw new InternalError(firstResult + " != " + newResult); + } + } + System.out.println("OK"); + } + +} From 7695bc389d1b377b29e1eb8c2cf102bfd6454cc7 Mon Sep 17 00:00:00 2001 From: Denis Kononenko Date: Tue, 19 May 2015 14:03:20 +0300 Subject: [PATCH 20/82] 8077866: [TESTBUG] Some of java.lang tests cannot be run on compact profiles 1, 2 Reviewed-by: dholmes, alanb --- jdk/test/TEST.groups | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/jdk/test/TEST.groups b/jdk/test/TEST.groups index 73ac408f90e..ef17c46f0d3 100644 --- a/jdk/test/TEST.groups +++ b/jdk/test/TEST.groups @@ -599,6 +599,10 @@ needs_compact3 = \ sun/security/jgss \ sun/security/krb5 \ java/lang/annotation/AnnotationType/AnnotationTypeDeadlockTest.java \ + java/lang/invoke/lambda/LambdaStackTrace.java \ + java/lang/invoke/LFCaching/LFGarbageCollectedTest.java \ + java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java \ + java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java \ java/lang/System/MacEncoding/TestFileEncoding.java \ java/nio/channels/AsynchronousSocketChannel/Leaky.java \ java/security/PermissionCollection/Concurrent.java \ From c001e13f4d2320ae4ab2948c987cb0f849eeb562 Mon Sep 17 00:00:00 2001 From: Denis Kononenko Date: Tue, 19 May 2015 14:13:15 +0300 Subject: [PATCH 21/82] 8077620: [TESTBUG] Some of the hotspot tests require at least compact profile 3 Reviewed-by: kvn, dholmes --- hotspot/test/TEST.groups | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hotspot/test/TEST.groups b/hotspot/test/TEST.groups index 31ae122778a..dab729263ea 100644 --- a/hotspot/test/TEST.groups +++ b/hotspot/test/TEST.groups @@ -145,9 +145,13 @@ needs_compact3 = \ gc/g1/TestShrinkAuxiliaryData25.java \ gc/g1/TestShrinkAuxiliaryData30.java \ gc/survivorAlignment \ + gc/TestGCLogRotationViaJcmd.java \ runtime/InternalApi/ThreadCpuTimesDeadlock.java \ + serviceability/sa/jmap-hashcode/Test8028623.java \ serviceability/threads/TestFalseDeadLock.java \ compiler/codecache/jmx \ + compiler/jsr292/RedefineMethodUsedByMultipleMethodHandles.java \ + compiler/rangechecks/TestRangeCheckSmearing.java \ serviceability/dcmd # Compact 2 adds full VM tests From 5e68a86953e6307d71725bbb68b92bf698068997 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20Lid=C3=A9n?= Date: Tue, 19 May 2015 14:09:22 +0200 Subject: [PATCH 22/82] 8080585: concurrentGCThread.hpp should not include suspendibleThreadSet.hpp Reviewed-by: kbarrett, tschatzl --- hotspot/src/share/vm/gc/g1/concurrentG1RefineThread.cpp | 1 + hotspot/src/share/vm/gc/g1/concurrentMark.cpp | 1 + hotspot/src/share/vm/gc/g1/concurrentMarkThread.cpp | 1 + hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp | 1 + hotspot/src/share/vm/gc/g1/g1StringDedupThread.cpp | 1 + hotspot/src/share/vm/gc/shared/concurrentGCThread.hpp | 1 - 6 files changed, 5 insertions(+), 1 deletion(-) diff --git a/hotspot/src/share/vm/gc/g1/concurrentG1RefineThread.cpp b/hotspot/src/share/vm/gc/g1/concurrentG1RefineThread.cpp index 7a1c4e46092..f652cf97d06 100644 --- a/hotspot/src/share/vm/gc/g1/concurrentG1RefineThread.cpp +++ b/hotspot/src/share/vm/gc/g1/concurrentG1RefineThread.cpp @@ -27,6 +27,7 @@ #include "gc/g1/concurrentG1RefineThread.hpp" #include "gc/g1/g1CollectedHeap.inline.hpp" #include "gc/g1/g1CollectorPolicy.hpp" +#include "gc/g1/suspendibleThreadSet.hpp" #include "memory/resourceArea.hpp" #include "runtime/handles.inline.hpp" #include "runtime/mutexLocker.hpp" diff --git a/hotspot/src/share/vm/gc/g1/concurrentMark.cpp b/hotspot/src/share/vm/gc/g1/concurrentMark.cpp index 6fd97a6d6bd..58933476c61 100644 --- a/hotspot/src/share/vm/gc/g1/concurrentMark.cpp +++ b/hotspot/src/share/vm/gc/g1/concurrentMark.cpp @@ -39,6 +39,7 @@ #include "gc/g1/heapRegionManager.inline.hpp" #include "gc/g1/heapRegionRemSet.hpp" #include "gc/g1/heapRegionSet.inline.hpp" +#include "gc/g1/suspendibleThreadSet.hpp" #include "gc/shared/gcTimer.hpp" #include "gc/shared/gcTrace.hpp" #include "gc/shared/gcTraceTime.hpp" diff --git a/hotspot/src/share/vm/gc/g1/concurrentMarkThread.cpp b/hotspot/src/share/vm/gc/g1/concurrentMarkThread.cpp index 3e1a08e9377..a51e8d53459 100644 --- a/hotspot/src/share/vm/gc/g1/concurrentMarkThread.cpp +++ b/hotspot/src/share/vm/gc/g1/concurrentMarkThread.cpp @@ -28,6 +28,7 @@ #include "gc/g1/g1CollectorPolicy.hpp" #include "gc/g1/g1Log.hpp" #include "gc/g1/g1MMUTracker.hpp" +#include "gc/g1/suspendibleThreadSet.hpp" #include "gc/g1/vm_operations_g1.hpp" #include "gc/shared/gcTrace.hpp" #include "memory/resourceArea.hpp" diff --git a/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp index 19095c5f887..d18eb149490 100644 --- a/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp +++ b/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp @@ -49,6 +49,7 @@ #include "gc/g1/heapRegion.inline.hpp" #include "gc/g1/heapRegionRemSet.hpp" #include "gc/g1/heapRegionSet.inline.hpp" +#include "gc/g1/suspendibleThreadSet.hpp" #include "gc/g1/vm_operations_g1.hpp" #include "gc/shared/gcHeapSummary.hpp" #include "gc/shared/gcLocker.inline.hpp" diff --git a/hotspot/src/share/vm/gc/g1/g1StringDedupThread.cpp b/hotspot/src/share/vm/gc/g1/g1StringDedupThread.cpp index 1a40c863a61..9663bbfebba 100644 --- a/hotspot/src/share/vm/gc/g1/g1StringDedupThread.cpp +++ b/hotspot/src/share/vm/gc/g1/g1StringDedupThread.cpp @@ -28,6 +28,7 @@ #include "gc/g1/g1StringDedupQueue.hpp" #include "gc/g1/g1StringDedupTable.hpp" #include "gc/g1/g1StringDedupThread.hpp" +#include "gc/g1/suspendibleThreadSet.hpp" #include "runtime/atomic.inline.hpp" G1StringDedupThread* G1StringDedupThread::_thread = NULL; diff --git a/hotspot/src/share/vm/gc/shared/concurrentGCThread.hpp b/hotspot/src/share/vm/gc/shared/concurrentGCThread.hpp index 6689a4e7559..8647eee2254 100644 --- a/hotspot/src/share/vm/gc/shared/concurrentGCThread.hpp +++ b/hotspot/src/share/vm/gc/shared/concurrentGCThread.hpp @@ -25,7 +25,6 @@ #ifndef SHARE_VM_GC_SHARED_CONCURRENTGCTHREAD_HPP #define SHARE_VM_GC_SHARED_CONCURRENTGCTHREAD_HPP -#include "gc/g1/suspendibleThreadSet.hpp" #include "runtime/thread.hpp" #include "utilities/macros.hpp" From 7c62a26e6bdb7157944c13c766203499844dd3d3 Mon Sep 17 00:00:00 2001 From: Shrinivas Joshi Date: Tue, 19 May 2015 16:05:12 +0200 Subject: [PATCH 23/82] 8080308: TypeProfileLevel on SPARC platform should enable JSR292-only profiling level Set TypeProfileLevel to 111 by default on sparc Reviewed-by: kvn, roland --- hotspot/src/cpu/sparc/vm/globals_sparc.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hotspot/src/cpu/sparc/vm/globals_sparc.hpp b/hotspot/src/cpu/sparc/vm/globals_sparc.hpp index 800e6ef5a74..2c3424c0699 100644 --- a/hotspot/src/cpu/sparc/vm/globals_sparc.hpp +++ b/hotspot/src/cpu/sparc/vm/globals_sparc.hpp @@ -79,7 +79,7 @@ define_pd_global(bool, PreserveFramePointer, false); // GC Ergo Flags define_pd_global(size_t, CMSYoungGenPerWorker, 16*M); // default max size of CMS young gen, per GC worker thread -define_pd_global(uintx, TypeProfileLevel, 0); +define_pd_global(uintx, TypeProfileLevel, 111); #define ARCH_FLAGS(develop, product, diagnostic, experimental, notproduct) \ \ From 9fb89f6d0143db073c58c350e1cddf46da3da309 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20Lid=C3=A9n?= Date: Tue, 19 May 2015 17:25:49 +0200 Subject: [PATCH 24/82] 8080584: isGCActiveMark.hpp should not include parallelScavengeHeap.hpp Reviewed-by: kbarrett, tschatzl --- .../src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp | 1 + hotspot/src/share/vm/gc/shared/isGCActiveMark.hpp | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp b/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp index 64d188375ba..cdb21c69435 100644 --- a/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp +++ b/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp @@ -43,6 +43,7 @@ #include "gc/shared/collectorCounters.hpp" #include "gc/shared/collectorPolicy.hpp" #include "gc/shared/gcLocker.inline.hpp" +#include "gc/shared/gcPolicyCounters.hpp" #include "gc/shared/gcTimer.hpp" #include "gc/shared/gcTrace.hpp" #include "gc/shared/gcTraceTime.hpp" diff --git a/hotspot/src/share/vm/gc/shared/isGCActiveMark.hpp b/hotspot/src/share/vm/gc/shared/isGCActiveMark.hpp index b3eee7107f6..f358b04c6a8 100644 --- a/hotspot/src/share/vm/gc/shared/isGCActiveMark.hpp +++ b/hotspot/src/share/vm/gc/shared/isGCActiveMark.hpp @@ -25,10 +25,10 @@ #ifndef SHARE_VM_GC_SHARED_ISGCACTIVEMARK_HPP #define SHARE_VM_GC_SHARED_ISGCACTIVEMARK_HPP -#include "utilities/macros.hpp" -#if INCLUDE_ALL_GCS -#include "gc/parallel/parallelScavengeHeap.hpp" -#endif // INCLUDE_ALL_GCS +#include "gc/shared/collectedHeap.hpp" +#include "memory/allocation.hpp" +#include "memory/universe.hpp" +#include "utilities/debug.hpp" // This class provides a method for block structured setting of the // _is_gc_active state without requiring accessors in CollectedHeap From c8fa7eb4ddcc223ee8aa264973d6fa7072f60015 Mon Sep 17 00:00:00 2001 From: Andreas Sjoberg Date: Wed, 20 May 2015 10:45:40 +0200 Subject: [PATCH 25/82] 8047330: Remove unrolled card loops in G1 SparsePRTEntry Reviewed-by: ehelin, mgerdin, tschatzl --- hotspot/src/share/vm/gc/g1/sparsePRT.cpp | 68 +----------------------- 1 file changed, 2 insertions(+), 66 deletions(-) diff --git a/hotspot/src/share/vm/gc/g1/sparsePRT.cpp b/hotspot/src/share/vm/gc/g1/sparsePRT.cpp index f5be62e366a..7c82d5204d9 100644 --- a/hotspot/src/share/vm/gc/g1/sparsePRT.cpp +++ b/hotspot/src/share/vm/gc/g1/sparsePRT.cpp @@ -34,106 +34,42 @@ #define SPARSE_PRT_VERBOSE 0 -#define UNROLL_CARD_LOOPS 1 - void SparsePRTEntry::init(RegionIdx_t region_ind) { _region_ind = region_ind; _next_index = NullEntry; -#if UNROLL_CARD_LOOPS - assert((cards_num() & (UnrollFactor - 1)) == 0, "Invalid number of cards in the entry"); - for (int i = 0; i < cards_num(); i += UnrollFactor) { + for (int i = 0; i < cards_num(); i++) { _cards[i] = NullEntry; - _cards[i + 1] = NullEntry; - _cards[i + 2] = NullEntry; - _cards[i + 3] = NullEntry; } -#else - for (int i = 0; i < cards_num(); i++) - _cards[i] = NullEntry; -#endif } bool SparsePRTEntry::contains_card(CardIdx_t card_index) const { -#if UNROLL_CARD_LOOPS - assert((cards_num() & (UnrollFactor - 1)) == 0, "Invalid number of cards in the entry"); - for (int i = 0; i < cards_num(); i += UnrollFactor) { - if (_cards[i] == card_index || - _cards[i + 1] == card_index || - _cards[i + 2] == card_index || - _cards[i + 3] == card_index) return true; - } -#else for (int i = 0; i < cards_num(); i++) { if (_cards[i] == card_index) return true; } -#endif - // Otherwise, we're full. return false; } int SparsePRTEntry::num_valid_cards() const { int sum = 0; -#if UNROLL_CARD_LOOPS - assert((cards_num() & (UnrollFactor - 1)) == 0, "Invalid number of cards in the entry"); - for (int i = 0; i < cards_num(); i += UnrollFactor) { - sum += (_cards[i] != NullEntry); - sum += (_cards[i + 1] != NullEntry); - sum += (_cards[i + 2] != NullEntry); - sum += (_cards[i + 3] != NullEntry); - } -#else for (int i = 0; i < cards_num(); i++) { sum += (_cards[i] != NullEntry); } -#endif - // Otherwise, we're full. return sum; } SparsePRTEntry::AddCardResult SparsePRTEntry::add_card(CardIdx_t card_index) { -#if UNROLL_CARD_LOOPS - assert((cards_num() & (UnrollFactor - 1)) == 0, "Invalid number of cards in the entry"); - CardIdx_t c; - for (int i = 0; i < cards_num(); i += UnrollFactor) { - c = _cards[i]; - if (c == card_index) return found; - if (c == NullEntry) { _cards[i] = card_index; return added; } - c = _cards[i + 1]; - if (c == card_index) return found; - if (c == NullEntry) { _cards[i + 1] = card_index; return added; } - c = _cards[i + 2]; - if (c == card_index) return found; - if (c == NullEntry) { _cards[i + 2] = card_index; return added; } - c = _cards[i + 3]; - if (c == card_index) return found; - if (c == NullEntry) { _cards[i + 3] = card_index; return added; } - } -#else for (int i = 0; i < cards_num(); i++) { CardIdx_t c = _cards[i]; if (c == card_index) return found; if (c == NullEntry) { _cards[i] = card_index; return added; } } -#endif // Otherwise, we're full. return overflow; } void SparsePRTEntry::copy_cards(CardIdx_t* cards) const { -#if UNROLL_CARD_LOOPS - assert((cards_num() & (UnrollFactor - 1)) == 0, "Invalid number of cards in the entry"); - for (int i = 0; i < cards_num(); i += UnrollFactor) { - cards[i] = _cards[i]; - cards[i + 1] = _cards[i + 1]; - cards[i + 2] = _cards[i + 2]; - cards[i + 3] = _cards[i + 3]; - } -#else - for (int i = 0; i < cards_num(); i++) { - cards[i] = _cards[i]; - } -#endif + memcpy(cards, _cards, cards_num() * sizeof(CardIdx_t)); } void SparsePRTEntry::copy_cards(SparsePRTEntry* e) const { From d917a8866cc18451f854b6b7bf1a890ffc6b7e46 Mon Sep 17 00:00:00 2001 From: Andrew Haley Date: Wed, 20 May 2015 10:21:02 +0100 Subject: [PATCH 26/82] 8080600: AARCH64: testlibrary does not support AArch64 Add Platform.isAArch64(). Use it in mathexact intrinsic tests. Reviewed-by: kvn, roland --- .../compiler/intrinsics/mathexact/sanity/IntrinsicBase.java | 5 +++-- hotspot/test/testlibrary/jdk/test/lib/Platform.java | 4 ++++ .../TestMutuallyExclusivePlatformPredicates.java | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/IntrinsicBase.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/IntrinsicBase.java index 499de7fb181..f98f5926f1b 100644 --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/IntrinsicBase.java +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/IntrinsicBase.java @@ -129,7 +129,8 @@ public abstract class IntrinsicBase extends CompilerWhiteBoxTest { @Override protected boolean isIntrinsicSupported() { - return isServerVM() && Boolean.valueOf(useMathExactIntrinsics) && (Platform.isX86() || Platform.isX64()); + return isServerVM() && Boolean.valueOf(useMathExactIntrinsics) + && (Platform.isX86() || Platform.isX64() || Platform.isAArch64()); } @Override @@ -146,7 +147,7 @@ public abstract class IntrinsicBase extends CompilerWhiteBoxTest { @Override protected boolean isIntrinsicSupported() { return isServerVM() && Boolean.valueOf(useMathExactIntrinsics) && - (Platform.isX64() || Platform.isPPC()); + (Platform.isX64() || Platform.isPPC() || Platform.isAArch64()); } @Override diff --git a/hotspot/test/testlibrary/jdk/test/lib/Platform.java b/hotspot/test/testlibrary/jdk/test/lib/Platform.java index 05290e5d878..ec1cbe82114 100644 --- a/hotspot/test/testlibrary/jdk/test/lib/Platform.java +++ b/hotspot/test/testlibrary/jdk/test/lib/Platform.java @@ -132,6 +132,10 @@ public class Platform { return isArch("(amd64)|(x86_64)"); } + public static boolean isAArch64() { + return isArch("aarch64"); + } + private static boolean isArch(String archnameRE) { return Pattern.compile(archnameRE, Pattern.CASE_INSENSITIVE) .matcher(osArch) diff --git a/hotspot/test/testlibrary_tests/TestMutuallyExclusivePlatformPredicates.java b/hotspot/test/testlibrary_tests/TestMutuallyExclusivePlatformPredicates.java index b3e220ee37e..ecd9ec08469 100644 --- a/hotspot/test/testlibrary_tests/TestMutuallyExclusivePlatformPredicates.java +++ b/hotspot/test/testlibrary_tests/TestMutuallyExclusivePlatformPredicates.java @@ -45,7 +45,7 @@ import java.util.Set; */ public class TestMutuallyExclusivePlatformPredicates { private static enum MethodGroup { - ARCH("isARM", "isPPC", "isSparc", "isX86", "isX64"), + ARCH("isARM", "isPPC", "isSparc", "isX86", "isX64", "isAArch64"), BITNESS("is32bit", "is64bit"), OS("isAix", "isLinux", "isOSX", "isSolaris", "isWindows"), VM_TYPE("isClient", "isServer", "isGraal", "isMinimal", "isZero"), From 265b75c58454f9900f5f46489526663348b68ea1 Mon Sep 17 00:00:00 2001 From: Sergei Kovalev Date: Wed, 20 May 2015 09:07:36 -0400 Subject: [PATCH 27/82] 8078834: [TESTBUG] Tests fails on ARM64 due to unknown hardware Reviewed-by: dholmes, adinn --- hotspot/test/test_env.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hotspot/test/test_env.sh b/hotspot/test/test_env.sh index a6f1ba39dcb..660776e2221 100644 --- a/hotspot/test/test_env.sh +++ b/hotspot/test/test_env.sh @@ -198,6 +198,11 @@ if [ $? = 0 ] then VM_CPU="ia64" fi +grep "aarch64" vm_version.out > ${NULL} +if [ $? = 0 ] +then + VM_CPU="aarch64" +fi export VM_TYPE VM_BITS VM_OS VM_CPU echo "VM_TYPE=${VM_TYPE}" echo "VM_BITS=${VM_BITS}" From af066eba2e1be9f67cd72173971fb2326a0f43d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rickard=20B=C3=A4ckman?= Date: Thu, 21 May 2015 18:10:18 +0200 Subject: [PATCH 28/82] 8080692: lots of jstack tests failing in pit Reviewed-by: kvn, vlivanov --- .../share/classes/sun/jvm/hotspot/HSDB.java | 2 +- .../hotspot/compiler/ImmutableOopMapPair.java | 4 ++ .../hotspot/compiler/ImmutableOopMapSet.java | 42 ++++++++++++++----- .../ui/classbrowser/HTMLGenerator.java | 2 +- hotspot/src/share/vm/compiler/oopMap.cpp | 40 +++++++++++++----- hotspot/src/share/vm/compiler/oopMap.hpp | 6 +++ 6 files changed, 73 insertions(+), 23 deletions(-) diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/HSDB.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/HSDB.java index c43c5b1b88e..07b80820143 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/HSDB.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/HSDB.java @@ -927,7 +927,7 @@ public class HSDB implements ObjectHistogramPanel.Listener, SAListener { if (curVFrame.isCompiledFrame()) { CodeBlob cb = VM.getVM().getCodeCache().findBlob(curFrame.getPC()); ImmutableOopMapSet maps = cb.getOopMaps(); - if ((maps == null) || (maps.getSize() == 0)) { + if ((maps == null) || (maps.getCount() == 0)) { shouldSkipOopMaps = true; } } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/compiler/ImmutableOopMapPair.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/compiler/ImmutableOopMapPair.java index 5c975fc5298..fa8b27e61c4 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/compiler/ImmutableOopMapPair.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/compiler/ImmutableOopMapPair.java @@ -71,4 +71,8 @@ public class ImmutableOopMapPair { offsetField = type.getCIntegerField("_oopmap_offset"); classSize = type.getSize(); } + + public String toString() { + return "Pair{pc_offset = " + getPC() + ", data_offset = " + getOffset() + "}"; + } } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/compiler/ImmutableOopMapSet.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/compiler/ImmutableOopMapSet.java index b2ece64f639..c8b771d8aaf 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/compiler/ImmutableOopMapSet.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/compiler/ImmutableOopMapSet.java @@ -106,19 +106,19 @@ public class ImmutableOopMapSet extends VMObject { /** * Returns the number of OopMaps in this ImmutableOopMapSet */ - public long getSize() { - return countField.getValue(addr); - } - public int getCount() { return (int) countField.getValue(addr); } private Address dataStart() { - return (addr.addOffsetTo(ImmutableOopMapSet.classSize * getCount())); + return (pairStart().addOffsetTo(ImmutableOopMapPair.classSize() * getCount())); + } + + private Address pairStart() { + return addr.addOffsetTo(ImmutableOopMapSet.classSize); } public ImmutableOopMapPair pairAt(int index) { Assert.that((index >= 0) && (index < getCount()), "bad index"); - return new ImmutableOopMapPair(addr.addOffsetTo(index * ImmutableOopMapPair.classSize())); + return new ImmutableOopMapPair(pairStart().addOffsetTo(index * ImmutableOopMapPair.classSize())); } /** @@ -126,7 +126,7 @@ public class ImmutableOopMapSet extends VMObject { */ public ImmutableOopMap getMapAt(int index) { if (Assert.ASSERTS_ENABLED) { - Assert.that((index >= 0) && (index <= getSize()), "bad index"); + Assert.that((index >= 0) && (index <= getCount()), "bad index"); } ImmutableOopMapPair immutableOopMapPair = pairAt(index); @@ -135,7 +135,7 @@ public class ImmutableOopMapSet extends VMObject { public ImmutableOopMap findMapAtOffset(long pcOffset, boolean debugging) { int i; - int len = (int) getSize(); + int len = getCount(); if (Assert.ASSERTS_ENABLED) { Assert.that(len > 0, "must have pointer maps"); } @@ -253,14 +253,14 @@ public class ImmutableOopMapSet extends VMObject { if (!VM.getVM().isDebugging()) { if (Assert.ASSERTS_ENABLED) { ImmutableOopMapSet maps = cb.getOopMaps(); - Assert.that((maps != null) && (maps.getSize() > 0), "found null or empty ImmutableOopMapSet for CodeBlob"); + Assert.that((maps != null) && (maps.getCount() > 0), "found null or empty ImmutableOopMapSet for CodeBlob"); } } else { // Hack for some topmost frames that have been found with empty // OopMapSets. (Actually have not seen the null case, but don't // want to take any chances.) See HSDB.showThreadStackMemory(). ImmutableOopMapSet maps = cb.getOopMaps(); - if ((maps == null) || (maps.getSize() == 0)) { + if ((maps == null) || (maps.getCount() == 0)) { return; } } @@ -311,8 +311,28 @@ public class ImmutableOopMapSet extends VMObject { return pairAt(index); } + private int getSize() { + return (int) sizeField.getValue(addr); + } + public ImmutableOopMap getMap(ImmutableOopMapPair pair) { - Assert.that(pair.getOffset() < (int) sizeField.getValue(), "boundary check"); + Assert.that(pair.getOffset() < getSize(), "boundary check: this: " + this + " offset: " + pair); return new ImmutableOopMap(dataStart().addOffsetTo(pair.getOffset())); } + + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("Set{ ") + .append("addr = ").append(addr) + .append(", count = ").append(getCount()) + .append(", size = ").append(getSize()) + .append(", pairs = ["); + + for (int i = 0; i < getCount(); ++i) { + builder.append(getPairAt(i)); + } + + builder.append("]"); + return builder.toString(); + } } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java index eba84fd6496..9f4c2d2e3b8 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java @@ -1236,7 +1236,7 @@ public class HTMLGenerator implements /* imports */ ClassConstants { protected String genOopMapInfo(NMethod nmethod, PCDesc pcDesc) { ImmutableOopMapSet mapSet = nmethod.getOopMaps(); - if (mapSet == null || (mapSet.getSize() <= 0)) + if (mapSet == null || (mapSet.getCount() <= 0)) return ""; int pcOffset = pcDesc.getPCOffset(); ImmutableOopMap map = mapSet.findMapAtOffset(pcOffset, VM.getVM().isDebugging()); diff --git a/hotspot/src/share/vm/compiler/oopMap.cpp b/hotspot/src/share/vm/compiler/oopMap.cpp index fe54ba8211e..a6a21ef2a48 100644 --- a/hotspot/src/share/vm/compiler/oopMap.cpp +++ b/hotspot/src/share/vm/compiler/oopMap.cpp @@ -596,6 +596,17 @@ ImmutableOopMap::ImmutableOopMap(const OopMap* oopmap) : _count(oopmap->count()) oopmap->copy_data_to(addr); } +#ifdef ASSERT +int ImmutableOopMap::nr_of_bytes() const { + OopMapStream oms(this); + + while (!oms.is_done()) { + oms.next(); + } + return sizeof(ImmutableOopMap) + oms.stream_position(); +} +#endif + class ImmutableOopMapBuilder { private: class Mapping; @@ -652,7 +663,7 @@ private: } #ifdef ASSERT - void verify(address buffer, int size); + void verify(address buffer, int size, const ImmutableOopMapSet* set); #endif bool has_empty() const { @@ -660,8 +671,8 @@ private: } int size_for(const OopMap* map) const; - void fill_pair(ImmutableOopMapPair* pair, const OopMap* map, int offset); - int fill_map(ImmutableOopMapPair* pair, const OopMap* map, int offset); + void fill_pair(ImmutableOopMapPair* pair, const OopMap* map, int offset, const ImmutableOopMapSet* set); + int fill_map(ImmutableOopMapPair* pair, const OopMap* map, int offset, const ImmutableOopMapSet* set); void fill(ImmutableOopMapSet* set, int size); }; @@ -711,12 +722,13 @@ int ImmutableOopMapBuilder::heap_size() { return total; } -void ImmutableOopMapBuilder::fill_pair(ImmutableOopMapPair* pair, const OopMap* map, int offset) { +void ImmutableOopMapBuilder::fill_pair(ImmutableOopMapPair* pair, const OopMap* map, int offset, const ImmutableOopMapSet* set) { + assert(offset < set->nr_of_bytes(), "check"); new ((address) pair) ImmutableOopMapPair(map->offset(), offset); } -int ImmutableOopMapBuilder::fill_map(ImmutableOopMapPair* pair, const OopMap* map, int offset) { - fill_pair(pair, map, offset); +int ImmutableOopMapBuilder::fill_map(ImmutableOopMapPair* pair, const OopMap* map, int offset, const ImmutableOopMapSet* set) { + fill_pair(pair, map, offset, set); address addr = (address) pair->get_from(_new_set); // location of the ImmutableOopMap new (addr) ImmutableOopMap(map); @@ -732,9 +744,9 @@ void ImmutableOopMapBuilder::fill(ImmutableOopMapSet* set, int sz) { int size = 0; if (_mapping[i]._kind == Mapping::OOPMAP_NEW) { - size = fill_map(&pairs[i], map, _mapping[i]._offset); + size = fill_map(&pairs[i], map, _mapping[i]._offset, set); } else if (_mapping[i]._kind == Mapping::OOPMAP_DUPLICATE || _mapping[i]._kind == Mapping::OOPMAP_EMPTY) { - fill_pair(&pairs[i], map, _mapping[i]._offset); + fill_pair(&pairs[i], map, _mapping[i]._offset, set); } const ImmutableOopMap* nv = set->find_map_at_offset(map->offset()); @@ -743,10 +755,18 @@ void ImmutableOopMapBuilder::fill(ImmutableOopMapSet* set, int sz) { } #ifdef ASSERT -void ImmutableOopMapBuilder::verify(address buffer, int size) { +void ImmutableOopMapBuilder::verify(address buffer, int size, const ImmutableOopMapSet* set) { for (int i = 0; i < 8; ++i) { assert(buffer[size - 8 + i] == (unsigned char) 0xff, "overwritten memory check"); } + + for (int i = 0; i < set->count(); ++i) { + const ImmutableOopMapPair* pair = set->pair_at(i); + assert(pair->oopmap_offset() < set->nr_of_bytes(), "check size"); + const ImmutableOopMap* map = pair->get_from(set); + int nr_of_bytes = map->nr_of_bytes(); + assert(pair->oopmap_offset() + nr_of_bytes <= set->nr_of_bytes(), "check size + size"); + } } #endif @@ -760,7 +780,7 @@ ImmutableOopMapSet* ImmutableOopMapBuilder::build() { _new_set = new (buffer) ImmutableOopMapSet(_set, required); fill(_new_set, required); - DEBUG_ONLY(verify(buffer, required)); + DEBUG_ONLY(verify(buffer, required, _new_set)); return _new_set; } diff --git a/hotspot/src/share/vm/compiler/oopMap.hpp b/hotspot/src/share/vm/compiler/oopMap.hpp index 54d4fd6b9ea..f2639c8ae6a 100644 --- a/hotspot/src/share/vm/compiler/oopMap.hpp +++ b/hotspot/src/share/vm/compiler/oopMap.hpp @@ -273,6 +273,9 @@ public: bool has_derived_pointer() const PRODUCT_RETURN0; int count() const { return _count; } +#ifdef ASSERT + int nr_of_bytes() const; // this is an expensive operation, only used in debug builds +#endif // Printing void print_on(outputStream* st) const; @@ -346,6 +349,9 @@ class OopMapStream : public StackObj { bool is_done() { if(!_valid_omv) { find_next(); } return !_valid_omv; } void next() { find_next(); } OopMapValue current() { return _omv; } +#ifdef ASSERT + int stream_position() const { return _stream->position(); } +#endif }; From e39d4f074f70e43b4af8421f025c4f0b1e7c3e79 Mon Sep 17 00:00:00 2001 From: Daniel Fuchs Date: Fri, 22 May 2015 13:05:26 +0200 Subject: [PATCH 29/82] 8080608: Missing archive name from jdeps -v -e output if no dependency on other JAR Reviewed-by: mchung --- .../classes/com/sun/tools/jdeps/Analyzer.java | 13 +- .../VerboseFormat/JdepsDependencyClosure.java | 496 ++++++++++++++++++ .../use/indirect/DontUseUnsafe2.java | 28 + .../use/indirect/UseUnsafeIndirectly.java | 29 + .../use/indirect2/DontUseUnsafe3.java | 29 + .../use/indirect2/UseUnsafeIndirectly2.java | 29 + .../use/unsafe/DontUseUnsafe.java | 27 + .../use/unsafe/UseClassWithUnsafe.java | 7 + .../use/unsafe/UseUnsafeClass.java | 30 ++ .../use/unsafe/UseUnsafeClass2.java | 30 ++ 10 files changed, 716 insertions(+), 2 deletions(-) create mode 100644 langtools/test/tools/jdeps/VerboseFormat/JdepsDependencyClosure.java create mode 100644 langtools/test/tools/jdeps/VerboseFormat/use/indirect/DontUseUnsafe2.java create mode 100644 langtools/test/tools/jdeps/VerboseFormat/use/indirect/UseUnsafeIndirectly.java create mode 100644 langtools/test/tools/jdeps/VerboseFormat/use/indirect2/DontUseUnsafe3.java create mode 100644 langtools/test/tools/jdeps/VerboseFormat/use/indirect2/UseUnsafeIndirectly2.java create mode 100644 langtools/test/tools/jdeps/VerboseFormat/use/unsafe/DontUseUnsafe.java create mode 100644 langtools/test/tools/jdeps/VerboseFormat/use/unsafe/UseClassWithUnsafe.java create mode 100644 langtools/test/tools/jdeps/VerboseFormat/use/unsafe/UseUnsafeClass.java create mode 100644 langtools/test/tools/jdeps/VerboseFormat/use/unsafe/UseUnsafeClass2.java diff --git a/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/Analyzer.java b/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/Analyzer.java index 030619a0744..4cb7e8ffbce 100644 --- a/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/Analyzer.java +++ b/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/Analyzer.java @@ -33,6 +33,7 @@ import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.Stream; import com.sun.tools.classfile.Dependency.Location; @@ -137,8 +138,16 @@ public class Analyzer { public void visitDependences(Archive source, Visitor v, Type level) { if (level == Type.SUMMARY) { final ArchiveDeps result = results.get(source); - result.requires().stream() - .sorted(Comparator.comparing(Archive::getName)) + final Set reqs = result.requires(); + Stream stream = reqs.stream(); + if (reqs.isEmpty()) { + if (hasDependences(source)) { + // If reqs.isEmpty() and we have dependences, then it means + // that the dependences are from 'source' onto itself. + stream = Stream.of(source); + } + } + stream.sorted(Comparator.comparing(Archive::getName)) .forEach(archive -> { Profile profile = result.getTargetProfile(archive); v.visitDependence(source.getName(), source, diff --git a/langtools/test/tools/jdeps/VerboseFormat/JdepsDependencyClosure.java b/langtools/test/tools/jdeps/VerboseFormat/JdepsDependencyClosure.java new file mode 100644 index 00000000000..c58007101b0 --- /dev/null +++ b/langtools/test/tools/jdeps/VerboseFormat/JdepsDependencyClosure.java @@ -0,0 +1,496 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.function.Supplier; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @test + * @bug 8080608 + * @summary Test that jdeps verbose output has a summary line when dependencies + * are found within the same archive. For each testcase, compare the + * result obtained from jdeps with the expected result. + * @modules jdk.dev/com.sun.tools.jdeps + * @build use.indirect.DontUseUnsafe2 + * @build use.indirect.UseUnsafeIndirectly + * @build use.indirect2.DontUseUnsafe3 + * @build use.indirect2.UseUnsafeIndirectly2 + * @build use.unsafe.DontUseUnsafe + * @build use.unsafe.UseClassWithUnsafe + * @build use.unsafe.UseUnsafeClass + * @build use.unsafe.UseUnsafeClass2 + * @run main JdepsDependencyClosure --test:0 + * @run main JdepsDependencyClosure --test:1 + * @run main JdepsDependencyClosure --test:2 + * @run main JdepsDependencyClosure --test:3 + */ +public class JdepsDependencyClosure { + + static boolean VERBOSE = false; + static boolean COMPARE_TEXT = true; + + static final String JDEPS_SUMMARY_TEXT_FORMAT = "%s -> %s%n"; + static final String JDEPS_VERBOSE_TEXT_FORMAT = " %-50s -> %-50s %s%n"; + + /** + * Helper class used to store arguments to pass to + * {@code JdepsDependencyClosure.test} as well as expected + * results. + */ + static class TestCaseData { + final Map> expectedDependencies; + final String expectedText; + final String[] args; + final boolean closure; + + TestCaseData(Map> expectedDependencies, + String expectedText, + boolean closure, + String[] args) { + this.expectedDependencies = expectedDependencies; + this.expectedText = expectedText; + this.closure = closure; + this.args = args; + } + + public void test() { + if (expectedDependencies != null) { + String format = closure + ? "Running (closure): jdeps %s %s %s %s" + : "Running: jdeps %s %s %s %s"; + System.out.println(String.format(format, (Object[])args)); + } + JdepsDependencyClosure.test(args, expectedDependencies, expectedText, closure); + } + + /** + * Make a new test case data to invoke jdeps and test its output. + * @param pattern The pattern that will passed through to jdeps -e + * This is expected to match only one class. + * @param arcPath The archive to analyze. A jar or a class directory. + * @param classes For each reported archive dependency couple, the + * expected list of classes in the source that will + * be reported as having a dependency on the class + * in the target that matches the given pattern. + * @param dependencies For each archive dependency couple, a singleton list + * containing the name of the class in the target that + * matches the pattern. It is expected that the pattern + * will match only one class in the target. + * If the pattern matches several classes the + * expected text may no longer match the jdeps output. + * @param archives A list of archive dependency couple in the form + * {{sourceName1, sourcePath1, targetDescription1, targetPath1} + * {sourceName2, sourcePath2, targetDescription2, targetPath2} + * ... } + * For a JDK module - e.g. java.base, the targetDescription + * is usually something like "JDK internal API (java.base)" + * and the targetPath is usually the module name "java.base". + * @param closure Whether jdeps should be recursively invoked to build + * the closure. + * @return An instance of TestCaseData containing all the information + * needed to perform the jdeps invokation and test its output. + */ + public static TestCaseData make(String pattern, String arcPath, String[][] classes, + String[][] dependencies, String[][] archives, boolean closure) { + final String[] args = new String[] { + "-e", pattern, "-v", arcPath + }; + Map> expected = new HashMap<>(); + String expectedText = ""; + for (int i=0; i String.format(JDEPS_VERBOSE_TEXT_FORMAT, cn, + dependencies[index][0], archives[index][2])) + .reduce(String.format(JDEPS_SUMMARY_TEXT_FORMAT, archives[i][0], + archives[index][3]), (s1,s2) -> s1.concat(s2)); + for (String cn : classes[index]) { + expected.putIfAbsent(cn, new HashSet<>()); + expected.get(cn).add(dependencies[index][0]); + } + } + return new TestCaseData(expected, expectedText, closure, args); + } + + public static TestCaseData valueOf(String[] args) { + if (args.length == 1 && args[0].startsWith("--test:")) { + // invoked from jtreg. build test case data for selected test. + int index = Integer.parseInt(args[0].substring("--test:".length())); + if (index >= dataSuppliers.size()) { + throw new RuntimeException("No such test case: " + index + + " - available testcases are [0.." + + (dataSuppliers.size()-1) + "]"); + } + return dataSuppliers.get(index).get(); + } else { + // invoked in standalone. just take the given argument + // and perform no validation on the output (except that it + // must start with a summary line) + return new TestCaseData(null, null, true, args); + } + } + + } + + static TestCaseData makeTestCaseOne() { + final String arcPath = System.getProperty("test.classes", "build/classes"); + final String arcName = Paths.get(arcPath).getFileName().toString(); + final String[][] classes = new String[][] { + {"use.indirect2.UseUnsafeIndirectly2", "use.unsafe.UseClassWithUnsafe"}, + }; + final String[][] dependencies = new String[][] { + {"use.unsafe.UseUnsafeClass"}, + }; + final String[][] archives = new String[][] { + {arcName, arcPath, arcName, arcPath}, + }; + return TestCaseData.make("use.unsafe.UseUnsafeClass", arcPath, classes, + dependencies, archives, false); + } + + static TestCaseData makeTestCaseTwo() { + String arcPath = System.getProperty("test.classes", "build/classes"); + String arcName = Paths.get(arcPath).getFileName().toString(); + String[][] classes = new String[][] { + {"use.unsafe.UseUnsafeClass", "use.unsafe.UseUnsafeClass2"} + }; + String[][] dependencies = new String[][] { + {"sun.misc.Unsafe"} + }; + String[][] archive = new String[][] { + {arcName, arcPath, "JDK internal API (java.base)", "java.base"}, + }; + return TestCaseData.make("sun.misc.Unsafe", arcPath, classes, + dependencies, archive, false); + } + + static TestCaseData makeTestCaseThree() { + final String arcPath = System.getProperty("test.classes", "build/classes"); + final String arcName = Paths.get(arcPath).getFileName().toString(); + final String[][] classes = new String[][] { + {"use.indirect2.UseUnsafeIndirectly2", "use.unsafe.UseClassWithUnsafe"}, + {"use.indirect.UseUnsafeIndirectly"} + }; + final String[][] dependencies = new String[][] { + {"use.unsafe.UseUnsafeClass"}, + {"use.unsafe.UseClassWithUnsafe"} + }; + final String[][] archives = new String[][] { + {arcName, arcPath, arcName, arcPath}, + {arcName, arcPath, arcName, arcPath} + }; + return TestCaseData.make("use.unsafe.UseUnsafeClass", arcPath, classes, + dependencies, archives, true); + } + + + static TestCaseData makeTestCaseFour() { + final String arcPath = System.getProperty("test.classes", "build/classes"); + final String arcName = Paths.get(arcPath).getFileName().toString(); + final String[][] classes = new String[][] { + {"use.unsafe.UseUnsafeClass", "use.unsafe.UseUnsafeClass2"}, + {"use.indirect2.UseUnsafeIndirectly2", "use.unsafe.UseClassWithUnsafe"}, + {"use.indirect.UseUnsafeIndirectly"} + }; + final String[][] dependencies = new String[][] { + {"sun.misc.Unsafe"}, + {"use.unsafe.UseUnsafeClass"}, + {"use.unsafe.UseClassWithUnsafe"} + }; + final String[][] archives = new String[][] { + {arcName, arcPath, "JDK internal API (java.base)", "java.base"}, + {arcName, arcPath, arcName, arcPath}, + {arcName, arcPath, arcName, arcPath} + }; + return TestCaseData.make("sun.misc.Unsafe", arcPath, classes, dependencies, + archives, true); + } + + static final List> dataSuppliers = Arrays.asList( + JdepsDependencyClosure::makeTestCaseOne, + JdepsDependencyClosure::makeTestCaseTwo, + JdepsDependencyClosure::makeTestCaseThree, + JdepsDependencyClosure::makeTestCaseFour + ); + + + + /** + * The OutputStreamParser is used to parse the format of jdeps. + * It is thus dependent on that format. + */ + static class OutputStreamParser extends OutputStream { + // OutputStreamParser will populate this map: + // + // For each archive, a list of class in where dependencies where + // found... + final Map> deps; + final StringBuilder text = new StringBuilder(); + + StringBuilder[] lines = { new StringBuilder(), new StringBuilder() }; + int line = 0; + int sepi = 0; + char[] sep; + + public OutputStreamParser(Map> deps) { + this.deps = deps; + this.sep = System.getProperty("line.separator").toCharArray(); + } + + @Override + public void write(int b) throws IOException { + lines[line].append((char)b); + if (b == sep[sepi]) { + if (++sepi == sep.length) { + text.append(lines[line]); + if (lines[0].toString().startsWith(" ")) { + throw new RuntimeException("Bad formatting: " + + "summary line missing for\n"+lines[0]); + } + // Usually the output looks like that: + // -> java.base + // -> + // -> + // ... + // -> java.base + // -> + // -> + // ... + // + // We want to keep the line in lines[0] + // and have the ith line in lines[1] + if (line == 1) { + // we have either a line or an line. + String line1 = lines[0].toString(); + String line2 = lines[1].toString(); + if (line2.startsWith(" ")) { + // we have a class line, record it. + parse(line1, line2); + // prepare for next line. + lines[1] = new StringBuilder(); + } else { + // We have an archive line: We are switching to the next archive. + // put the new line in lines[0], and prepare + // for reading the next line + lines[0] = lines[1]; + lines[1] = new StringBuilder(); + } + } else { + // we just read the first line. + // prepare to read lines. + line = 1; + } + sepi = 0; + } + } else { + sepi = 0; + } + } + + // Takes a couple of lines, where line1 is an line and + // line 2 is a line. Parses the line to extract the archive + // name and dependent class name, and record them in the map... + void parse(String line1, String line2) { + String archive = line1.substring(0, line1.indexOf(" -> ")); + int l2ArrowIndex = line2.indexOf(" -> "); + String className = line2.substring(2, l2ArrowIndex).replace(" ", ""); + String depdescr = line2.substring(l2ArrowIndex + 4); + String depclass = depdescr.substring(0, depdescr.indexOf(" ")); + deps.computeIfAbsent(archive, (k) -> new HashSet<>()); + deps.get(archive).add(className); + if (VERBOSE) { + System.out.println(archive+": "+className+" depends on "+depclass); + } + } + + } + + /** + * The main method. + * + * Can be run in two modes: + *
    + *
  • From jtreg: expects 1 argument in the form {@code --test:}
  • + *
  • From command line: expected syntax is {@code -e -v jar [jars..]}
  • + *
+ *

When called from the command line this method will call jdeps recursively + * to build a closure of the dependencies on {@code } and print a summary. + *

When called from jtreg - it will call jdeps either once only or + * recursively depending on the pattern. + * @param args either {@code --test:} or {@code -e -v jar [jars..]}. + */ + public static void main(String[] args) { + runWithLocale(Locale.ENGLISH, TestCaseData.valueOf(args)::test); + } + + private static void runWithLocale(Locale loc, Runnable run) { + final Locale defaultLocale = Locale.getDefault(); + Locale.setDefault(loc); + try { + run.run(); + } finally { + Locale.setDefault(defaultLocale); + } + } + + + public static void test(String[] args, Map> expected, + String expectedText, boolean closure) { + try { + doTest(args, expected, expectedText, closure); + } catch (Throwable t) { + try { + printDiagnostic(args, expectedText, t, closure); + } catch(Throwable tt) { + throw t; + } + throw t; + } + } + + static class TextFormatException extends RuntimeException { + final String expected; + final String actual; + TextFormatException(String message, String expected, String actual) { + super(message); + this.expected = expected; + this.actual = actual; + } + } + + public static void printDiagnostic(String[] args, String expectedText, + Throwable t, boolean closure) { + if (expectedText != null || t instanceof TextFormatException) { + System.err.println("===== TEST FAILED ======="); + System.err.println("command: " + Stream.of(args) + .reduce("jdeps", (s1,s2) -> s1.concat(" ").concat(s2))); + System.err.println("===== Expected Output ======="); + System.err.append(expectedText); + System.err.println("===== Command Output ======="); + if (t instanceof TextFormatException) { + System.err.print(((TextFormatException)t).actual); + } else { + com.sun.tools.jdeps.Main.run(args, new PrintWriter(System.err)); + if (closure) System.err.println("... (closure not available) ..."); + } + System.err.println("============================="); + } + } + + public static void doTest(String[] args, Map> expected, + String expectedText, boolean closure) { + if (args.length < 3 || !"-e".equals(args[0]) || !"-v".equals(args[2])) { + System.err.println("Syntax: -e -v [list of jars or directories]"); + return; + } + Map>> alldeps = new HashMap<>(); + String depName = args[1]; + List search = new ArrayList<>(); + search.add(depName); + Set searched = new LinkedHashSet<>(); + StringBuilder text = new StringBuilder(); + while(!search.isEmpty()) { + args[1] = search.remove(0); + if (VERBOSE) { + System.out.println("Looking for " + args[1]); + } + searched.add(args[1]); + Map> deps = + alldeps.computeIfAbsent(args[1], (k) -> new HashMap<>()); + OutputStreamParser parser = new OutputStreamParser(deps); + PrintWriter writer = new PrintWriter(parser); + com.sun.tools.jdeps.Main.run(args, writer); + if (VERBOSE) { + System.out.println("Found: " + deps.values().stream() + .flatMap(s -> s.stream()).collect(Collectors.toSet())); + } + if (expectedText != null) { + text.append(parser.text.toString()); + } + search.addAll(deps.values().stream() + .flatMap(s -> s.stream()) + .filter(k -> !searched.contains(k)) + .collect(Collectors.toSet())); + if (!closure) break; + } + + // Print summary... + final Set classes = alldeps.values().stream() + .flatMap((m) -> m.values().stream()) + .flatMap(s -> s.stream()).collect(Collectors.toSet()); + Map> result = new HashMap<>(); + for (String c : classes) { + Set archives = new HashSet<>(); + Set dependencies = new HashSet<>(); + for (String d : alldeps.keySet()) { + Map> m = alldeps.get(d); + for (String a : m.keySet()) { + Set s = m.get(a); + if (s.contains(c)) { + archives.add(a); + dependencies.add(d); + } + } + } + result.put(c, dependencies); + System.out.println(c + " " + archives + " depends on " + dependencies); + } + + // If we're in jtreg, then check result (expectedText != null) + if (expectedText != null && COMPARE_TEXT) { + //text.append(String.format("%n")); + if (text.toString().equals(expectedText)) { + System.out.println("SUCCESS - got expected text"); + } else { + throw new TextFormatException("jdeps output is not as expected", + expectedText, text.toString()); + } + } + if (expected != null) { + if (expected.equals(result)) { + System.out.println("SUCCESS - found expected dependencies"); + } else if (expectedText == null) { + throw new RuntimeException("Bad dependencies: Expected " + expected + + " but found " + result); + } else { + throw new TextFormatException("Bad dependencies: Expected " + + expected + + " but found " + result, + expectedText, text.toString()); + } + } + } +} diff --git a/langtools/test/tools/jdeps/VerboseFormat/use/indirect/DontUseUnsafe2.java b/langtools/test/tools/jdeps/VerboseFormat/use/indirect/DontUseUnsafe2.java new file mode 100644 index 00000000000..4a89a5cfb53 --- /dev/null +++ b/langtools/test/tools/jdeps/VerboseFormat/use/indirect/DontUseUnsafe2.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package use.indirect; + +import use.unsafe.*; + +public class DontUseUnsafe2 { +} diff --git a/langtools/test/tools/jdeps/VerboseFormat/use/indirect/UseUnsafeIndirectly.java b/langtools/test/tools/jdeps/VerboseFormat/use/indirect/UseUnsafeIndirectly.java new file mode 100644 index 00000000000..add3363b5a7 --- /dev/null +++ b/langtools/test/tools/jdeps/VerboseFormat/use/indirect/UseUnsafeIndirectly.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package use.indirect; + +import use.unsafe.UseClassWithUnsafe; + +public class UseUnsafeIndirectly { + static UseClassWithUnsafe use = new UseClassWithUnsafe(); +} diff --git a/langtools/test/tools/jdeps/VerboseFormat/use/indirect2/DontUseUnsafe3.java b/langtools/test/tools/jdeps/VerboseFormat/use/indirect2/DontUseUnsafe3.java new file mode 100644 index 00000000000..b8dbe276b9e --- /dev/null +++ b/langtools/test/tools/jdeps/VerboseFormat/use/indirect2/DontUseUnsafe3.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package use.indirect2; + +import use.unsafe.*; + +public class DontUseUnsafe3 { + +} diff --git a/langtools/test/tools/jdeps/VerboseFormat/use/indirect2/UseUnsafeIndirectly2.java b/langtools/test/tools/jdeps/VerboseFormat/use/indirect2/UseUnsafeIndirectly2.java new file mode 100644 index 00000000000..df21bd5737f --- /dev/null +++ b/langtools/test/tools/jdeps/VerboseFormat/use/indirect2/UseUnsafeIndirectly2.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package use.indirect2; + +import use.unsafe.UseUnsafeClass; + +public class UseUnsafeIndirectly2 { + static UseUnsafeClass use = new UseUnsafeClass(); +} diff --git a/langtools/test/tools/jdeps/VerboseFormat/use/unsafe/DontUseUnsafe.java b/langtools/test/tools/jdeps/VerboseFormat/use/unsafe/DontUseUnsafe.java new file mode 100644 index 00000000000..d3a65ef1b7d --- /dev/null +++ b/langtools/test/tools/jdeps/VerboseFormat/use/unsafe/DontUseUnsafe.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package use.unsafe; + +public class DontUseUnsafe { + +} diff --git a/langtools/test/tools/jdeps/VerboseFormat/use/unsafe/UseClassWithUnsafe.java b/langtools/test/tools/jdeps/VerboseFormat/use/unsafe/UseClassWithUnsafe.java new file mode 100644 index 00000000000..f07787a1f58 --- /dev/null +++ b/langtools/test/tools/jdeps/VerboseFormat/use/unsafe/UseClassWithUnsafe.java @@ -0,0 +1,7 @@ +package use.unsafe; + +public class UseClassWithUnsafe { + + static UseUnsafeClass use = new UseUnsafeClass(); + +} diff --git a/langtools/test/tools/jdeps/VerboseFormat/use/unsafe/UseUnsafeClass.java b/langtools/test/tools/jdeps/VerboseFormat/use/unsafe/UseUnsafeClass.java new file mode 100644 index 00000000000..a57749acde4 --- /dev/null +++ b/langtools/test/tools/jdeps/VerboseFormat/use/unsafe/UseUnsafeClass.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package use.unsafe; + +import sun.misc.Unsafe; + +public class UseUnsafeClass { + static Unsafe unsafe = Unsafe.getUnsafe(); + +} diff --git a/langtools/test/tools/jdeps/VerboseFormat/use/unsafe/UseUnsafeClass2.java b/langtools/test/tools/jdeps/VerboseFormat/use/unsafe/UseUnsafeClass2.java new file mode 100644 index 00000000000..fa4997768b9 --- /dev/null +++ b/langtools/test/tools/jdeps/VerboseFormat/use/unsafe/UseUnsafeClass2.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package use.unsafe; + +import sun.misc.Unsafe; + +public class UseUnsafeClass2 { + static Unsafe unsafe = Unsafe.getUnsafe(); + +} From 318383493e6e9d95777b66f6f787573dcce1285f Mon Sep 17 00:00:00 2001 From: Shobhit Gupta Date: Fri, 22 May 2015 16:13:00 +0300 Subject: [PATCH 30/82] 8079440: [TESTBUG] @run is missing in java/awt/TrayIcon/8072769/bug8072769.java Reviewed-by: alexsch, azvegint --- jdk/test/java/awt/TrayIcon/8072769/bug8072769.java | 1 + 1 file changed, 1 insertion(+) diff --git a/jdk/test/java/awt/TrayIcon/8072769/bug8072769.java b/jdk/test/java/awt/TrayIcon/8072769/bug8072769.java index 26b64a087bd..defdf07a6c9 100644 --- a/jdk/test/java/awt/TrayIcon/8072769/bug8072769.java +++ b/jdk/test/java/awt/TrayIcon/8072769/bug8072769.java @@ -27,6 +27,7 @@ @author Semyon Sadetsky @library ../../../../lib/testlibrary @build jdk.testlibrary.OSInfo + @run main bug8072769 */ import jdk.testlibrary.OSInfo; From 3788afad1f0fb0181d472dfb6594e0b374502d95 Mon Sep 17 00:00:00 2001 From: Roger Riggs Date: Fri, 22 May 2015 10:12:18 -0400 Subject: [PATCH 31/82] 8074818: Resolve disabled warnings for libjava 8080007: Stop ignoring warnings for libjava Reviewed-by: alanb, erikj --- jdk/make/lib/CoreLibraries.gmk | 5 ----- jdk/src/java.base/share/native/libjava/FileInputStream.c | 8 ++++---- jdk/src/java.base/share/native/libjava/jdk_util.c | 8 ++++---- jdk/src/java.base/share/native/libjava/jni_util.c | 4 ++-- jdk/src/java.base/unix/native/libjava/ProcessImpl_md.c | 9 ++++++--- jdk/src/java.base/unix/native/libjava/TimeZone_md.c | 6 +++--- .../windows/native/libjava/ConcurrentPReader_md.c | 4 ++-- .../java.base/windows/native/libjava/ProcessImpl_md.c | 4 ++-- jdk/src/java.base/windows/native/libjava/java_props_md.c | 6 ++++-- jdk/src/java.base/windows/native/libjava/jni_util_md.c | 4 ++-- 10 files changed, 29 insertions(+), 29 deletions(-) diff --git a/jdk/make/lib/CoreLibraries.gmk b/jdk/make/lib/CoreLibraries.gmk index a494cb3d207..52437c8bacc 100644 --- a/jdk/make/lib/CoreLibraries.gmk +++ b/jdk/make/lib/CoreLibraries.gmk @@ -146,11 +146,6 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJAVA, \ OPTIMIZATION := HIGH, \ CFLAGS := $(CFLAGS_JDKLIB) \ $(LIBJAVA_CFLAGS), \ - DISABLED_WARNINGS_gcc := type-limits format-nonliteral, \ - DISABLED_WARNINGS_clang := int-conversion, \ - DISABLED_WARNINGS_solstudio := E_DECLARATION_IN_CODE, \ - DISABLED_WARNINGS_microsoft := 4022 4267 4996, \ - WARNINGS_AS_ERRORS_solstudio := false, \ MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libjava/mapfile-vers, \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ diff --git a/jdk/src/java.base/share/native/libjava/FileInputStream.c b/jdk/src/java.base/share/native/libjava/FileInputStream.c index dc1aea5cd64..d0e23897015 100644 --- a/jdk/src/java.base/share/native/libjava/FileInputStream.c +++ b/jdk/src/java.base/share/native/libjava/FileInputStream.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,9 @@ * questions. */ +#include +#include + #include "jni.h" #include "jni_util.h" #include "jlong.h" @@ -32,9 +35,6 @@ #include "java_io_FileInputStream.h" -#include -#include - #include "io_util_md.h" /*******************************************************************/ diff --git a/jdk/src/java.base/share/native/libjava/jdk_util.c b/jdk/src/java.base/share/native/libjava/jdk_util.c index 8fe32bfcfaf..9419e8af818 100644 --- a/jdk/src/java.base/share/native/libjava/jdk_util.c +++ b/jdk/src/java.base/share/native/libjava/jdk_util.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -58,9 +58,9 @@ JDK_GetVersionInfo0(jdk_version_info* info, size_t info_size) { /* If the JDK_BUILD_NUMBER is of format bXX and XX is an integer * XX is the jdk_build_number. */ - int len = strlen(jdk_build_string); + size_t len = strlen(jdk_build_string); if (jdk_build_string[0] == 'b' && len >= 2) { - int i = 0; + size_t i = 0; for (i = 1; i < len; i++) { if (isdigit(jdk_build_string[i])) { build_number[i-1] = jdk_build_string[i]; @@ -76,7 +76,7 @@ JDK_GetVersionInfo0(jdk_version_info* info, size_t info_size) { } } - assert(jdk_build_number >= 0 && jdk_build_number <= 255); + assert(jdk_build_number <= 255); if (strlen(jdk_update_string) == 2 || strlen(jdk_update_string) == 3) { if (isdigit(jdk_update_string[0]) && isdigit(jdk_update_string[1])) { diff --git a/jdk/src/java.base/share/native/libjava/jni_util.c b/jdk/src/java.base/share/native/libjava/jni_util.c index 2f8f4e48b1a..7308b08b192 100644 --- a/jdk/src/java.base/share/native/libjava/jni_util.c +++ b/jdk/src/java.base/share/native/libjava/jni_util.c @@ -157,7 +157,7 @@ JNU_ThrowByNameWithLastError(JNIEnv *env, const char *name, const char *defaultDetail) { char buf[256]; - int n = getLastErrorString(buf, sizeof(buf)); + size_t n = getLastErrorString(buf, sizeof(buf)); if (n > 0) { jstring s = JNU_NewStringPlatform(env, buf); @@ -448,7 +448,7 @@ getString8859_1Chars(JNIEnv *env, jstring jstr) static jstring newString646_US(JNIEnv *env, const char *str) { - int len = strlen(str); + int len = (int)strlen(str); jchar buf[512]; jchar *str1; jstring result; diff --git a/jdk/src/java.base/unix/native/libjava/ProcessImpl_md.c b/jdk/src/java.base/unix/native/libjava/ProcessImpl_md.c index b2992b5c557..2c85b9da1cc 100644 --- a/jdk/src/java.base/unix/native/libjava/ProcessImpl_md.c +++ b/jdk/src/java.base/unix/native/libjava/ProcessImpl_md.c @@ -286,12 +286,14 @@ releaseBytes(JNIEnv *env, jbyteArray arr, const char* parr) (*env)->ReleaseByteArrayElements(env, arr, (jbyte*) parr, JNI_ABORT); } +#define IOE_FORMAT "error=%d, %s" + static void throwIOException(JNIEnv *env, int errnum, const char *defaultDetail) { - static const char * const format = "error=%d, %s"; const char *detail = defaultDetail; char *errmsg; + size_t fmtsize; jstring s; if (errnum != 0) { @@ -300,11 +302,12 @@ throwIOException(JNIEnv *env, int errnum, const char *defaultDetail) detail = s; } /* ASCII Decimal representation uses 2.4 times as many bits as binary. */ - errmsg = NEW(char, strlen(format) + strlen(detail) + 3 * sizeof(errnum)); + fmtsize = sizeof(IOE_FORMAT) + strlen(detail) + 3 * sizeof(errnum); + errmsg = NEW(char, fmtsize); if (errmsg == NULL) return; - sprintf(errmsg, format, errnum, detail); + snprintf(errmsg, fmtsize, IOE_FORMAT, errnum, detail); s = JNU_NewStringPlatform(env, errmsg); if (s != NULL) { jobject x = JNU_NewObjectByName(env, "java/io/IOException", diff --git a/jdk/src/java.base/unix/native/libjava/TimeZone_md.c b/jdk/src/java.base/unix/native/libjava/TimeZone_md.c index 76c3f394b2d..849347015c6 100644 --- a/jdk/src/java.base/unix/native/libjava/TimeZone_md.c +++ b/jdk/src/java.base/unix/native/libjava/TimeZone_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -735,10 +735,10 @@ getGMTOffsetID() local_tm = localtime(&clock); if (local_tm->tm_gmtoff >= 0) { offset = (time_t) local_tm->tm_gmtoff; - sign = "+"; + sign = '+'; } else { offset = (time_t) -local_tm->tm_gmtoff; - sign = "-"; + sign = '-'; } sprintf(buf, (const char *)"GMT%c%02d:%02d", sign, (int)(offset/3600), (int)((offset%3600)/60)); diff --git a/jdk/src/java.base/windows/native/libjava/ConcurrentPReader_md.c b/jdk/src/java.base/windows/native/libjava/ConcurrentPReader_md.c index 29df5384abd..c30120155ca 100644 --- a/jdk/src/java.base/windows/native/libjava/ConcurrentPReader_md.c +++ b/jdk/src/java.base/windows/native/libjava/ConcurrentPReader_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,7 +47,7 @@ Java_jdk_internal_jimage_concurrent_ConcurrentPReader_pread(JNIEnv *env, jclass DWORD nread; BOOL result; - jlong handle = (*env)->GetLongField(env, fdo, handle_fdID); + HANDLE handle = (HANDLE)(*env)->GetLongField(env, fdo, handle_fdID); void *buf = (void *)jlong_to_ptr(address); ZeroMemory(&ov, sizeof(ov)); diff --git a/jdk/src/java.base/windows/native/libjava/ProcessImpl_md.c b/jdk/src/java.base/windows/native/libjava/ProcessImpl_md.c index 1bb5896be5f..1200a8ae09e 100644 --- a/jdk/src/java.base/windows/native/libjava/ProcessImpl_md.c +++ b/jdk/src/java.base/windows/native/libjava/ProcessImpl_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -90,7 +90,7 @@ win32Error(JNIEnv *env, const WCHAR *functionName) CP_UTF8, 0, utf16_javaMessage, - n, /*by creation n <= MESSAGE_LENGTH*/ + (int)n, /*by creation n <= MESSAGE_LENGTH*/ utf8_javaMessage, MESSAGE_LENGTH*2, NULL, diff --git a/jdk/src/java.base/windows/native/libjava/java_props_md.c b/jdk/src/java.base/windows/native/libjava/java_props_md.c index 05b668a7936..270d0e350ce 100644 --- a/jdk/src/java.base/windows/native/libjava/java_props_md.c +++ b/jdk/src/java.base/windows/native/libjava/java_props_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -345,6 +345,8 @@ SetupI18nProps(LCID lcid, char** language, char** script, char** country, return TRUE; } +// GetVersionEx is deprecated; disable the warning until a replacement is found +#pragma warning(disable : 4996) java_props_t * GetJavaProperties(JNIEnv* env) { @@ -680,5 +682,5 @@ GetJavaProperties(JNIEnv* env) jstring GetStringPlatform(JNIEnv *env, nchar* wcstr) { - return (*env)->NewString(env, wcstr, wcslen(wcstr)); + return (*env)->NewString(env, wcstr, (jsize)wcslen(wcstr)); } diff --git a/jdk/src/java.base/windows/native/libjava/jni_util_md.c b/jdk/src/java.base/windows/native/libjava/jni_util_md.c index b2bb70aa758..374e3084c07 100644 --- a/jdk/src/java.base/windows/native/libjava/jni_util_md.c +++ b/jdk/src/java.base/windows/native/libjava/jni_util_md.c @@ -124,9 +124,9 @@ getLastErrorString(char *utf8_jvmErrorMsg, size_t cbErrorMsg) CP_UTF8, 0, utf16_osErrorMsg, - n, + (int)n, utf8_jvmErrorMsg, - cbErrorMsg, + (int)cbErrorMsg, NULL, NULL); From 67b606e45634c42912141f013f41fc85a1e7bb77 Mon Sep 17 00:00:00 2001 From: Pooja Chopra Date: Fri, 22 May 2015 17:30:21 +0300 Subject: [PATCH 32/82] 8078855: [TEST_BUG] javax/swing/JComboBox/8032878/bug8032878.java fails in WindowsClassicLookAndFeel Reviewed-by: alexsch, aivanov --- jdk/test/javax/swing/JComboBox/8032878/bug8032878.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/jdk/test/javax/swing/JComboBox/8032878/bug8032878.java b/jdk/test/javax/swing/JComboBox/8032878/bug8032878.java index 32db0d8666f..c20e4862e41 100644 --- a/jdk/test/javax/swing/JComboBox/8032878/bug8032878.java +++ b/jdk/test/javax/swing/JComboBox/8032878/bug8032878.java @@ -22,7 +22,7 @@ */ /* @test - * @bug 8032878 + * @bug 8032878 8078855 * @summary Checks that JComboBox as JTable cell editor processes key events * even where setSurrendersFocusOnKeystroke flag in JTable is false and * that it does not lose the first key press where the flag is true. @@ -36,6 +36,7 @@ import java.awt.*; import java.awt.event.KeyEvent; import javax.swing.*; import javax.swing.text.JTextComponent; +import javax.swing.plaf.metal.MetalLookAndFeel; public class bug8032878 implements Runnable { private static final String ONE = "one"; @@ -53,6 +54,8 @@ public class bug8032878 implements Runnable { private volatile String text; public static void main(String[] args) throws Exception { + UIManager.setLookAndFeel(new MetalLookAndFeel()); + final bug8032878 test = new bug8032878(); test.test(false); From d1d75812b049df4c7e7b388f82a986409cfba22e Mon Sep 17 00:00:00 2001 From: Xueming Shen Date: Fri, 22 May 2015 08:56:33 -0700 Subject: [PATCH 33/82] 8064736: Part of java.util.jar.JarFile spec looks confusing with references to Zip Update the api doc for entries()/stream() accordingly Reviewed-by: alanb --- .../share/classes/java/util/jar/JarFile.java | 16 ++++++++++++++-- .../share/classes/java/util/zip/ZipFile.java | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/jdk/src/java.base/share/classes/java/util/jar/JarFile.java b/jdk/src/java.base/share/classes/java/util/jar/JarFile.java index 3c01aacecc2..f565bc02361 100644 --- a/jdk/src/java.base/share/classes/java/util/jar/JarFile.java +++ b/jdk/src/java.base/share/classes/java/util/jar/JarFile.java @@ -268,13 +268,25 @@ class JarFile extends ZipFile { } /** - * Returns an enumeration of the zip file entries. + * Returns an enumeration of the jar file entries. + * + * @return an enumeration of the jar file entries + * @throws IllegalStateException + * may be thrown if the jar file has been closed */ public Enumeration entries() { return new JarEntryIterator(); } - @Override + /** + * Returns an ordered {@code Stream} over the jar file entries. + * Entries appear in the {@code Stream} in the order they appear in + * the central directory of the jar file. + * + * @return an ordered {@code Stream} of entries in this jar file + * @throws IllegalStateException if the jar file has been closed + * @since 1.8 + */ public Stream stream() { return StreamSupport.stream(Spliterators.spliterator( new JarEntryIterator(), size(), diff --git a/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java b/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java index e6b9f01a38b..8669158bbc9 100644 --- a/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java +++ b/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java @@ -538,7 +538,7 @@ class ZipFile implements ZipConstants, Closeable { } /** - * Return an ordered {@code Stream} over the ZIP file entries. + * Returns an ordered {@code Stream} over the ZIP file entries. * Entries appear in the {@code Stream} in the order they appear in * the central directory of the ZIP file. * From 4612edcf52c160601c6e0aac514b175eb6d68d81 Mon Sep 17 00:00:00 2001 From: Xueming Shen Date: Fri, 22 May 2015 10:33:27 -0700 Subject: [PATCH 34/82] 8080803: sun/nio/cs/FindEncoderBugs.java failing intermittently To eliminate an extra byte buffer and copy in iso2022 encoding Reviewed-by: alanb, darcy --- .../share/classes/sun/nio/cs/ext/ISO2022.java | 25 +++++++------------ .../sun/nio/cs/ext/ISO2022_CN_CNS.java | 6 ++--- .../classes/sun/nio/cs/ext/ISO2022_CN_GB.java | 2 +- .../classes/sun/nio/cs/ext/ISO2022_KR.java | 6 ++--- 4 files changed, 15 insertions(+), 24 deletions(-) diff --git a/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ISO2022.java b/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ISO2022.java index 983d57d2786..7c56c8e5fbc 100644 --- a/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ISO2022.java +++ b/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ISO2022.java @@ -395,7 +395,7 @@ abstract class ISO2022 protected final byte maximumDesignatorLength = 4; - protected String SODesig, + protected byte[] SODesig, SS2Desig = null, SS3Desig = null; @@ -426,21 +426,18 @@ abstract class ISO2022 SS3DesDefined = false; } - private int unicodeToNative(char unicode, byte ebyte[]) - { + private int unicodeToNative(char unicode, byte ebyte[]) { int index = 0; - byte tmpByte[]; char convChar[] = {unicode}; byte convByte[] = new byte[4]; int converted; try{ CharBuffer cc = CharBuffer.wrap(convChar); - ByteBuffer bb = ByteBuffer.allocate(4); + ByteBuffer bb = ByteBuffer.wrap(convByte); ISOEncoder.encode(cc, bb, true); bb.flip(); converted = bb.remaining(); - bb.get(convByte,0,converted); } catch(Exception e) { return -1; } @@ -449,9 +446,8 @@ abstract class ISO2022 if (!SODesDefined) { newSODesDefined = true; ebyte[0] = ISO_ESC; - tmpByte = SODesig.getBytes(); - System.arraycopy(tmpByte,0,ebyte,1,tmpByte.length); - index = tmpByte.length+1; + System.arraycopy(SODesig, 0, ebyte, 1, SODesig.length); + index = SODesig.length + 1; } if (!shiftout) { newshiftout = true; @@ -465,9 +461,8 @@ abstract class ISO2022 if (!SS2DesDefined) { newSS2DesDefined = true; ebyte[0] = ISO_ESC; - tmpByte = SS2Desig.getBytes(); - System.arraycopy(tmpByte, 0, ebyte, 1, tmpByte.length); - index = tmpByte.length+1; + System.arraycopy(SS2Desig, 0, ebyte, 1, SS2Desig.length); + index = SS2Desig.length + 1; } ebyte[index++] = ISO_ESC; ebyte[index++] = ISO_SS2_7; @@ -477,9 +472,8 @@ abstract class ISO2022 if(!SS3DesDefined){ newSS3DesDefined = true; ebyte[0] = ISO_ESC; - tmpByte = SS3Desig.getBytes(); - System.arraycopy(tmpByte, 0, ebyte, 1, tmpByte.length); - index = tmpByte.length+1; + System.arraycopy(SS3Desig, 0, ebyte, 1, SS3Desig.length); + index = SS3Desig.length + 1; } ebyte[index++] = ISO_ESC; ebyte[index++] = ISO_SS3_7; @@ -560,7 +554,6 @@ abstract class ISO2022 } } - private CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) { diff --git a/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ISO2022_CN_CNS.java b/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ISO2022_CN_CNS.java index f9fe0417af0..af623c6c009 100644 --- a/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ISO2022_CN_CNS.java +++ b/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ISO2022_CN_CNS.java @@ -67,9 +67,9 @@ public class ISO2022_CN_CNS extends ISO2022 implements HistoricallyNamedCharset public Encoder(Charset cs) { super(cs); - SODesig = "$)G"; - SS2Desig = "$*H"; - SS3Desig = "$+I"; + SODesig = new byte[] {'$', ')', 'G' }; + SS2Desig = new byte[] {'$', '*', 'H' }; + SS3Desig = new byte[] {'$', '+', 'I' }; try { Charset cset = Charset.forName("EUC_TW"); // CNS11643 diff --git a/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ISO2022_CN_GB.java b/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ISO2022_CN_GB.java index 1faaa537d7f..aca60b5f255 100644 --- a/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ISO2022_CN_GB.java +++ b/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ISO2022_CN_GB.java @@ -68,7 +68,7 @@ public class ISO2022_CN_GB extends ISO2022 implements HistoricallyNamedCharset public Encoder(Charset cs) { super(cs); - SODesig = "$)A"; + SODesig = new byte[] { '$', ')', 'A'}; try { Charset cset = Charset.forName("EUC_CN"); // GB2312 diff --git a/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ISO2022_KR.java b/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ISO2022_KR.java index 6d96acde6f1..9ee19cbf996 100644 --- a/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ISO2022_KR.java +++ b/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ISO2022_KR.java @@ -81,11 +81,9 @@ implements HistoricallyNamedCharset private static class Encoder extends ISO2022.Encoder { - public Encoder(Charset cs) - { + public Encoder(Charset cs) { super(cs); - SODesig = "$)C"; - + SODesig = new byte[] {'$', ')', 'C' }; try { ISOEncoder = ksc5601_cs.newEncoder(); } catch (Exception e) { } From 0de6f9f413b3e86afee4a188dfdbe5c474a97f51 Mon Sep 17 00:00:00 2001 From: Joe Darcy Date: Fri, 22 May 2015 10:45:59 -0700 Subject: [PATCH 35/82] 8080901: Replace package.html files with package-info.java in the java.base module Reviewed-by: lancea, alanb, vinnie --- .../sun/java/util/jar/pack/package-info.java | 101 ++++++++++ .../com/sun/java/util/jar/pack/package.html | 104 ---------- .../classes/com/sun/net/ssl/package-info.java | 31 +++ .../classes/com/sun/net/ssl/package.html | 56 ------ .../share/classes/java/io/package-info.java | 49 +++++ .../share/classes/java/io/package.html | 52 ----- .../classes/java/lang/ref/package-info.java | 140 +++++++++++++ .../share/classes/java/lang/ref/package.html | 147 -------------- .../java/nio/channels/spi/package-info.java | 44 +++++ .../java/nio/channels/spi/package.html | 45 ----- .../java/nio/charset/package-info.java | 90 +++++++++ .../classes/java/nio/charset/package.html | 88 --------- .../java/nio/charset/spi/package-info.java | 41 ++++ .../classes/java/nio/charset/spi/package.html | 45 ----- .../share/classes/java/nio/package-info.java | 141 +++++++++++++ .../share/classes/java/nio/package.html | 139 ------------- .../share/classes/java/text/package-info.java | 47 +++++ .../share/classes/java/text/package.html | 65 ------ .../classes/java/text/spi/package-info.java | 31 +++ .../share/classes/java/text/spi/package.html | 50 ----- .../classes/java/util/jar/package-info.java | 49 +++++ .../share/classes/java/util/jar/package.html | 62 ------ .../share/classes/java/util/package-info.java | 52 +++++ .../share/classes/java/util/package.html | 55 ------ .../classes/java/util/regex/package-info.java | 56 ++++++ .../classes/java/util/regex/package.html | 66 ------- .../classes/java/util/spi/package-info.java | 31 +++ .../share/classes/java/util/spi/package.html | 50 ----- .../javax/crypto/interfaces/package-info.java | 68 +++++++ .../javax/crypto/interfaces/package.html | 74 ------- .../classes/javax/crypto/package-info.java | 68 +++++++ .../share/classes/javax/crypto/package.html | 76 ------- .../javax/crypto/spec/package-info.java | 74 +++++++ .../classes/javax/crypto/spec/package.html | 77 -------- .../share/classes/javax/net/package-info.java | 33 ++++ .../share/classes/javax/net/package.html | 54 ----- .../classes/javax/net/ssl/package-info.java | 41 ++++ .../share/classes/javax/net/ssl/package.html | 57 ------ .../share/classes/sun/reflect/package.html | 187 ------------------ 39 files changed, 1187 insertions(+), 1549 deletions(-) create mode 100644 jdk/src/java.base/share/classes/com/sun/java/util/jar/pack/package-info.java delete mode 100644 jdk/src/java.base/share/classes/com/sun/java/util/jar/pack/package.html create mode 100644 jdk/src/java.base/share/classes/com/sun/net/ssl/package-info.java delete mode 100644 jdk/src/java.base/share/classes/com/sun/net/ssl/package.html create mode 100644 jdk/src/java.base/share/classes/java/io/package-info.java delete mode 100644 jdk/src/java.base/share/classes/java/io/package.html create mode 100644 jdk/src/java.base/share/classes/java/lang/ref/package-info.java delete mode 100644 jdk/src/java.base/share/classes/java/lang/ref/package.html create mode 100644 jdk/src/java.base/share/classes/java/nio/channels/spi/package-info.java delete mode 100644 jdk/src/java.base/share/classes/java/nio/channels/spi/package.html create mode 100644 jdk/src/java.base/share/classes/java/nio/charset/package-info.java delete mode 100644 jdk/src/java.base/share/classes/java/nio/charset/package.html create mode 100644 jdk/src/java.base/share/classes/java/nio/charset/spi/package-info.java delete mode 100644 jdk/src/java.base/share/classes/java/nio/charset/spi/package.html create mode 100644 jdk/src/java.base/share/classes/java/nio/package-info.java delete mode 100644 jdk/src/java.base/share/classes/java/nio/package.html create mode 100644 jdk/src/java.base/share/classes/java/text/package-info.java delete mode 100644 jdk/src/java.base/share/classes/java/text/package.html create mode 100644 jdk/src/java.base/share/classes/java/text/spi/package-info.java delete mode 100644 jdk/src/java.base/share/classes/java/text/spi/package.html create mode 100644 jdk/src/java.base/share/classes/java/util/jar/package-info.java delete mode 100644 jdk/src/java.base/share/classes/java/util/jar/package.html create mode 100644 jdk/src/java.base/share/classes/java/util/package-info.java delete mode 100644 jdk/src/java.base/share/classes/java/util/package.html create mode 100644 jdk/src/java.base/share/classes/java/util/regex/package-info.java delete mode 100644 jdk/src/java.base/share/classes/java/util/regex/package.html create mode 100644 jdk/src/java.base/share/classes/java/util/spi/package-info.java delete mode 100644 jdk/src/java.base/share/classes/java/util/spi/package.html create mode 100644 jdk/src/java.base/share/classes/javax/crypto/interfaces/package-info.java delete mode 100644 jdk/src/java.base/share/classes/javax/crypto/interfaces/package.html create mode 100644 jdk/src/java.base/share/classes/javax/crypto/package-info.java delete mode 100644 jdk/src/java.base/share/classes/javax/crypto/package.html create mode 100644 jdk/src/java.base/share/classes/javax/crypto/spec/package-info.java delete mode 100644 jdk/src/java.base/share/classes/javax/crypto/spec/package.html create mode 100644 jdk/src/java.base/share/classes/javax/net/package-info.java delete mode 100644 jdk/src/java.base/share/classes/javax/net/package.html create mode 100644 jdk/src/java.base/share/classes/javax/net/ssl/package-info.java delete mode 100644 jdk/src/java.base/share/classes/javax/net/ssl/package.html delete mode 100644 jdk/src/java.base/share/classes/sun/reflect/package.html diff --git a/jdk/src/java.base/share/classes/com/sun/java/util/jar/pack/package-info.java b/jdk/src/java.base/share/classes/com/sun/java/util/jar/pack/package-info.java new file mode 100644 index 00000000000..be6c818a249 --- /dev/null +++ b/jdk/src/java.base/share/classes/com/sun/java/util/jar/pack/package-info.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * This package provides methods to read files from a JAR file and to + * transform them to a more compact transfer format called Pack200. + * It also provides methods to receive the transmitted data and expand + * it into a JAR file equivalent to the original JAR file. + * + *

+ * The {@code pack} methods may be used by application developers who + * wish to deploy large JARs on the web. The {@code unpack} methods + * may be used by deployment applications such as Java Web Start and + * Java Plugin. + * + *

+ * In typical use, the packed output should be further compressed + * using a suitable tool such as gzip or + * {@code java.util.zip.GZIPOutputStream}. The resulting file (with + * a suffix ".pack.gz") should be hosted on a HTTP/1.1 compliant + * server, which will be capable of handling "Accept-Encoding", as + * specified by the HTTP 1.1 RFC2616 specification. + * + *

+ * NOTE: It is recommended that the original ".jar" file be + * hosted in addition to the ".pack.gz" file, so that older client + * implementations will continue to work reliably. (On-demand + * compression by the server is not recommended.) + * + *

+ * When a client application requests a ".jar" file (call it + * "Large.jar"), the client will transmit the headers + * "Content-Type=application/x-java-archive" as well as + * "Accept-Encoding=pack200-gzip". This indicates to the server that + * the client application desires an version of the file encoded with + * Pack200 and further compressed with gzip. + * + *

+ * The server implementation will typically check for the existence of + * "Large.pack.gz". If that file is available, the server will + * transmit it with the headers "Content-Encoding=pack200-gzip" and + * "Content-Type=application/x-java-archive". + * + *

+ * If the ".pack.gz" file, is not available, then the server will + * transmit the original ".jar" with "Content-Encoding=null" and + * "Content-Type=application/x-java-archive". + * + *

+ * A MIME type of "application/x-java-pack200" may be specified by the + * client application to indicate a ".pack" file is required. + * However, this has limited capability, and is not recommended. + * + *

Package Specification

+ * Network Transfer Format Specification : + * http://jcp.org/en/jsr/detail?id=200 + * + *

Related Documentation

+ * For overviews, tutorials, examples, guides, and tool documentation, please + * see: + * + * + *
  • + * @since 1.5
  • + */ +package com.sun.java.util.jar.pack; diff --git a/jdk/src/java.base/share/classes/com/sun/java/util/jar/pack/package.html b/jdk/src/java.base/share/classes/com/sun/java/util/jar/pack/package.html deleted file mode 100644 index 5fb74f66ba0..00000000000 --- a/jdk/src/java.base/share/classes/com/sun/java/util/jar/pack/package.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - -

    -This package provides methods to read files from a JAR file and -to transform them to a more compact transfer format called Pack200. -It also provides methods to receive the transmitted data and expand -it into a JAR file equivalent to the original JAR file. - -

    -The pack methods may be used by application developers -who wish to deploy large JARs on the web. The unpack methods may be used -by deployment applications such as Java Web Start and Java Plugin. - -

    -In typical use, the packed output should be further compressed using -a suitable tool such as gzip or java.util.zip.GZIPOutputStream. -The resulting file (with a suffix ".pack.gz") should be hosted on a HTTP/1.1 -compliant server, which will be capable of handling "Accept-Encoding", -as specified by the HTTP 1.1 RFC2616 specification. - -

    -NOTE: It is recommended that the original ".jar" file be hosted -in addition to the ".pack.gz" file, so that older client implementations -will continue to work reliably. -(On-demand compression by the server is not recommended.) - -

    -When a client application requests a ".jar" file (call it "Large.jar"), -the client will transmit the headers -"Content-Type=application/x-java-archive" as well as "Accept-Encoding=pack200-gzip". -This indicates to the server that the client application desires an version -of the file encoded with Pack200 and further compressed with gzip. - -

    -The server implementation will typically check for the existence of "Large.pack.gz". -If that file is available, the server will transmit it with the headers -"Content-Encoding=pack200-gzip" and "Content-Type=application/x-java-archive". - -

    -If the ".pack.gz" file, is not available, then the server will transmit -the original ".jar" -with "Content-Encoding=null" and "Content-Type=application/x-java-archive". - -

    -A MIME type of "application/x-java-pack200" may be specified by the -client application to indicate a ".pack" file is required. -However, this has limited capability, and is not recommended. - -

    Package Specification

    -Network Transfer Format Specification :
    -http://jcp.org/en/jsr/detail?id=200 - -

    Related Documentation

    -For overviews, tutorials, examples, guides, and tool documentation, please -see: - - -
  • -@since 1.5
  • - -
    - - diff --git a/jdk/src/java.base/share/classes/com/sun/net/ssl/package-info.java b/jdk/src/java.base/share/classes/com/sun/net/ssl/package-info.java new file mode 100644 index 00000000000..eb59e238164 --- /dev/null +++ b/jdk/src/java.base/share/classes/com/sun/net/ssl/package-info.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Provides classes related to creating and configuring secure socket + * factories. These classes are used with the Sun reference + * implementation of the Java Secure Socket Extension (JSSE). + */ +package com.sun.net.ssl; diff --git a/jdk/src/java.base/share/classes/com/sun/net/ssl/package.html b/jdk/src/java.base/share/classes/com/sun/net/ssl/package.html deleted file mode 100644 index 20352c2b117..00000000000 --- a/jdk/src/java.base/share/classes/com/sun/net/ssl/package.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - -Provides classes related to creating and configuring secure socket factories. -These classes are used with the Sun reference implementation of the Java -Secure Socket Extension (JSSE). - - - - diff --git a/jdk/src/java.base/share/classes/java/io/package-info.java b/jdk/src/java.base/share/classes/java/io/package-info.java new file mode 100644 index 00000000000..cf1b699cd0d --- /dev/null +++ b/jdk/src/java.base/share/classes/java/io/package-info.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Provides for system input and output through data streams, + * serialization and the file system. + * + * Unless otherwise noted, passing a null argument to a constructor or + * method in any class or interface in this package will cause a + * {@code NullPointerException} to be thrown. + * + *

    Package Specification

    + *
    + * + *

    Related Documentation

    + * + * For overviews, tutorials, examples, guides, and tool documentation, + * please see: + * + * + * @since 1.0 + */ +package java.io; diff --git a/jdk/src/java.base/share/classes/java/io/package.html b/jdk/src/java.base/share/classes/java/io/package.html deleted file mode 100644 index 5d80e56da9d..00000000000 --- a/jdk/src/java.base/share/classes/java/io/package.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - -Provides for system input and output through data streams, -serialization and the file system. - -Unless otherwise noted, passing a null argument to a constructor -or method in any class or interface in this package will cause a -NullPointerException to be thrown. - -

    Package Specification

    - - -

    Related Documentation

    - -For overviews, tutorials, examples, guides, and tool documentation, -please see: - - -@since 1.0 - - diff --git a/jdk/src/java.base/share/classes/java/lang/ref/package-info.java b/jdk/src/java.base/share/classes/java/lang/ref/package-info.java new file mode 100644 index 00000000000..a6273a92183 --- /dev/null +++ b/jdk/src/java.base/share/classes/java/lang/ref/package-info.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Provides reference-object classes, which support a limited degree + * of interaction with the garbage collector. A program may use a + * reference object to maintain a reference to some other object in + * such a way that the latter object may still be reclaimed by the + * collector. A program may also arrange to be notified some time + * after the collector has determined that the reachability of a given + * object has changed. + * + *

    Package Specification

    + * + * A reference object encapsulates a reference to some other + * object so that the reference itself may be examined and manipulated + * like any other object. Three types of reference objects are + * provided, each weaker than the last: soft, weak, + * and phantom. Each type corresponds to a different level + * of reachability, as defined below. Soft references are for + * implementing memory-sensitive caches, weak references are for + * implementing canonicalizing mappings that do not prevent their keys + * (or values) from being reclaimed, and phantom references are for + * scheduling pre-mortem cleanup actions in a more flexible way than + * is possible with the Java finalization mechanism. + * + *

    Each reference-object type is implemented by a subclass of the + * abstract base {@link java.lang.ref.Reference} class. + * An instance of one of these subclasses encapsulates a single + * reference to a particular object, called the referent. + * Every reference object provides methods for getting and clearing + * the reference. Aside from the clearing operation reference objects + * are otherwise immutable, so no {@code set} operation is + * provided. A program may further subclass these subclasses, adding + * whatever fields and methods are required for its purposes, or it + * may use these subclasses without change. + * + *

    Notification

    + * + * A program may request to be notified of changes in an object's + * reachability by registering an appropriate reference + * object with a reference queue at the time the reference + * object is created. Some time after the garbage collector + * determines that the reachability of the referent has changed to the + * value corresponding to the type of the reference, it will add the + * reference to the associated queue. At this point, the reference is + * considered to be enqueued. The program may remove + * references from a queue either by polling or by blocking until a + * reference becomes available. Reference queues are implemented by + * the {@link java.lang.ref.ReferenceQueue} class. + * + *

    The relationship between a registered reference object and its + * queue is one-sided. That is, a queue does not keep track of the + * references that are registered with it. If a registered reference + * becomes unreachable itself, then it will never be enqueued. It is + * the responsibility of the program using reference objects to ensure + * that the objects remain reachable for as long as the program is + * interested in their referents. + * + *

    While some programs will choose to dedicate a thread to + * removing reference objects from one or more queues and processing + * them, this is by no means necessary. A tactic that often works + * well is to examine a reference queue in the course of performing + * some other fairly-frequent action. For example, a hashtable that + * uses weak references to implement weak keys could poll its + * reference queue each time the table is accessed. This is how the + * {@link java.util.WeakHashMap} class works. Because + * the {@link java.lang.ref.ReferenceQueue#poll + * ReferenceQueue.poll} method simply checks an internal data + * structure, this check will add little overhead to the hashtable + * access methods. + * + *

    Automatically-cleared references

    + * + * Soft and weak references are automatically cleared by the collector + * before being added to the queues with which they are registered, if + * any. Therefore soft and weak references need not be registered + * with a queue in order to be useful, while phantom references do. + * An object that is reachable via phantom references will remain so + * until all such references are cleared or themselves become + * unreachable. + * + * + *

    Reachability

    + * + * Going from strongest to weakest, the different levels of + * reachability reflect the life cycle of an object. They are + * operationally defined as follows: + * + *
      + * + *
    • An object is strongly reachable if it can be reached + * by some thread without traversing any reference objects. A + * newly-created object is strongly reachable by the thread that + * created it. + * + *
    • An object is softly reachable if it is not strongly + * reachable but can be reached by traversing a soft reference. + * + *
    • An object is weakly reachable if it is neither + * strongly nor softly reachable but can be reached by traversing a + * weak reference. When the weak references to a weakly-reachable + * object are cleared, the object becomes eligible for finalization. + * + *
    • An object is phantom reachable if it is neither + * strongly, softly, nor weakly reachable, it has been finalized, and + * some phantom reference refers to it. + * + *
    • Finally, an object is unreachable, and therefore + * eligible for reclamation, when it is not reachable in any of the + * above ways. + * + *
    + * + * @author Mark Reinhold + * @since 1.2 + */ +package java.lang.ref; diff --git a/jdk/src/java.base/share/classes/java/lang/ref/package.html b/jdk/src/java.base/share/classes/java/lang/ref/package.html deleted file mode 100644 index f22a455f6ac..00000000000 --- a/jdk/src/java.base/share/classes/java/lang/ref/package.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - -Provides reference-object classes, which support a limited degree of -interaction with the garbage collector. A program may use a reference object -to maintain a reference to some other object in such a way that the latter -object may still be reclaimed by the collector. A program may also arrange to -be notified some time after the collector has determined that the reachability -of a given object has changed. - - -

    Package Specification

    - -A reference object encapsulates a reference to some other object so -that the reference itself may be examined and manipulated like any other -object. Three types of reference objects are provided, each weaker than the -last: soft, weak, and phantom. Each type -corresponds to a different level of reachability, as defined below. Soft -references are for implementing memory-sensitive caches, weak references are -for implementing canonicalizing mappings that do not prevent their keys (or -values) from being reclaimed, and phantom references are for scheduling -pre-mortem cleanup actions in a more flexible way than is possible with the -Java finalization mechanism. - -

    Each reference-object type is implemented by a subclass of the abstract -base {@link java.lang.ref.Reference} class. An instance of one of -these subclasses encapsulates a single reference to a particular object, called -the referent. Every reference object provides methods for getting and -clearing the reference. Aside from the clearing operation reference objects -are otherwise immutable, so no set operation is provided. A -program may further subclass these subclasses, adding whatever fields and -methods are required for its purposes, or it may use these subclasses without -change. - - -

    Notification

    - -A program may request to be notified of changes in an object's reachability by -registering an appropriate reference object with a reference -queue at the time the reference object is created. Some time after the -garbage collector determines that the reachability of the referent has changed -to the value corresponding to the type of the reference, it will add the -reference to the associated queue. At this point, the reference is considered -to be enqueued. The program may remove references from a queue either -by polling or by blocking until a reference becomes available. Reference -queues are implemented by the {@link java.lang.ref.ReferenceQueue} -class. - -

    The relationship between a registered reference object and its queue is -one-sided. That is, a queue does not keep track of the references that are -registered with it. If a registered reference becomes unreachable itself, then -it will never be enqueued. It is the responsibility of the program using -reference objects to ensure that the objects remain reachable for as long as -the program is interested in their referents. - -

    While some programs will choose to dedicate a thread to removing reference -objects from one or more queues and processing them, this is by no means -necessary. A tactic that often works well is to examine a reference queue in -the course of performing some other fairly-frequent action. For example, a -hashtable that uses weak references to implement weak keys could poll its -reference queue each time the table is accessed. This is how the {@link -java.util.WeakHashMap} class works. Because the {@link -java.lang.ref.ReferenceQueue#poll ReferenceQueue.poll} method simply -checks an internal data structure, this check will add little overhead to the -hashtable access methods. - - -

    Automatically-cleared references

    - -Soft and weak references are automatically cleared by the collector before -being added to the queues with which they are registered, if any. Therefore -soft and weak references need not be registered with a queue in order to be -useful, while phantom references do. An object that is reachable via phantom -references will remain so until all such references are cleared or themselves -become unreachable. - - - -

    Reachability

    - -Going from strongest to weakest, the different levels of reachability reflect -the life cycle of an object. They are operationally defined as follows: - -
      - -
    • An object is strongly reachable if it can be reached by some -thread without traversing any reference objects. A newly-created object is -strongly reachable by the thread that created it. - -
    • An object is softly reachable if it is not strongly reachable but -can be reached by traversing a soft reference. - -
    • An object is weakly reachable if it is neither strongly nor -softly reachable but can be reached by traversing a weak reference. When the -weak references to a weakly-reachable object are cleared, the object becomes -eligible for finalization. - -
    • An object is phantom reachable if it is neither strongly, softly, -nor weakly reachable, it has been finalized, and some phantom reference refers -to it. - -
    • Finally, an object is unreachable, and therefore eligible for -reclamation, when it is not reachable in any of the above ways. - -
    - - -@author Mark Reinhold -@since 1.2 - - - - diff --git a/jdk/src/java.base/share/classes/java/nio/channels/spi/package-info.java b/jdk/src/java.base/share/classes/java/nio/channels/spi/package-info.java new file mode 100644 index 00000000000..84365567a89 --- /dev/null +++ b/jdk/src/java.base/share/classes/java/nio/channels/spi/package-info.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Service-provider classes for the {@link java.nio.channels} + * package. + * + *

    Only developers who are defining new selector providers or + * asynchronous channel providers should need to make direct use of + * this package.

    + * + *

    Unless otherwise noted, passing a {@code null} argument to a + * constructor or method in any class or interface in this package + * will cause a {@link java.lang.NullPointerException + * NullPointerException} to be thrown. + * + * + * @since 1.4 + * @author Mark Reinhold + * @author JSR-51 Expert Group + */ +package java.nio.channels.spi; diff --git a/jdk/src/java.base/share/classes/java/nio/channels/spi/package.html b/jdk/src/java.base/share/classes/java/nio/channels/spi/package.html deleted file mode 100644 index a6f8cbfdcb3..00000000000 --- a/jdk/src/java.base/share/classes/java/nio/channels/spi/package.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - -Service-provider classes for the {@link java.nio.channels} package. - -

    Only developers who are defining new selector providers or asynchronous -channel providers should need to make direct use of this package.

    - -

    Unless otherwise noted, passing a null argument to a constructor -or method in any class or interface in this package will cause a {@link -java.lang.NullPointerException NullPointerException} to be thrown. - - -@since 1.4 -@author Mark Reinhold -@author JSR-51 Expert Group - - - diff --git a/jdk/src/java.base/share/classes/java/nio/charset/package-info.java b/jdk/src/java.base/share/classes/java/nio/charset/package-info.java new file mode 100644 index 00000000000..e18f568004a --- /dev/null +++ b/jdk/src/java.base/share/classes/java/nio/charset/package-info.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Defines charsets, decoders, and encoders, for translating between + * bytes and Unicode characters. + * + *

    + * + * + * + * + * + * + * + * + * + * + * + * + *
    Class nameDescription
    {@link java.nio.charset.Charset}A named mapping between characters
    and bytes
    {@link java.nio.charset.CharsetDecoder}Decodes bytes into characters
    {@link java.nio.charset.CharsetEncoder}  Encodes characters into bytes
    {@link java.nio.charset.CoderResult}  Describes coder results
    {@link java.nio.charset.CodingErrorAction}  Describes actions to take when
    coding errors are detected
    + * + *

    A charset is named mapping between sequences of + * sixteen-bit Unicode characters and sequences of bytes, in the sense + * defined in RFC 2278. + * A decoder is an engine which transforms bytes in a specific + * charset into characters, and an encoder is an engine which + * transforms characters into bytes. Encoders and decoders operate on + * byte and character buffers. They are collectively referred to as + * coders. + * + *

    The {@link java.nio.charset.Charset} class defines methods for + * creating coders for a given charset and for retrieving the various + * names associated with a charset. It also defines static methods + * for testing whether a particular charset is supported, for locating + * charset instances by name, and for constructing a map that contains + * every charset for which support is available in the current Java + * virtual machine. + * + *

    Most users will not use these classes directly; instead they + * will use the existing charset-related constructors and methods in + * the {@link java.lang.String} class, together with the existing + * {@link java.io.InputStreamReader} and {@link + * java.io.OutputStreamWriter} classes, all of whose implementations + * have been reworked to make use of the charset facilities defined in + * this package. A small number of changes have been made to the + * {@link java.io.InputStreamReader} and {@link + * java.io.OutputStreamWriter} classes in order to allow explicit + * charset objects to be specified in the construction of instances of + * those classes. + * + *

    Support for new charsets can be made available via the + * interface defined in the {@link + * java.nio.charset.spi.CharsetProvider} class in the {@link + * java.nio.charset.spi} package. + * + *

    Unless otherwise noted, passing a null argument to a + * constructor or method in any class or interface in this package + * will cause a {@link java.lang.NullPointerException + * NullPointerException} to be thrown. + * + * + * @since 1.4 + * @author Mark Reinhold + * @author JSR-51 Expert Group + */ +package java.nio.charset; diff --git a/jdk/src/java.base/share/classes/java/nio/charset/package.html b/jdk/src/java.base/share/classes/java/nio/charset/package.html deleted file mode 100644 index 69b160b8139..00000000000 --- a/jdk/src/java.base/share/classes/java/nio/charset/package.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -Defines charsets, decoders, and encoders, for translating between bytes and -Unicode characters. - -

    - - - - - - - - - - - - -

    Class name

    Description

    {@link java.nio.charset.Charset}A named mapping between characters
    and bytes
    {@link java.nio.charset.CharsetDecoder}Decodes bytes into characters
    {@link java.nio.charset.CharsetEncoder}  Encodes characters into bytes
    {@link java.nio.charset.CoderResult}  Describes coder results
    {@link java.nio.charset.CodingErrorAction}  Describes actions to take when
    coding errors are detected
    - -

    A charset is named mapping between sequences of sixteen-bit Unicode -characters and sequences of bytes, in the sense defined in RFC 2278. A -decoder is an engine which transforms bytes in a specific charset into -characters, and an encoder is an engine which transforms characters into -bytes. Encoders and decoders operate on byte and character buffers. They are -collectively referred to as coders. - -

    The {@link java.nio.charset.Charset} class defines methods for creating -coders for a given charset and for retrieving the various names associated with -a charset. It also defines static methods for testing whether a particular -charset is supported, for locating charset instances by name, and for -constructing a map that contains every charset for which support is available -in the current Java virtual machine. - -

    Most users will not use these classes directly; instead they will use the -existing charset-related constructors and methods in the {@link -java.lang.String} class, together with the existing {@link -java.io.InputStreamReader} and {@link java.io.OutputStreamWriter} classes, all -of whose implementations have been reworked to make use of the charset -facilities defined in this package. A small number of changes have been made -to the {@link java.io.InputStreamReader} and {@link java.io.OutputStreamWriter} -classes in order to allow explicit charset objects to be specified in the -construction of instances of those classes. - -

    Support for new charsets can be made available via the interface defined in -the {@link java.nio.charset.spi.CharsetProvider} class in the {@link -java.nio.charset.spi} package. - -

    Unless otherwise noted, passing a null argument to a constructor -or method in any class or interface in this package will cause a {@link -java.lang.NullPointerException NullPointerException} to be thrown. - - -@since 1.4 -@author Mark Reinhold -@author JSR-51 Expert Group - - - diff --git a/jdk/src/java.base/share/classes/java/nio/charset/spi/package-info.java b/jdk/src/java.base/share/classes/java/nio/charset/spi/package-info.java new file mode 100644 index 00000000000..8e5e81da703 --- /dev/null +++ b/jdk/src/java.base/share/classes/java/nio/charset/spi/package-info.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Service-provider classes for the {@link java.nio.charset} package. + * + *

    Only developers who are defining new charsets should need to + * make direct use of this package.

    + * + *

    Unless otherwise noted, passing a {@code null} argument to a + * constructor or method in any class or interface in this package + * will cause a {@link java.lang.NullPointerException + * NullPointerException} to be thrown. + * + * @since 1.4 + * @author Mark Reinhold + * @author JSR-51 Expert Group + */ +package java.nio.charset.spi; diff --git a/jdk/src/java.base/share/classes/java/nio/charset/spi/package.html b/jdk/src/java.base/share/classes/java/nio/charset/spi/package.html deleted file mode 100644 index a7b7ab18879..00000000000 --- a/jdk/src/java.base/share/classes/java/nio/charset/spi/package.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - -Service-provider classes for the {@link java.nio.charset} package. - -

    Only developers who are defining new charsets should need to make direct -use of this package.

    - -

    Unless otherwise noted, passing a null argument to a constructor -or method in any class or interface in this package will cause a {@link -java.lang.NullPointerException NullPointerException} to be thrown. - - -@since 1.4 -@author Mark Reinhold -@author JSR-51 Expert Group - - - diff --git a/jdk/src/java.base/share/classes/java/nio/package-info.java b/jdk/src/java.base/share/classes/java/nio/package-info.java new file mode 100644 index 00000000000..374e0bb59a9 --- /dev/null +++ b/jdk/src/java.base/share/classes/java/nio/package-info.java @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Defines buffers, which are containers for data, and provides an + * overview of the other NIO packages. + * + * + *

    The central abstractions of the NIO APIs are:

    + * + *
      + * + *
    • Buffers, which are containers for data; + *

    • + * + *
    • Charsets and their + * associated decoders and encoders,
      which + * translate between bytes and Unicode characters;

    • + * + *
    • Channels of + * various types, which represent connections
      to entities + * capable of performing I/O operations; and

    • + * + *
    • Selectors and selection keys, which + * together with
      selectable channels define a multiplexed, + * non-blocking
      I/O
       facility.

    • + * + *
    + * + *

    The java.nio package defines the buffer classes, which + * are used throughout the NIO APIs. The charset API is defined in + * the {@link java.nio.charset} package, and the channel and selector + * APIs are defined in the {@link java.nio.channels} package. Each of + * these subpackages has its own service-provider (SPI) subpackage, + * the contents of which can be used to extend the platform's default + * implementations or to construct alternative implementations. + * + * + * + *

    + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    BuffersDescription
    {@link java.nio.Buffer}Position, limit, and capacity; + *
    clear, flip, rewind, and mark/reset
      {@link java.nio.ByteBuffer}Get/put, compact, views; allocate, wrap
        {@link java.nio.MappedByteBuffer}  A byte buffer mapped to a file
      {@link java.nio.CharBuffer}Get/put, compact; allocate, wrap
      {@link java.nio.DoubleBuffer}    ' '
      {@link java.nio.FloatBuffer}    ' '
      {@link java.nio.IntBuffer}    ' '
      {@link java.nio.LongBuffer}    ' '
      {@link java.nio.ShortBuffer}    ' '
    {@link java.nio.ByteOrder}Typesafe enumeration for byte orders
    + * + *

    A buffer is a container for a fixed amount of data of a + * specific primitive type. In addition to its content a buffer has a + * position, which is the index of the next element to be read + * or written, and a limit, which is the index of the first + * element that should not be read or written. The base {@link + * java.nio.Buffer} class defines these properties as well as methods + * for clearing, flipping, and rewinding, for + * marking the current position, and for resetting the + * position to the previous mark. + * + *

    There is a buffer class for each non-boolean primitive type. + * Each class defines a family of get and put methods + * for moving data out of and in to a buffer, methods for + * compacting, duplicating, and slicing a buffer, + * and static methods for allocating a new buffer as well as + * for wrapping an existing array into a buffer. + * + *

    Byte buffers are distinguished in that they can be used as the + * sources and targets of I/O operations. They also support several + * features not found in the other buffer classes: + * + *

      + * + *
    • A byte buffer can be allocated as a direct buffer, in which + * case the Java virtual machine will make a best effort to perform + * native I/O operations directly upon it.

    • + * + *
    • A byte buffer can be created by {@link + * java.nio.channels.FileChannel#map mapping} a region of a + * file directly into memory, in which case a few additional + * file-related operations defined in the {@link + * java.nio.MappedByteBuffer} class are available.

    • + * + *
    • A byte buffer provides access to its content as either a + * heterogeneous or homogeneous sequence of binary data of any + * non-boolean primitive type, in either big-endian or little-endian + * byte order.

    • + * + *
    + * + *

    Unless otherwise noted, passing a null argument to a + * constructor or method in any class or interface in this package + * will cause a {@link java.lang.NullPointerException + * NullPointerException} to be thrown. + * + * @since 1.4 + * @author Mark Reinhold + * @author JSR-51 Expert Group + */ +package java.nio; diff --git a/jdk/src/java.base/share/classes/java/nio/package.html b/jdk/src/java.base/share/classes/java/nio/package.html deleted file mode 100644 index 1ce7131f869..00000000000 --- a/jdk/src/java.base/share/classes/java/nio/package.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - -Defines buffers, which are containers for data, and provides an overview of the -other NIO packages. - - -

    The central abstractions of the NIO APIs are:

    - -
      - -
    • Buffers, which are containers for data; -

    • - -
    • Charsets and their - associated decoders and encoders,
      which translate between - bytes and Unicode characters;

    • - -
    • Channels of - various types, which represent connections
      to entities capable of - performing I/O operations; and

    • - -
    • Selectors and selection keys, which together with
      - selectable channels define a multiplexed, non-blocking
      - I/O
       facility.

    • - -
    - -

    The java.nio package defines the buffer classes, which are used -throughout the NIO APIs. The charset API is defined in the {@link -java.nio.charset} package, and the channel and selector APIs are defined in the -{@link java.nio.channels} package. Each of these subpackages has its own -service-provider (SPI) subpackage, the contents of which can be used to extend -the platform's default implementations or to construct alternative -implementations. - - - - -

    - - - - - - - - - - - - - - - - - - - - - -

    Buffers

    Description

    {@link java.nio.Buffer}Position, limit, and capacity; -
    clear, flip, rewind, and mark/reset
      {@link java.nio.ByteBuffer}Get/put, compact, views; allocate, wrap
        {@link java.nio.MappedByteBuffer}  A byte buffer mapped to a file
      {@link java.nio.CharBuffer}Get/put, compact; allocate, wrap
      {@link java.nio.DoubleBuffer}    ' '
      {@link java.nio.FloatBuffer}    ' '
      {@link java.nio.IntBuffer}    ' '
      {@link java.nio.LongBuffer}    ' '
      {@link java.nio.ShortBuffer}    ' '
    {@link java.nio.ByteOrder}Typesafe enumeration for byte orders
    - -

    A buffer is a container for a fixed amount of data of a specific -primitive type. In addition to its content a buffer has a position, -which is the index of the next element to be read or written, and a -limit, which is the index of the first element that should not be read -or written. The base {@link java.nio.Buffer} class defines these properties as -well as methods for clearing, flipping, and rewinding, for -marking the current position, and for resetting the position to -the previous mark. - -

    There is a buffer class for each non-boolean primitive type. Each class -defines a family of get and put methods for moving data out of -and in to a buffer, methods for compacting, duplicating, and -slicing a buffer, and static methods for allocating a new buffer -as well as for wrapping an existing array into a buffer. - -

    Byte buffers are distinguished in that they can be used as the sources and -targets of I/O operations. They also support several features not found in the -other buffer classes: - -

      - -
    • A byte buffer can be allocated as a - direct buffer, in which case the Java virtual machine will make a - best effort to perform native I/O operations directly upon it.

    • - -
    • A byte buffer can be created by {@link - java.nio.channels.FileChannel#map mapping} a region of a - file directly into memory, in which case a few additional file-related - operations defined in the {@link java.nio.MappedByteBuffer} class are - available.

    • - -
    • A byte buffer provides access to its content as either a heterogeneous - or homogeneous sequence of binary data - of any non-boolean primitive type, in either big-endian or little-endian byte order.

    • - -
    - -

    Unless otherwise noted, passing a null argument to a constructor -or method in any class or interface in this package will cause a {@link -java.lang.NullPointerException NullPointerException} to be thrown. - -@since 1.4 -@author Mark Reinhold -@author JSR-51 Expert Group - - - diff --git a/jdk/src/java.base/share/classes/java/text/package-info.java b/jdk/src/java.base/share/classes/java/text/package-info.java new file mode 100644 index 00000000000..b4c411844bd --- /dev/null +++ b/jdk/src/java.base/share/classes/java/text/package-info.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Provides classes and interfaces for handling text, dates, numbers, + * and messages in a manner independent of natural languages. This + * means your main application or applet can be written to be + * language-independent, and it can rely upon separate, + * dynamically-linked localized resources. This allows the flexibility + * of adding localizations for new localizations at any time. + * + *

    These classes are capable of formatting dates, numbers, and + * messages, parsing; searching and sorting strings; and iterating + * over characters, words, sentences, and line breaks. This package + * contains three main groups of classes and interfaces: + * + *

      + *
    • Classes for iteration over text + *
    • Classes for formatting and parsing + *
    • Classes for string collation + *
    + * + * @since 1.1 + */ +package java.text; diff --git a/jdk/src/java.base/share/classes/java/text/package.html b/jdk/src/java.base/share/classes/java/text/package.html deleted file mode 100644 index 3e9e51f15c7..00000000000 --- a/jdk/src/java.base/share/classes/java/text/package.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - -Provides classes and interfaces for handling text, dates, numbers, and messages -in a manner independent of natural languages. This means your main application -or applet can be written to be language-independent, and it can rely upon -separate, dynamically-linked localized resources. This allows the flexibility -of adding localizations for new localizations at any time. -

    -These classes are capable of formatting dates, numbers, and messages, parsing; -searching and sorting strings; and iterating over characters, words, sentences, -and line breaks. This package contains three main groups of classes and -interfaces: -

      -
    • Classes for iteration over text -
    • Classes for formatting and parsing -
    • Classes for string collation -
    - - -@since 1.1 - - diff --git a/jdk/src/java.base/share/classes/java/text/spi/package-info.java b/jdk/src/java.base/share/classes/java/text/spi/package-info.java new file mode 100644 index 00000000000..3b8fa8bc9a1 --- /dev/null +++ b/jdk/src/java.base/share/classes/java/text/spi/package-info.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Service provider classes for the classes in the java.text package. + * + * @since 1.6 + */ +package java.text.spi; diff --git a/jdk/src/java.base/share/classes/java/text/spi/package.html b/jdk/src/java.base/share/classes/java/text/spi/package.html deleted file mode 100644 index fa08ec1fb35..00000000000 --- a/jdk/src/java.base/share/classes/java/text/spi/package.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - -Service provider classes for the classes in the java.text package. - - -@since 1.6 - - diff --git a/jdk/src/java.base/share/classes/java/util/jar/package-info.java b/jdk/src/java.base/share/classes/java/util/jar/package-info.java new file mode 100644 index 00000000000..2a7431b9577 --- /dev/null +++ b/jdk/src/java.base/share/classes/java/util/jar/package-info.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Provides classes for reading and writing the JAR (Java ARchive) + * file format, which is based on the standard ZIP file format with an + * optional manifest file. The manifest stores meta-information about + * the JAR file contents and is also used for signing JAR files. + * + *

    Package Specification

    + * + * The java.util.jar package is based on the following + * specifications: + * + * + * + * @since 1.2 + */ +package java.util.jar; diff --git a/jdk/src/java.base/share/classes/java/util/jar/package.html b/jdk/src/java.base/share/classes/java/util/jar/package.html deleted file mode 100644 index 5c3a366122c..00000000000 --- a/jdk/src/java.base/share/classes/java/util/jar/package.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - -Provides classes for reading and writing the JAR (Java ARchive) file -format, which is based on the standard ZIP file format with an -optional manifest file. The manifest stores meta-information about the -JAR file contents and is also used for signing JAR files. - - -

    Package Specification

    - -The java.util.jar package is based on the following specifications: - - - - -@since 1.2 - - diff --git a/jdk/src/java.base/share/classes/java/util/package-info.java b/jdk/src/java.base/share/classes/java/util/package-info.java new file mode 100644 index 00000000000..ab706e0d179 --- /dev/null +++ b/jdk/src/java.base/share/classes/java/util/package-info.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Contains the collections framework, legacy collection classes, + * event model, date and time facilities, internationalization, and + * miscellaneous utility classes (a string tokenizer, a random-number + * generator, and a bit array). + * + *

    Package Specification

    + * + * + *

    Related Documentation

    + * For overviews, tutorials, examples, guides, and tool documentation, + * please see: + * + * + * @since 1.0 + */ +package java.util; diff --git a/jdk/src/java.base/share/classes/java/util/package.html b/jdk/src/java.base/share/classes/java/util/package.html deleted file mode 100644 index eb77a146b0f..00000000000 --- a/jdk/src/java.base/share/classes/java/util/package.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - -Contains the collections framework, legacy collection classes, event model, -date and time facilities, internationalization, and miscellaneous utility -classes (a string tokenizer, a random-number generator, and a bit array). - -

    Package Specification

    - - -

    Related Documentation

    -For overviews, tutorials, examples, guides, and tool documentation, please see: - - -@since 1.0 - - diff --git a/jdk/src/java.base/share/classes/java/util/regex/package-info.java b/jdk/src/java.base/share/classes/java/util/regex/package-info.java new file mode 100644 index 00000000000..2907f10c003 --- /dev/null +++ b/jdk/src/java.base/share/classes/java/util/regex/package-info.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Classes for matching character sequences against patterns specified + * by regular expressions. + * + *

    An instance of the {@link java.util.regex.Pattern} class + * represents a regular expression that is specified in string form in + * a syntax similar to that used by Perl. + * + *

    Instances of the {@link java.util.regex.Matcher} class are used + * to match character sequences against a given pattern. Input is + * provided to matchers via the {@link java.lang.CharSequence} + * interface in order to support matching against characters from a + * wide variety of input sources.

    + * + *

    Unless otherwise noted, passing a null argument to a + * method in any class or interface in this package will cause a + * {@link java.lang.NullPointerException NullPointerException} to be + * thrown. + * + *

    Related Documentation

    + * + *

    An excellent tutorial and overview of regular expressions is Mastering Regular + * Expressions, Jeffrey E. F. Friedl, O'Reilly and Associates, + * 1997.

    + * + * @since 1.4 + * @author Mike McCloskey + * @author Mark Reinhold + */ +package java.util.regex; diff --git a/jdk/src/java.base/share/classes/java/util/regex/package.html b/jdk/src/java.base/share/classes/java/util/regex/package.html deleted file mode 100644 index 5be2f0bcc89..00000000000 --- a/jdk/src/java.base/share/classes/java/util/regex/package.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - -Classes for matching character sequences against patterns specified by regular -expressions. - -

    An instance of the {@link java.util.regex.Pattern} class represents a -regular expression that is specified in string form in a syntax similar to -that used by Perl. - -

    Instances of the {@link java.util.regex.Matcher} class are used to match -character sequences against a given pattern. Input is provided to matchers via -the {@link java.lang.CharSequence} interface in order to support matching -against characters from a wide variety of input sources.

    - -

    Unless otherwise noted, passing a null argument to a method -in any class or interface in this package will cause a -{@link java.lang.NullPointerException NullPointerException} to be thrown. - -

    Related Documentation

    - -

    An excellent tutorial and overview of regular expressions is Mastering Regular -Expressions, Jeffrey E. F. Friedl, O'Reilly and Associates, 1997.

    - - - -@since 1.4 -@author Mike McCloskey -@author Mark Reinhold - - - diff --git a/jdk/src/java.base/share/classes/java/util/spi/package-info.java b/jdk/src/java.base/share/classes/java/util/spi/package-info.java new file mode 100644 index 00000000000..b70147cf322 --- /dev/null +++ b/jdk/src/java.base/share/classes/java/util/spi/package-info.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Service provider classes for the classes in the java.util package. + * + * @since 1.6 + */ +package java.util.spi; diff --git a/jdk/src/java.base/share/classes/java/util/spi/package.html b/jdk/src/java.base/share/classes/java/util/spi/package.html deleted file mode 100644 index ce49fb2a414..00000000000 --- a/jdk/src/java.base/share/classes/java/util/spi/package.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - -Service provider classes for the classes in the java.util package. - - -@since 1.6 - - diff --git a/jdk/src/java.base/share/classes/javax/crypto/interfaces/package-info.java b/jdk/src/java.base/share/classes/javax/crypto/interfaces/package-info.java new file mode 100644 index 00000000000..9f59e8ffed6 --- /dev/null +++ b/jdk/src/java.base/share/classes/javax/crypto/interfaces/package-info.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Provides interfaces for Diffie-Hellman keys as defined in RSA + * Laboratories' PKCS #3. + * + *

    Note that these interfaces are intended only for key + * implementations whose key material is accessible and + * available. These interfaces are not intended for key implementations + * whose key material resides in inaccessible, protected storage (such + * as in a hardware device). + * + *

    For more developer information on how to use these interfaces, + * including information on how to design Key classes for + * hardware devices, please refer to the cryptographic provider + * developer guide: + * + *

    + * + *

    Package Specification

    + * + *
      + *
    • PKCS #3: Diffie-Hellman Key-Agreement Standard, Version 1.4, + * November 1993.
    • + *
    + * + *

    Related Documentation

    + * + * For further documentation, please see: + * + * + * @since 1.4 + */ +package javax.crypto.interfaces; diff --git a/jdk/src/java.base/share/classes/javax/crypto/interfaces/package.html b/jdk/src/java.base/share/classes/javax/crypto/interfaces/package.html deleted file mode 100644 index c43000e80a7..00000000000 --- a/jdk/src/java.base/share/classes/javax/crypto/interfaces/package.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - -Provides interfaces for Diffie-Hellman keys as defined in -RSA Laboratories' PKCS #3. -

    -Note that these interfaces are intended only -for key implementations whose key material -is accessible and available. These -interfaces are not intended for key -implementations whose key material resides -in inaccessible, protected storage (such as -in a hardware device). -

    -For more developer information on how to use -these interfaces, including information on -how to design Key classes -for hardware devices, please refer to the -cryptographic provider developer guide: -

    - -

    Package Specification

    - -
      -
    • PKCS #3: Diffie-Hellman Key-Agreement Standard, Version 1.4, - November 1993.
    • -
    - -

    Related Documentation

    - -For further documentation, please see: - - -@since 1.4 - - diff --git a/jdk/src/java.base/share/classes/javax/crypto/package-info.java b/jdk/src/java.base/share/classes/javax/crypto/package-info.java new file mode 100644 index 00000000000..754b5f643c8 --- /dev/null +++ b/jdk/src/java.base/share/classes/javax/crypto/package-info.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Provides the classes and interfaces for cryptographic + * operations. The cryptographic operations defined in this package + * include encryption, key generation and key agreement, and Message + * Authentication Code (MAC) generation. + * + *

    Support for encryption includes symmetric, asymmetric, block, + * and stream ciphers. This package also supports secure streams and + * sealed objects. + * + *

    Many of the classes provided in this package are provider-based. + * The class itself defines a programming interface to which + * applications may write. The implementations themselves may then be + * written by independent third-party vendors and plugged in + * seamlessly as needed. Therefore application developers may take + * advantage of any number of provider-based implementations without + * having to add or rewrite code. + * + *

    + * + *

    Related Documentation

    + * + * For further documentation, please see: + * + * + * @since 1.4 + */ +package javax.crypto; diff --git a/jdk/src/java.base/share/classes/javax/crypto/package.html b/jdk/src/java.base/share/classes/javax/crypto/package.html deleted file mode 100644 index c1d46ff528c..00000000000 --- a/jdk/src/java.base/share/classes/javax/crypto/package.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Provides the classes and interfaces for cryptographic operations. The -cryptographic operations defined in this package include encryption, -key generation and key agreement, and Message Authentication Code -(MAC) generation. - -

    Support for encryption includes symmetric, asymmetric, block, and -stream ciphers. This package also supports secure streams and sealed -objects. - -

    Many of the classes provided in this package are provider-based. The -class itself defines a programming interface to which applications may -write. The implementations themselves may then be written by -independent third-party vendors and plugged in seamlessly as needed. -Therefore application developers may take advantage of any number of -provider-based implementations without having to add or rewrite code. - -

    Package Specification

    - - - -

    Related Documentation

    - -For further documentation, please see: - - -@since 1.4 - - diff --git a/jdk/src/java.base/share/classes/javax/crypto/spec/package-info.java b/jdk/src/java.base/share/classes/javax/crypto/spec/package-info.java new file mode 100644 index 00000000000..a9b4589321e --- /dev/null +++ b/jdk/src/java.base/share/classes/javax/crypto/spec/package-info.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Provides classes and interfaces for key specifications and + * algorithm parameter specifications. + * + *

    A key specification is a transparent representation of the key + * material that constitutes a key. A key may be specified in an + * algorithm-specific way, or in an algorithm-independent encoding + * format (such as ASN.1). This package contains key specifications + * for Diffie-Hellman public and private keys, as well as key + * specifications for DES, Triple DES, and PBE secret keys. + * + *

    An algorithm parameter specification is a transparent + * representation of the sets of parameters used with an + * algorithm. This package contains algorithm parameter specifications + * for parameters used with the Diffie-Hellman, DES, Triple DES, PBE, + * RC2 and RC5 algorithms. + * + * + *

      + *
    • PKCS #3: Diffie-Hellman Key-Agreement Standard, Version 1.4, + * November 1993.
    • + *
    • PKCS #5: Password-Based Encryption Standard, Version 1.5, + * November 1993.
    • + *
    • Federal Information Processing Standards Publication (FIPS PUB) 46-2: + * Data Encryption Standard (DES)
    • + *
    + * + *

    Related Documentation

    + * + * For documentation that includes information about algorithm + * parameter and key specifications, please see: + * + * + * + * @since 1.4 + */ +package javax.crypto.spec; diff --git a/jdk/src/java.base/share/classes/javax/crypto/spec/package.html b/jdk/src/java.base/share/classes/javax/crypto/spec/package.html deleted file mode 100644 index 7f563fbb372..00000000000 --- a/jdk/src/java.base/share/classes/javax/crypto/spec/package.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - -Provides classes and interfaces for key specifications and algorithm -parameter specifications. - -

    A key specification is a transparent representation of the key -material that constitutes a key. A key may be specified in an -algorithm-specific way, or in an algorithm-independent encoding format -(such as ASN.1). This package contains key specifications for -Diffie-Hellman public and private keys, as well as key specifications for DES, -Triple DES, and PBE secret keys. - -

    An algorithm parameter specification is a transparent representation -of the sets of parameters used with an algorithm. This package contains -algorithm parameter specifications for parameters used with the -Diffie-Hellman, DES, Triple DES, PBE, RC2 and RC5 algorithms. - -

    Package Specification

    - -
      -
    • PKCS #3: Diffie-Hellman Key-Agreement Standard, Version 1.4, - November 1993.
    • -
    • PKCS #5: Password-Based Encryption Standard, Version 1.5, - November 1993.
    • -
    • Federal Information Processing Standards Publication (FIPS PUB) 46-2: - Data Encryption Standard (DES)
    • -
    - -

    Related Documentation

    - -For documentation that includes information about algorithm parameter -and key specifications, please see: - - -@since 1.4 - - diff --git a/jdk/src/java.base/share/classes/javax/net/package-info.java b/jdk/src/java.base/share/classes/javax/net/package-info.java new file mode 100644 index 00000000000..71de9e40091 --- /dev/null +++ b/jdk/src/java.base/share/classes/javax/net/package-info.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 1999, 2001, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Provides classes for networking applications. These classes include + * factories for creating sockets. Using socket factories you can + * encapsulate socket creation and configuration behavior. + * + * @since 1.4 + */ +package javax.net; diff --git a/jdk/src/java.base/share/classes/javax/net/package.html b/jdk/src/java.base/share/classes/javax/net/package.html deleted file mode 100644 index 35845a1830a..00000000000 --- a/jdk/src/java.base/share/classes/javax/net/package.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - -Provides classes for networking applications. These classes include -factories for creating sockets. Using socket factories you can encapsulate -socket creation and configuration behavior. - - -@since 1.4 - - diff --git a/jdk/src/java.base/share/classes/javax/net/ssl/package-info.java b/jdk/src/java.base/share/classes/javax/net/ssl/package-info.java new file mode 100644 index 00000000000..9fd6868587e --- /dev/null +++ b/jdk/src/java.base/share/classes/javax/net/ssl/package-info.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Provides classes for the secure socket package. Using the secure + * socket classes, you can communicate using SSL or a related security + * protocol to reliably detect any errors introduced into the network + * byte stream and to optionally encrypt the data and/or authenticate + * the communicating peers. + * + * + * + * @since 1.4 + */ +package javax.net.ssl; diff --git a/jdk/src/java.base/share/classes/javax/net/ssl/package.html b/jdk/src/java.base/share/classes/javax/net/ssl/package.html deleted file mode 100644 index d75e1d397a0..00000000000 --- a/jdk/src/java.base/share/classes/javax/net/ssl/package.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - -Provides classes for the secure socket package. Using the secure socket -classes, you can communicate using SSL or a related security protocol -to reliably detect any errors introduced into the network byte stream -and to optionally encrypt the data and/or authenticate the communicating peers. - -

    Package Specification

    - - - - - -@since 1.4 - - diff --git a/jdk/src/java.base/share/classes/sun/reflect/package.html b/jdk/src/java.base/share/classes/sun/reflect/package.html deleted file mode 100644 index 18ff61624bb..00000000000 --- a/jdk/src/java.base/share/classes/sun/reflect/package.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - -

    - - Licensee impact of JDK 1.4 reflection changes - -

    -

    - -Sun's JDK 1.4 contains a new implementation of java.lang.reflect which -offers substantially higher performance than previous JDKs' native -code. Licensees can at their discretion port these changes. There are -no public API or documentation changes associated with the new -reflection implementation aside from a few minor clarifications in the -specifications of Method.invoke(), Constructor.newInstance(), and a -few methods in java.lang.reflect.Field. - -

    -

    - -The bulk of the new implementation is Java programming language code -which generates bytecodes, and is therefore portable. If licensees -desire to port it, the following JVM changes are required: - -

      -
    1. The following four new JVM entry points must be added: - -
        -
      • JVM_GetClassDeclaredConstructors -
      • JVM_GetClassDeclaredFields -
      • JVM_GetClassDeclaredMethods -
      • JVM_GetClassAccessFlags -
      - -The first three return the declared constructors, fields, and methods -for a given class, with an option to return only the public ones. They -are similar in functionality to the earlier GetClassConstructors, -GetClassFields, and GetClassMethods. JVM_GetClassDeclaredFields and -JVM_GetClassDeclaredMethods must intern the Strings for the names of -the Field and Method objects returned. The fouth returns the access -flags for a given class as marked in the class file, as opposed to in -the InnerClasses attribute if the class is an inner class, and -therefore differs from JVM_GetClassModifiers for inner classes (most -importantly, protected inner classes; see 4471811.) - -
    2. The JVM's link resolver must be modified to allow all field and -method references from subclasses of sun.reflect.MagicAccessorImpl to -any other class (even to private members of other classes) to -succeed. This allows setAccessible() and its associated checks to be -implemented in Java. - -
    3. The code which calls the verifier must skip verification for all -subclasses of sun.reflect.MagicAccessorImpl. (It was originally -intended that only a subset of the stub classes used for serialization -would not pass the verifier, specifically, those subclassing -SerializationConstructorAccessorImpl; see 4486457 for a case where -this does not work.) - -
    4. The stack walker for security checks must be modified to skip not -only all Method.invoke() frames, but also any frames for which the -class is a subclass of sun.reflect.MethodAccessorImpl. - -
    5. The JVM entry points JVM_InvokeMethod and -JVM_NewInstanceFromConstructor are currently still used because the -first invocation of the bytecode-based reflection is currently slower -than the original native code. The security checks they perform can, -however, be disabled, as they are now performed by Java programming -language code. - -
    - -

    -

    - -The following changes were discovered to be necessary for backward -compatibility with certain applications (see bug 4474172): - -

      - -
    1. The existing JVM entry point JVM_LatestUserDefinedLoader -(typically used in applications which rely on the 1.1 security -framework) must skip reflection-related frames in its stack walk: -specifically all frames associated with subclasses of -sun.reflect.MethodAccessorImpl and -sun.reflect.ConstructorAccessorImpl. - -
    2. The new reflection implementation can cause class loading to -occur in previously-unexpected places (namely during reflective -calls). This can cause class loaders which contain subtle bugs to -break. In general it is not possible to guarantee complete backward -bug compatibility, but one kind of bug has been observed more than -once: the inability of a user-defined loader to handle delegation to -it for a class it has already loaded. The new reflection -implementation is predicated on delegation working properly, as it -loads stub classes into newly-fabricated class loaders of type -sun.reflect.DelegatingClassLoader, one stub class per loader, to allow -unloading of the stub classes to occur more quickly. To handle this -kind of bug, the JVM's internal class lookup mechanism must be -slightly modified to check for instances of -sun.reflect.DelegatingClassLoader as the incoming class loader and -silently traverse the "parent" field once for such loaders before -entering the bulk of the resolution code. This avoids an upcall to -Java programming language code which certain loaders can not handle. - -
    - -

    -

    - -The following JVM entry points may be deleted: - -

      -
    • JVM_GetClassFields -
    • JVM_GetClassMethods -
    • JVM_GetClassConstructors -
    • JVM_GetClassField -
    • JVM_GetClassMethod -
    • JVM_GetClassConstructor -
    • JVM_NewInstance -
    • JVM_GetField -
    • JVM_GetPrimitiveField -
    • JVM_SetField -
    • JVM_SetPrimitiveField -
    - -

    -

    - -To keep using the previous reflection implementation, licensees should -not take changes from Sun's JDK 1.4 relating specifically to the -implementation of reflection in the following classes/methods and -any associated native code: - -

      -
    • java.lang.Class.newInstance0 -
    • java.lang.Class.getClassLoader0 -
    • java.lang.Class.getFields -
    • java.lang.Class.getMethods -
    • java.lang.Class.getDeclaredFields -
    • java.lang.Class.getDeclaredMethods -
    • java.lang.Class.getFields0 -
    • java.lang.Class.getMethods0 -
    • java.lang.Class.getConstructors0 -
    • java.lang.Class.getField0 -
    • java.lang.Class.getMethod0 -
    • java.lang.Class.getConstructor0 -
    • java.lang.ClassLoader.getCallerClassLoader -
    • java.lang.System.getCallerClass -
    • java.lang.reflect.AccessibleObject -
    • java.lang.reflect.Constructor -
    • java.lang.reflect.Field -
    • java.lang.reflect.Method -
    • java.lang.reflect.Modifier -
    • sun.misc.ClassReflector -
    - -

    - From efeb942f9fbfe6a5f411c026d57e18bb4a6fb3c4 Mon Sep 17 00:00:00 2001 From: Mandy Chung Date: Fri, 22 May 2015 16:43:39 -0700 Subject: [PATCH 36/82] 8074431: Remove native2ascii tool Reviewed-by: erikj, alanb, okutsu, mfang, naoto --- jdk/make/launcher/Launcher-jdk.dev.gmk | 4 - jdk/src/bsd/doc/man/ja/native2ascii.1 | 24 -- jdk/src/bsd/doc/man/native2ascii.1 | 87 ---- .../share/classes/java/util/Properties.java | 6 +- .../java/util/prefs/WindowsPreferences.java | 4 +- .../sun/tools/native2ascii/A2NFilter.java | 144 ------- .../classes/sun/tools/native2ascii/Main.java | 375 ------------------ .../sun/tools/native2ascii/N2AFilter.java | 74 ---- .../resources/MsgNative2ascii.java | 43 -- .../tools/javac/resources/javac.properties | 2 +- jdk/test/TEST.groups | 2 - jdk/test/sun/tools/native2ascii/A2N_4630463 | 1 - .../tools/native2ascii/A2N_4630463.expected | 1 - jdk/test/sun/tools/native2ascii/A2N_4630971 | 4 - jdk/test/sun/tools/native2ascii/A2N_4701617 | 11 - .../tools/native2ascii/A2N_4701617.expected | 11 - jdk/test/sun/tools/native2ascii/A2N_6247817 | 1 - jdk/test/sun/tools/native2ascii/N2A_4636448 | 1 - .../tools/native2ascii/N2A_4636448.expected | 1 - .../tools/native2ascii/Native2AsciiTests.sh | 129 ------ .../sun/tools/native2ascii/NativeErrors.java | 117 ------ .../sun/tools/native2ascii/Permission.java | 85 ---- .../resources/ImmutableResourceTest.java | 68 ---- jdk/test/sun/tools/native2ascii/test1 | 1 - jdk/test/sun/tools/native2ascii/test3 | 1 - jdk/test/tools/launcher/VersionCheck.java | 1 - 26 files changed, 3 insertions(+), 1195 deletions(-) delete mode 100644 jdk/src/bsd/doc/man/ja/native2ascii.1 delete mode 100644 jdk/src/bsd/doc/man/native2ascii.1 delete mode 100644 jdk/src/jdk.dev/share/classes/sun/tools/native2ascii/A2NFilter.java delete mode 100644 jdk/src/jdk.dev/share/classes/sun/tools/native2ascii/Main.java delete mode 100644 jdk/src/jdk.dev/share/classes/sun/tools/native2ascii/N2AFilter.java delete mode 100644 jdk/src/jdk.dev/share/classes/sun/tools/native2ascii/resources/MsgNative2ascii.java delete mode 100644 jdk/test/sun/tools/native2ascii/A2N_4630463 delete mode 100644 jdk/test/sun/tools/native2ascii/A2N_4630463.expected delete mode 100644 jdk/test/sun/tools/native2ascii/A2N_4630971 delete mode 100644 jdk/test/sun/tools/native2ascii/A2N_4701617 delete mode 100644 jdk/test/sun/tools/native2ascii/A2N_4701617.expected delete mode 100644 jdk/test/sun/tools/native2ascii/A2N_6247817 delete mode 100644 jdk/test/sun/tools/native2ascii/N2A_4636448 delete mode 100644 jdk/test/sun/tools/native2ascii/N2A_4636448.expected delete mode 100644 jdk/test/sun/tools/native2ascii/Native2AsciiTests.sh delete mode 100644 jdk/test/sun/tools/native2ascii/NativeErrors.java delete mode 100644 jdk/test/sun/tools/native2ascii/Permission.java delete mode 100644 jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.java delete mode 100644 jdk/test/sun/tools/native2ascii/test1 delete mode 100644 jdk/test/sun/tools/native2ascii/test3 diff --git a/jdk/make/launcher/Launcher-jdk.dev.gmk b/jdk/make/launcher/Launcher-jdk.dev.gmk index 7d3781707cb..5c01b4fb498 100644 --- a/jdk/make/launcher/Launcher-jdk.dev.gmk +++ b/jdk/make/launcher/Launcher-jdk.dev.gmk @@ -32,7 +32,3 @@ $(eval $(call SetupLauncher,jdeps, \ $(eval $(call SetupLauncher,jimage,\ -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "jdk.tools.jimage.Main"$(COMMA) }')) - -$(eval $(call SetupLauncher,native2ascii, \ - -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.tools.native2ascii.Main"$(COMMA) }')) - diff --git a/jdk/src/bsd/doc/man/ja/native2ascii.1 b/jdk/src/bsd/doc/man/ja/native2ascii.1 deleted file mode 100644 index c7232ea9b2f..00000000000 --- a/jdk/src/bsd/doc/man/ja/native2ascii.1 +++ /dev/null @@ -1,24 +0,0 @@ -." Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. -." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -." -." This code is free software; you can redistribute it and/or modify it -." under the terms of the GNU General Public License version 2 only, as -." published by the Free Software Foundation. -." -." This code is distributed in the hope that it will be useful, but WITHOUT -." ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -." FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -." version 2 for more details (a copy is included in the LICENSE file that -." accompanied this code). -." -." You should have received a copy of the GNU General Public License version -." 2 along with this work; if not, write to the Free Software Foundation, -." Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -." -." Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -." or visit www.oracle.com if you need additional information or have any -." questions. -." -.TH native2ascii 1 "07 May 2011" - -.LP diff --git a/jdk/src/bsd/doc/man/native2ascii.1 b/jdk/src/bsd/doc/man/native2ascii.1 deleted file mode 100644 index 7e7ec7cfaa9..00000000000 --- a/jdk/src/bsd/doc/man/native2ascii.1 +++ /dev/null @@ -1,87 +0,0 @@ -'\" t -.\" Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. -.\" -.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -.\" -.\" This code is free software; you can redistribute it and/or modify it -.\" under the terms of the GNU General Public License version 2 only, as -.\" published by the Free Software Foundation. -.\" -.\" This code is distributed in the hope that it will be useful, but WITHOUT -.\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -.\" version 2 for more details (a copy is included in the LICENSE file that -.\" accompanied this code). -.\" -.\" You should have received a copy of the GNU General Public License version -.\" 2 along with this work; if not, write to the Free Software Foundation, -.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -.\" -.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -.\" or visit www.oracle.com if you need additional information or have any -.\" questions. -.\" -.\" Arch: generic -.\" Software: JDK 8 -.\" Date: 21 November 2013 -.\" SectDesc: Internationalization Tools -.\" Title: native2ascii.1 -.\" -.if n .pl 99999 -.TH native2ascii 1 "21 November 2013" "JDK 8" "Internationalization Tools" -.\" ----------------------------------------------------------------- -.\" * Define some portability stuff -.\" ----------------------------------------------------------------- -.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.\" http://bugs.debian.org/507673 -.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html -.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.ie \n(.g .ds Aq \(aq -.el .ds Aq ' -.\" ----------------------------------------------------------------- -.\" * set default formatting -.\" ----------------------------------------------------------------- -.\" disable hyphenation -.nh -.\" disable justification (adjust text to left margin only) -.ad l -.\" ----------------------------------------------------------------- -.\" * MAIN CONTENT STARTS HERE * -.\" ----------------------------------------------------------------- - -.SH NAME -native2ascii \- Creates localizable applications by converting a file with characters in any supported character encoding to one with ASCII and/or Unicode escapes or vice versa\&. -.SH SYNOPSIS -.sp -.nf - -\fBnative2ascii\fR [ \fIinputfile\fR ] [ \fIoutputfile\fR ] -.fi -.sp -.TP -\fIinputfile\fR -The encoded file to be converted to ASCII\&. -.TP -\fIoutputfile\fR -The converted ASCII file\&. -.SH DESCRIPTION -The \f3native2ascii\fR command converts encoded files supported by the Java Runtime Environment (JRE) to files encoded in ASCII, using Unicode escapes (\f3\eu\fR\fIxxxx\fR) notation for all characters that are not part of the ASCII character set\&. This process is required for properties files that contain characters not in ISO-8859-1 character sets\&. The tool can also perform the reverse conversion\&. -.PP -If the \f3outputfile\fR value is omitted, then standard output is used for output\&. If, in addition, the \f3inputfile\fR value is omitted, then standard input is used for input\&. -.SH OPTIONS -.TP --reverse -.br -Perform the reverse operation: Converts a file encoded in ISO-8859-1 with Unicode escapes to a file in any character encoding supported by the JRE\&. -.TP --encoding \fIencoding_name\fR -.br -Specifies the name of the character encoding to be used by the conversion procedure\&. If this option is not present, then the default character encoding (as determined by the \f3java\&.nio\&.charset\&.Charset\&.defaultCharset\fR method) is used\&. The \f3encoding_name\fR string must be the name of a character encoding that is supported by the JRE\&. See Supported Encodings at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/intl/encoding\&.doc\&.html -.TP --J\fIoption\fR -.br -Passes \f3option\fR to the Java Virtual Machine (JVM), where option is one of the options described on the reference page for the Java application launcher\&. For example, \f3-J-Xms48m\fR sets the startup memory to 48 MB\&. See java(1)\&. -.RE -.br -'pl 8.5i -'bp diff --git a/jdk/src/java.base/share/classes/java/util/Properties.java b/jdk/src/java.base/share/classes/java/util/Properties.java index a075da67d1c..0d983e52f96 100644 --- a/jdk/src/java.base/share/classes/java/util/Properties.java +++ b/jdk/src/java.base/share/classes/java/util/Properties.java @@ -73,8 +73,7 @@ import jdk.internal.util.xml.PropertiesDefaultHandler; * Unicode escapes as defined in section 3.3 of * The Java™ Language Specification; * only a single 'u' character is allowed in an escape - * sequence. The native2ascii tool can be used to convert property files to and - * from other character encodings. + * sequence. * *

    The {@link #loadFromXML(InputStream)} and {@link * #storeToXML(OutputStream, String, String)} methods load and store properties @@ -108,9 +107,6 @@ import jdk.internal.util.xml.PropertiesDefaultHandler; *

    This class is thread-safe: multiple threads can share a single * Properties object without the need for external synchronization. * - * @see native2ascii tool for Solaris - * @see native2ascii tool for Windows - * * @author Arthur van Hoff * @author Michael McCloskey * @author Xueming Shen diff --git a/jdk/src/java.prefs/windows/classes/java/util/prefs/WindowsPreferences.java b/jdk/src/java.prefs/windows/classes/java/util/prefs/WindowsPreferences.java index 63dfcfb166e..1e93cb88a32 100644 --- a/jdk/src/java.prefs/windows/classes/java/util/prefs/WindowsPreferences.java +++ b/jdk/src/java.prefs/windows/classes/java/util/prefs/WindowsPreferences.java @@ -1013,7 +1013,6 @@ class WindowsPreferences extends AbstractPreferences { * description of the encoding algorithm. */ private static String toJavaValueString(byte[] windowsNameArray) { - // Use modified native2ascii algorithm String windowsName = byteArrayToString(windowsNameArray); StringBuilder javaName = new StringBuilder(); char ch; @@ -1055,8 +1054,7 @@ class WindowsPreferences extends AbstractPreferences { * Encoding algorithm adds "/" character to capital letters, i.e. * "A" is encoded as "/A". Character '\' is encoded as '//', * '/' is encoded as '\'. - * Then encoding scheme similar to jdk's native2ascii converter is used - * to convert java string to a byte array of ASCII characters. + * Then convert java string to a byte array of ASCII characters. */ private static byte[] toWindowsValueString(String javaName) { StringBuilder windowsName = new StringBuilder(); diff --git a/jdk/src/jdk.dev/share/classes/sun/tools/native2ascii/A2NFilter.java b/jdk/src/jdk.dev/share/classes/sun/tools/native2ascii/A2NFilter.java deleted file mode 100644 index c36ae889dfa..00000000000 --- a/jdk/src/jdk.dev/share/classes/sun/tools/native2ascii/A2NFilter.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * This FilterReader class processes a sequence of characters from - * a source stream containing a mixture of 7-bit ASCII data and - * 'back-tick U' escaped sequences representing characters which have - * the possibility of being encoded in a user specified encoding - * The filter relies on knowing the target encoding and makes a - * determination as to whether a given supplied character in its - * source character stream is encodeable in the target encoding. - * If not, it is remains in its back-tick U escaped form. - */ - -package sun.tools.native2ascii; -import java.io.*; - - -class A2NFilter extends FilterReader { - - // maintain a trailing buffer to hold any incompleted - // unicode escaped sequences - private char[] trailChars = null; - - public A2NFilter(Reader in) { - super(in); - } - - public int read(char[] buf, int off, int len) throws IOException { - int numChars = 0; // how many characters have been read - int retChars = 0; // how many characters we'll return - - char[] cBuf = new char[len]; - int cOffset = 0; // offset at which we'll start reading - boolean eof = false; - - // copy trailing chars from previous invocation to input buffer - if (trailChars != null) { - for (int i = 0; i < trailChars.length; i++) - cBuf[i] = trailChars[i]; - numChars = trailChars.length; - trailChars = null; - } - - int n = in.read(cBuf, numChars, len - numChars); - if (n < 0) { - eof = true; - if (numChars == 0) - return -1; // EOF; - } else { - numChars += n; - } - - for (int i = 0; i < numChars;) { - char c = cBuf[i++]; - - if (c != '\\' || (eof && numChars <= 5)) { - // Not a backslash, so copy and continue - // Always pass non backslash chars straight thru - // for regular encoding. If backslash occurs in - // input stream at the final 5 chars then don't - // attempt to read-ahead and de-escape since these - // are literal occurrences of U+005C which need to - // be encoded verbatim in the target encoding. - buf[retChars++] = c; - continue; - } - - int remaining = numChars - i; - if (remaining < 5) { - // Might be the first character of a unicode escape, but we - // don't have enough characters to tell, so save it and finish - trailChars = new char[1 + remaining]; - trailChars[0] = c; - for (int j = 0; j < remaining; j++) - trailChars[1 + j] = cBuf[i + j]; - break; - } - // At this point we have at least five characters remaining - - c = cBuf[i++]; - if (c != 'u') { - // Not a unicode escape, so copy and continue - buf[retChars++] = '\\'; - buf[retChars++] = c; - continue; - } - - // The next four characters are the hex part of a unicode escape - char rc = 0; - boolean isUE = true; - try { - rc = (char)Integer.parseInt(new String(cBuf, i, 4), 16); - } catch (NumberFormatException x) { - isUE = false; - } - if (isUE && Main.canConvert(rc)) { - // We'll be able to convert this - buf[retChars++] = rc; - i += 4; // Align beyond the current uXXXX sequence - } else { - // We won't, so just retain the original sequence - buf[retChars++] = '\\'; - buf[retChars++] = 'u'; - continue; - } - - } - - return retChars; - } - - public int read() throws IOException { - char[] buf = new char[1]; - - if (read(buf, 0, 1) == -1) - return -1; - else - return (int)buf[0]; - } - -} diff --git a/jdk/src/jdk.dev/share/classes/sun/tools/native2ascii/Main.java b/jdk/src/jdk.dev/share/classes/sun/tools/native2ascii/Main.java deleted file mode 100644 index 00e833228b6..00000000000 --- a/jdk/src/jdk.dev/share/classes/sun/tools/native2ascii/Main.java +++ /dev/null @@ -1,375 +0,0 @@ -/* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - */ - -/* - Currently javac and load() method in java.util.Properties - supports only Latin1 encoding input. - But in Asian platforms programmer or message translator - uses the editor which support othere than latin1 encoding - to specify their native language string. - So if programmer or message translator wants to use other than - Latin1 character in his/her program source or properties file - they must convert the file to ASCII plus \udddd notation. - (javac/load() modification is not appropriate due to - time constraints for JDK1.1) - This utility is for the purpose of that conversion. - - NAME - native2ascii - convert native encoding file to ascii file - include \udddd Unicode notation - - SYNOPSIS - native2ascii [options] [inputfile [outputfile]] - - DESCRIPTION - If outputfile is not described standard output is used as - output file, and if inputfile is not also described - stardard input is used as input file. - - Options - - -reverse - convert ascii with \udddd notation to native encoding - - -encoding encoding_name - Specify the encoding name which is used by conversion. - 8859_[1 - 9], JIS, EUCJIS, SJIS is currently supported. - Default encoding is taken from System property "file.encoding". - -*/ - -package sun.tools.native2ascii; - -import java.io.*; -import java.util.*; -import java.text.MessageFormat; -import java.nio.charset.CharsetEncoder; -import java.nio.charset.Charset; -import java.nio.charset.IllegalCharsetNameException; -import java.io.UnsupportedEncodingException; -import java.nio.charset.UnsupportedCharsetException; - -/** - * Main program of the native2ascii - */ - -public class Main { - - String inputFileName = null; - String outputFileName = null; - File tempFile = null; - boolean reverse = false; - static String encodingString = null; - static String defaultEncoding = null; - static CharsetEncoder encoder = null; - - /** - * Run the converter - */ - public synchronized boolean convert(String argv[]) { - List v = new ArrayList<>(2); - File outputFile = null; - boolean createOutputFile = false; - - // Parse arguments - for (int i = 0; i < argv.length; i++) { - if (argv[i].equals("-encoding")) { - if ((i + 1) < argv.length) { - encodingString = argv[++i]; - } else { - error(getMsg("err.bad.arg")); - usage(); - return false; - } - } else if (argv[i].equals("-reverse")) { - reverse = true; - } else { - if (v.size() > 1) { - usage(); - return false; - } - v.add(argv[i]); - } - } - - if (encodingString == null) { - defaultEncoding = Charset.defaultCharset().name(); - } - char[] lineBreak = System.getProperty("line.separator").toCharArray(); - - try { - initializeConverter(); - - if (v.size() == 1) { - inputFileName = v.get(0); - } - - if (v.size() == 2) { - inputFileName = v.get(0); - outputFileName = v.get(1); - createOutputFile = true; - } - - if (createOutputFile) { - outputFile = new File(outputFileName); - if (outputFile.exists() && !outputFile.canWrite()) { - throw new Exception(formatMsg("err.cannot.write", outputFileName)); - } - } - - if (reverse) { - try (BufferedReader reader = getA2NInput(inputFileName); - Writer osw = getA2NOutput(outputFileName);) { - String line; - while ((line = reader.readLine()) != null) { - osw.write(line.toCharArray()); - osw.write(lineBreak); - if (outputFileName == null) { // flush stdout - osw.flush(); - } - } - } - } else { - // N2A - try (BufferedReader in = getN2AInput(inputFileName); - BufferedWriter out = getN2AOutput(outputFileName);) { - String inLine; - while ((inLine = in.readLine()) != null) { - out.write(inLine.toCharArray()); - out.write(lineBreak); - if (outputFileName == null) { // flush stdout - out.flush(); - } - } - } - } - - // Since we are done rename temporary file to desired output file - if (createOutputFile) { - if (outputFile.exists()) { - // Some win32 platforms can't handle atomic - // rename if source and target file paths are - // identical. To make things simple we just unconditionally - // delete the target file before calling renameTo() - outputFile.delete(); - } - tempFile.renameTo(outputFile); - } - } catch (Exception e) { - error(e.toString()); - return false; - } - - return true; - } - - private void error(String msg){ - System.out.println(msg); - } - - private void usage(){ - System.out.println(getMsg("usage")); - } - - - private BufferedReader getN2AInput(String inFile) throws Exception { - - InputStream forwardIn; - if (inFile == null) - forwardIn = System.in; - else { - File f = new File(inFile); - if (!f.canRead()){ - throw new Exception(formatMsg("err.cannot.read", f.getName())); - } - - try { - forwardIn = new FileInputStream(inFile); - } catch (IOException e) { - throw new Exception(formatMsg("err.cannot.read", f.getName())); - } - } - - BufferedReader r = (encodingString != null) ? - new BufferedReader(new InputStreamReader(forwardIn, - encodingString)) : - new BufferedReader(new InputStreamReader(forwardIn)); - return r; - } - - - private BufferedWriter getN2AOutput(String outFile) throws Exception { - Writer output; - BufferedWriter n2aOut; - - if (outFile == null) - output = new OutputStreamWriter(System.out,"US-ASCII"); - - else { - File f = new File(outFile); - - File tempDir = f.getParentFile(); - - if (tempDir == null) - tempDir = new File(System.getProperty("user.dir")); - - tempFile = File.createTempFile("_N2A", - ".TMP", - tempDir); - tempFile.deleteOnExit(); - - try { - output = new FileWriter(tempFile); - } catch (IOException e){ - throw new Exception(formatMsg("err.cannot.write", tempFile.getName())); - } - } - - n2aOut = new BufferedWriter(new N2AFilter(output)); - return n2aOut; - } - - private BufferedReader getA2NInput(String inFile) throws Exception { - Reader in; - BufferedReader reader; - - if (inFile == null) - in = new InputStreamReader(System.in, "US-ASCII"); - else { - File f = new File(inFile); - if (!f.canRead()){ - throw new Exception(formatMsg("err.cannot.read", f.getName())); - } - - try { - in = new FileReader(inFile); - } catch (Exception e) { - throw new Exception(formatMsg("err.cannot.read", f.getName())); - } - } - - reader = new BufferedReader(new A2NFilter(in)); - return reader; - } - - private Writer getA2NOutput(String outFile) throws Exception { - - OutputStreamWriter w = null; - OutputStream output = null; - - if (outFile == null) - output = System.out; - else { - File f = new File(outFile); - - File tempDir = f.getParentFile(); - if (tempDir == null) - tempDir = new File(System.getProperty("user.dir")); - tempFile = File.createTempFile("_N2A", - ".TMP", - tempDir); - tempFile.deleteOnExit(); - - try { - output = new FileOutputStream(tempFile); - } catch (IOException e){ - throw new Exception(formatMsg("err.cannot.write", tempFile.getName())); - } - } - - w = (encodingString != null) ? - new OutputStreamWriter(output, encodingString) : - new OutputStreamWriter(output); - - return (w); - } - - private static Charset lookupCharset(String csName) { - if (Charset.isSupported(csName)) { - try { - return Charset.forName(csName); - } catch (UnsupportedCharsetException x) { - throw new Error(x); - } - } - return null; - } - - public static boolean canConvert(char ch) { - return (encoder != null && encoder.canEncode(ch)); - } - - private static void initializeConverter() throws UnsupportedEncodingException { - Charset cs = null; - - try { - cs = (encodingString == null) ? - lookupCharset(defaultEncoding): - lookupCharset(encodingString); - - encoder = (cs != null) ? - cs.newEncoder() : - null; - } catch (IllegalCharsetNameException e) { - throw new Error(e); - } - } - - private static ResourceBundle rsrc; - - static { - try { - rsrc = ResourceBundle.getBundle( - "sun.tools.native2ascii.resources.MsgNative2ascii"); - } catch (MissingResourceException e) { - throw new Error("Missing message file."); - } - } - - private String getMsg(String key) { - try { - return (rsrc.getString(key)); - } catch (MissingResourceException e) { - throw new Error("Error in message file format."); - } - } - - private String formatMsg(String key, String arg) { - String msg = getMsg(key); - return MessageFormat.format(msg, arg); - } - - - /** - * Main program - */ - public static void main(String argv[]){ - Main converter = new Main(); - System.exit(converter.convert(argv) ? 0 : 1); - } -} diff --git a/jdk/src/jdk.dev/share/classes/sun/tools/native2ascii/N2AFilter.java b/jdk/src/jdk.dev/share/classes/sun/tools/native2ascii/N2AFilter.java deleted file mode 100644 index c1b7efb319e..00000000000 --- a/jdk/src/jdk.dev/share/classes/sun/tools/native2ascii/N2AFilter.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - - -/** - * This FilterWriter class takes an existing Writer and uses - * the 'back-tick U' escape notation to escape characters which are - * encountered within the input character based stream which - * are outside the 7-bit ASCII range. The native platforms linefeed - * character is emitted for each line of processed input - */ - -package sun.tools.native2ascii; -import java.io.*; -import java.nio.BufferOverflowException; - -class N2AFilter extends FilterWriter { - - public N2AFilter(Writer out) { super(out); } - - public void write(char b) throws IOException { - char[] buf = new char[1]; - buf[0] = b; - write(buf, 0, 1); - } - - public void write(char[] buf, int off, int len) throws IOException { - - String lineBreak = System.getProperty("line.separator"); - - //System.err.println ("xx Out buffer length is " + buf.length ); - for (int i = 0; i < len; i++) { - if ((buf[i] > '\u007f')) { - // write \udddd - out.write('\\'); - out.write('u'); - String hex = - Integer.toHexString(buf[i]); - StringBuilder hex4 = new StringBuilder(hex); - hex4.reverse(); - int length = 4 - hex4.length(); - for (int j = 0; j < length; j++) { - hex4.append('0'); - } - for (int j = 0; j < 4; j++) { - out.write(hex4.charAt(3 - j)); - } - } else - out.write(buf[i]); - } - } -} diff --git a/jdk/src/jdk.dev/share/classes/sun/tools/native2ascii/resources/MsgNative2ascii.java b/jdk/src/jdk.dev/share/classes/sun/tools/native2ascii/resources/MsgNative2ascii.java deleted file mode 100644 index 55b22bcc67a..00000000000 --- a/jdk/src/jdk.dev/share/classes/sun/tools/native2ascii/resources/MsgNative2ascii.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.tools.native2ascii.resources; - -import java.util.ListResourceBundle; - -public class MsgNative2ascii extends ListResourceBundle { - - public Object[][] getContents() { - Object[][] temp = new Object[][] { - {"err.bad.arg", "-encoding requires argument"}, - {"err.cannot.read", "{0} could not be read."}, - {"err.cannot.write", "{0} could not be written."}, - {"usage", "Usage: native2ascii" + - " [-reverse] [-encoding encoding] [inputfile [outputfile]]"}, - }; - - return temp; - } -} diff --git a/jdk/src/jdk.rmic/share/classes/sun/tools/javac/resources/javac.properties b/jdk/src/jdk.rmic/share/classes/sun/tools/javac/resources/javac.properties index f435c6cca14..f5ce0f8deef 100644 --- a/jdk/src/jdk.rmic/share/classes/sun/tools/javac/resources/javac.properties +++ b/jdk/src/jdk.rmic/share/classes/sun/tools/javac/resources/javac.properties @@ -634,4 +634,4 @@ main.path.msg=\ [The source classpath is "{0}"]\n\ [The library classpath is "{1}"] javac.err.invalid.encoding.char=\ - The source file encoding may be different with this platform encoding. Please use -encoding option to adjust file encoding, or apply native2ascii utility to make source file ASCII encoding. + The source file encoding may be different with this platform encoding. Please use -encoding option to adjust file encoding, or make sure source file converted to ASCII encoding. diff --git a/jdk/test/TEST.groups b/jdk/test/TEST.groups index d6af5fa5799..dafec986fbd 100644 --- a/jdk/test/TEST.groups +++ b/jdk/test/TEST.groups @@ -214,14 +214,12 @@ core_tools = \ jdk/internal/jimage \ jdk/internal/jrtfs \ sun/tools/java \ - sun/tools/native2ascii \ sun/tools/jrunscript svc_tools = \ com/sun/tools/attach \ sun/tools \ -sun/tools/java \ - -sun/tools/native2ascii \ -sun/tools/jrunscript \ sun/jvmstat \ demo/jvmti diff --git a/jdk/test/sun/tools/native2ascii/A2N_4630463 b/jdk/test/sun/tools/native2ascii/A2N_4630463 deleted file mode 100644 index 846e6fac844..00000000000 --- a/jdk/test/sun/tools/native2ascii/A2N_4630463 +++ /dev/null @@ -1 +0,0 @@ -\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF diff --git a/jdk/test/sun/tools/native2ascii/A2N_4630463.expected b/jdk/test/sun/tools/native2ascii/A2N_4630463.expected deleted file mode 100644 index 6c694dc3fb9..00000000000 --- a/jdk/test/sun/tools/native2ascii/A2N_4630463.expected +++ /dev/null @@ -1 +0,0 @@ -€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ diff --git a/jdk/test/sun/tools/native2ascii/A2N_4630971 b/jdk/test/sun/tools/native2ascii/A2N_4630971 deleted file mode 100644 index 263852a641b..00000000000 --- a/jdk/test/sun/tools/native2ascii/A2N_4630971 +++ /dev/null @@ -1,4 +0,0 @@ -#input test file 4630971 for bug native2ascii -reverse -#occurence of a backslash character in last 5 chars -#of input file should not hang native2ascii -reverse -Hello world\\\\\ diff --git a/jdk/test/sun/tools/native2ascii/A2N_4701617 b/jdk/test/sun/tools/native2ascii/A2N_4701617 deleted file mode 100644 index 0ccf547c303..00000000000 --- a/jdk/test/sun/tools/native2ascii/A2N_4701617 +++ /dev/null @@ -1,11 +0,0 @@ -\uFF61\uFF62\uFF63\uFF64\uFF65\uFF66 -\uFF67\uFF68\uFF69\uFF6A\uFF6B\uFF6C -\uFF6D\uFF6E\uFF6F\uFF70\uFF71\uFF72 -\uFF73\uFF74\uFF75\uFF76\uFF77\uFF78 -\uFF79\uFF7A\uFF7B\uFF7C\uFF7D\uFF7E -\uFF7F\uFF80\uFF81\uFF82\uFF83\uFF84 -\uFF85\uFF86\uFF87\uFF88\uFF89\uFF8A -\uFF8B\uFF8C\uFF8D\uFF8E\uFF8F\uFF90 -\uFF91\uFF92\uFF93\uFF94\uFF95\uFF96 -\uFF97\uFF98\uFF99\uFF9A\uFF9B\uFF9C -\uFF9D\uFF9E\uFF9F diff --git a/jdk/test/sun/tools/native2ascii/A2N_4701617.expected b/jdk/test/sun/tools/native2ascii/A2N_4701617.expected deleted file mode 100644 index 741d22ad860..00000000000 --- a/jdk/test/sun/tools/native2ascii/A2N_4701617.expected +++ /dev/null @@ -1,11 +0,0 @@ -¡¢£¤¥¦ -§¨©ª«¬ -­®¯°±² -³´µ¶·¸ -¹º»¼½¾ -¿ÀÁÂÃÄ -ÅÆÇÈÉÊ -ËÌÍÎÏÐ -ÑÒÓÔÕÖ -רÙÚÛÜ -ÝÞß diff --git a/jdk/test/sun/tools/native2ascii/A2N_6247817 b/jdk/test/sun/tools/native2ascii/A2N_6247817 deleted file mode 100644 index ea566cb3a9b..00000000000 --- a/jdk/test/sun/tools/native2ascii/A2N_6247817 +++ /dev/null @@ -1 +0,0 @@ -\user diff --git a/jdk/test/sun/tools/native2ascii/N2A_4636448 b/jdk/test/sun/tools/native2ascii/N2A_4636448 deleted file mode 100644 index 6c694dc3fb9..00000000000 --- a/jdk/test/sun/tools/native2ascii/N2A_4636448 +++ /dev/null @@ -1 +0,0 @@ -€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ diff --git a/jdk/test/sun/tools/native2ascii/N2A_4636448.expected b/jdk/test/sun/tools/native2ascii/N2A_4636448.expected deleted file mode 100644 index e2bcea3a295..00000000000 --- a/jdk/test/sun/tools/native2ascii/N2A_4636448.expected +++ /dev/null @@ -1 +0,0 @@ -\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009a\u009b\u009c\u009d\u009e\u009f\u00a0\u00a1\u00a2\u00a3\u00a4\u00a5\u00a6\u00a7\u00a8\u00a9\u00aa\u00ab\u00ac\u00ad\u00ae\u00af\u00b0\u00b1\u00b2\u00b3\u00b4\u00b5\u00b6\u00b7\u00b8\u00b9\u00ba\u00bb\u00bc\u00bd\u00be\u00bf\u00c0\u00c1\u00c2\u00c3\u00c4\u00c5\u00c6\u00c7\u00c8\u00c9\u00ca\u00cb\u00cc\u00cd\u00ce\u00cf\u00d0\u00d1\u00d2\u00d3\u00d4\u00d5\u00d6\u00d7\u00d8\u00d9\u00da\u00db\u00dc\u00dd\u00de\u00df\u00e0\u00e1\u00e2\u00e3\u00e4\u00e5\u00e6\u00e7\u00e8\u00e9\u00ea\u00eb\u00ec\u00ed\u00ee\u00ef\u00f0\u00f1\u00f2\u00f3\u00f4\u00f5\u00f6\u00f7\u00f8\u00f9\u00fa\u00fb\u00fc\u00fd\u00fe\u00ff diff --git a/jdk/test/sun/tools/native2ascii/Native2AsciiTests.sh b/jdk/test/sun/tools/native2ascii/Native2AsciiTests.sh deleted file mode 100644 index 5c886c2100d..00000000000 --- a/jdk/test/sun/tools/native2ascii/Native2AsciiTests.sh +++ /dev/null @@ -1,129 +0,0 @@ -#! /bin/sh -e - -# -# Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# @test -# @bug 4630463 4630971 4636448 4701617 4721296 4710890 6247817 7021987 8067964 -# @summary Tests miscellaneous native2ascii bugfixes and regressions - - -if [ "${TESTSRC}" = "" ]; then TESTSRC=.; fi -if [ "${TESTJAVA}" = "" ]; then TESTJAVA=$1; shift; fi - -case `uname -s` in - Windows* | CYGWIN*) OS=Windows;; - SunOS|Linux) OS=Unix;; -esac - -N2A=$TESTJAVA/bin/native2ascii - -check() { - bug=$1; shift - expected=$1; shift - out=$1; shift - - # Strip carriage returns from output when comparing with n2a test output - # on win32 systems - if [ ${OS} = Windows ]; then - sed -e 's@\\r@@g' $out >$out.1 - sed -e 's@\\r@@g' $expected >$out.expected - else - cp $out $out.1 - cp $expected $out.expected - fi - if (set -x; diff -c $out.expected $out.1); then - echo "$bug passed" - else - echo "$bug failed" - exit 1 - fi -} - -# Check that native2ascii -reverse with an ISO-8859-1 encoded file works -# as documented. 4630463 fixes a bug in the ISO-8859-1 encoder which -# prevented encoding of valid ISO-8859-1 chars > 0x7f - -rm -f x.* -$N2A -reverse -encoding ISO-8859-1 $TESTSRC/A2N_4630463 x.out -check 4630463 $TESTSRC/A2N_4630463.expected x.out - -# Take file encoded in ISO-8859-1 with range of chars , 0x7f < c < 0xff -# invoke native2ascii with input filename and output filename identical -# Ensure that output file is as expected by comparing to expected output. -# 4636448 Fixed bug whereby output file was clobbered if infile and outfile -# referred to same filename. This bug only applies to Solaris/Linux, since on -# Windows you can't write to a file that's open for reading. - -if [ $OS = Unix ]; then - rm -f x.* - cp $TESTSRC/N2A_4636448 x.in - chmod +w x.in - ls -l x.in - if $N2A -encoding ISO-8859-1 x.in x.in; then - check 4636448 $TESTSRC/N2A_4636448.expected x.in - fi -fi - -# Ensure that files containing backslashes adjacent to EOF don't -# hang native2ascii -reverse - -rm -f x.* -$N2A -reverse -encoding ISO-8859-1 $TESTSRC/A2N_4630971 x.out -check 4630971 $TESTSRC/A2N_4630971 x.out - -# Check reverse (char -> native) encoding of Japanese Halfwidth -# Katakana characters for MS932 (default WinNT Japanese encoding) -# Regression test for bugID 4701617 - -rm -f x.* -$N2A -reverse -encoding MS932 $TESTSRC/A2N_4701617 x.out -check 4701617 $TESTSRC/A2N_4701617.expected x.out - -# Check that the inputfile appears in the error message when not found - -badin="DoesNotExist" -$N2A $badin x.out | grep "$badin" > /dev/null -if [ $? != 0 ]; then - echo "\"$badin\" expected to appear in error message" - exit 1 -fi - -# for win32 only ensure when output file pre-exists that -# native2ascii tool will simply overwrite with the expected -# output file (fixed bugID 4710890) - -if [ OS = Windows ]; then - rm -f x.* - cp $TESTSRC/test3 x.in - chmod a+x x.in - ls -l x.in - touch x.out - $N2A -encoding ISO-8859-1 x.in x.out - check 4710890 $TESTSRC/test3 x.out -fi - -rm -rf x.* -$N2A -reverse $TESTSRC/A2N_6247817 x.out -check 4701617 $TESTSRC/A2N_6247817 x.out - diff --git a/jdk/test/sun/tools/native2ascii/NativeErrors.java b/jdk/test/sun/tools/native2ascii/NativeErrors.java deleted file mode 100644 index 81b1920b36a..00000000000 --- a/jdk/test/sun/tools/native2ascii/NativeErrors.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) 1998, 1999, 2014 Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 4136352 - * @library /lib/testlibrary - * @summary Test Native2ASCII error messages - * - */ - -import java.io.File; -import java.util.ResourceBundle; -import java.util.MissingResourceException; -import jdk.testlibrary.OutputAnalyzer; -import jdk.testlibrary.JDKToolLauncher; -import jdk.testlibrary.ProcessTools; - -public class NativeErrors { - - private static ResourceBundle rsrc; - - static { - try { - rsrc = ResourceBundle.getBundle( - "sun.tools.native2ascii.resources.MsgNative2ascii"); - } catch (MissingResourceException e) { - throw new Error("Missing message file."); - } - } - - public static void main(String args[]) throws Throwable { - // Execute command in another vm. Verify stdout for expected err msg. - - // Test with no input file given. - checkResult(executeCmd("-encoding"), "err.bad.arg"); - - File f0 = new File(System.getProperty("test.src", "."), "test123"); - String path0 = f0.getPath(); - if ( f0.exists() ) { - throw new Error("Input file should not exist: " + path0); - } - checkResult(executeCmd(path0), "err.cannot.read"); - - File f1 = new File(System.getProperty("test.src", "."), "test1"); - File f2 = File.createTempFile("test2", ".tmp"); - String path1 = f1.getPath(); - String path2 = f2.getPath(); - if ( !f1.exists() ) { - throw new Error("Missing input file: " + path1); - } - if ( !f2.setWritable(false) ) { - throw new Error("Output file cannot be made read only: " + path2); - } - f2.deleteOnExit(); - if ( f2.canWrite() ) { - String msg = "Output file is still writable. " + - "Probably because test is run as root. Read-only test skipped."; - System.out.println(msg); - } else { - // Test write to a read-only file. - checkResult(executeCmd(path1, path2), "err.cannot.write"); - } - } - - private static String executeCmd(String... toolArgs) throws Throwable { - JDKToolLauncher cmd = JDKToolLauncher.createUsingTestJDK("native2ascii"); - for (String s : toolArgs) { - cmd.addToolArg(s); - } - OutputAnalyzer output = ProcessTools.executeProcess(cmd.getCommand()); - if (output == null || output.getStdout() == null) { - throw new Exception("Output was null. Process did not finish correctly."); - } - if (output.getExitValue() == 0) { - throw new Exception("Process exit code was 0, but error was expected."); - } - return output.getStdout(); - } - - private static void checkResult( - String errorReceived, String errorKey) throws Exception { - String errorExpected = rsrc.getString(errorKey); - if (errorExpected == null) { - throw new Exception("No error message for key: " + errorKey); - } - // Remove template tag from error message. - errorExpected = errorExpected.replaceAll("\\{0\\}", ""); - - System.out.println("received: " + errorReceived); - System.out.println("expected: " + errorExpected); - if (errorReceived.indexOf(errorExpected) < 0) { - throw new RuntimeException("Native2ascii bad arg error broken."); - } - } - -} diff --git a/jdk/test/sun/tools/native2ascii/Permission.java b/jdk/test/sun/tools/native2ascii/Permission.java deleted file mode 100644 index 53718d21fd7..00000000000 --- a/jdk/test/sun/tools/native2ascii/Permission.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test - * @bug 7177216 - * @summary resulting file of native2ascii should have normal permission - */ - -import java.io.*; -import java.nio.file.*; -import java.nio.file.attribute.*; -import sun.tools.native2ascii.Main; - -public class Permission { - - private static void cleanup(String... fnames) throws Throwable { - for (String fname : fnames) { - Files.deleteIfExists(Paths.get(fname)); - } - } - - public static void realMain(String[] args) throws Throwable { - if (!System.getProperty("os.name").startsWith("Windows")) { - String src = "native2ascii_permtest_src"; - String dst = "native2ascii_permtest_dst"; - - cleanup(src, dst); - try { - try (FileOutputStream fos = new FileOutputStream(src)) { - fos.write('a'); fos.write('b'); fos.write('c'); - } - String[] n2aArgs = new String[] {"-encoding", "utf8", src, dst}; - if (!new Main().convert(n2aArgs)) { - fail("n2a failed."); - } - equal(Files.getPosixFilePermissions(Paths.get(src)), - Files.getPosixFilePermissions(Paths.get(dst))); - String[] a2nArgs = new String[] {"-reverse", "-encoding", "utf8", dst, src}; - if (!new Main().convert(a2nArgs)) { - fail("a2n failed."); - } - equal(Files.getPosixFilePermissions(Paths.get(src)), - Files.getPosixFilePermissions(Paths.get(dst))); - } finally { - cleanup(src, dst); - } - } - } - - //--------------------- Infrastructure --------------------------- - static volatile int passed = 0, failed = 0; - static void pass() {passed++;} - static void fail() {failed++; Thread.dumpStack();} - static void fail(String msg) {System.out.println(msg); fail();} - static void unexpected(Throwable t) {failed++; t.printStackTrace();} - static void check(boolean cond) {if (cond) pass(); else fail();} - static void equal(Object x, Object y) { - if (x == null ? y == null : x.equals(y)) pass(); - else fail(x + " not equal to " + y);} - public static void main(String[] args) throws Throwable { - try {realMain(args);} catch (Throwable t) {unexpected(t);} - System.out.println("\nPassed = " + passed + " failed = " + failed); - if (failed > 0) throw new AssertionError("Some tests failed");} -} diff --git a/jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.java b/jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.java deleted file mode 100644 index 2a00ab813f4..00000000000 --- a/jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * - * @test - * @bug 6287579 - * @summary SubClasses of ListResourceBundle should fix getContents() - * @run main ImmutableResourceTest - * - * @author Tim Bell - * - */ -import java.util.ResourceBundle; - -public class ImmutableResourceTest { - - public static void main(String[] args) throws Exception { - /* Reach under the covers and get the message strings */ - sun.tools.native2ascii.resources.MsgNative2ascii msgs = - new sun.tools.native2ascii.resources.MsgNative2ascii (); - Object [][] testData = msgs.getContents(); - - /* Shred our copy of the message strings */ - for (int ii = 0; ii < testData.length; ii++) { - testData[ii][0] = "T6287579"; - testData[ii][1] = "yyy"; - } - - /* - * Try to lookup the shredded key. - * If this is successful we have a problem. - */ - String ss = null; - try { - ss = msgs.getString("T6287579"); - } catch (java.util.MissingResourceException mre) { - /* - * Ignore the expected MissingResourceException since key - * "T6287579" is not in the canonical MsgNative2ascii. - */ - } - if ("yyy".equals(ss)) { - throw new Exception ("SubClasses of ListResourceBundle should fix getContents()"); - } - System.out.println("...Finished."); - } -} diff --git a/jdk/test/sun/tools/native2ascii/test1 b/jdk/test/sun/tools/native2ascii/test1 deleted file mode 100644 index 35f7ab26c98..00000000000 --- a/jdk/test/sun/tools/native2ascii/test1 +++ /dev/null @@ -1 +0,0 @@ -This file exists as a readable placeholder for NativeErrors.java. diff --git a/jdk/test/sun/tools/native2ascii/test3 b/jdk/test/sun/tools/native2ascii/test3 deleted file mode 100644 index b816ce24a64..00000000000 --- a/jdk/test/sun/tools/native2ascii/test3 +++ /dev/null @@ -1 +0,0 @@ -This file exists as a non-writable placeholder for Native2AsciiTests diff --git a/jdk/test/tools/launcher/VersionCheck.java b/jdk/test/tools/launcher/VersionCheck.java index d7044446588..687917177e3 100644 --- a/jdk/test/tools/launcher/VersionCheck.java +++ b/jdk/test/tools/launcher/VersionCheck.java @@ -93,7 +93,6 @@ public class VersionCheck extends TestHelper { "kinit", "klist", "ktab", - "native2ascii", "orbd", "pack200", "packager", From 81ae8feaedeeb3c910401c575620bbbf9a425113 Mon Sep 17 00:00:00 2001 From: Mandy Chung Date: Fri, 22 May 2015 16:44:49 -0700 Subject: [PATCH 37/82] 8074431: Remove native2ascii tool Reviewed-by: erikj, alanb, okutsu, mfang, naoto --- .../javac/4846262/CheckEBCDICLocaleTest.java | 13 +- .../tools/javac/4846262/Native2Ascii.java | 213 ++++++++++++++++++ 2 files changed, 217 insertions(+), 9 deletions(-) create mode 100644 langtools/test/tools/javac/4846262/Native2Ascii.java diff --git a/langtools/test/tools/javac/4846262/CheckEBCDICLocaleTest.java b/langtools/test/tools/javac/4846262/CheckEBCDICLocaleTest.java index 95f446c9108..cb0b3ef8b10 100644 --- a/langtools/test/tools/javac/4846262/CheckEBCDICLocaleTest.java +++ b/langtools/test/tools/javac/4846262/CheckEBCDICLocaleTest.java @@ -34,6 +34,7 @@ */ import java.io.File; +import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -64,14 +65,11 @@ public class CheckEBCDICLocaleTest { public void test() throws Exception { ToolBox tb = new ToolBox(); - Path native2asciiBinary = tb.getJDKTool("native2ascii"); - tb.writeFile("Test.java", TestSrc); tb.createDirectories("output"); - tb.new ExecTask(native2asciiBinary) - .args("-reverse", "-encoding", "IBM1047", "Test.java", "output/Test.java") - .run(); + Native2Ascii n2a = new Native2Ascii(Charset.forName("IBM1047")); + n2a.asciiToNative(Paths.get("Test.java"), Paths.get("output", "Test.java")); tb.new JavacTask(ToolBox.Mode.EXEC) .redirect(ToolBox.OutputKind.STDERR, "Test.tmp") @@ -81,14 +79,11 @@ public class CheckEBCDICLocaleTest { .files("output/Test.java") .run(ToolBox.Expect.FAIL); - tb.new ExecTask(native2asciiBinary) - .args("-encoding", "IBM1047", "Test.tmp", "Test.out") - .run(); + n2a.nativeToAscii(Paths.get("Test.tmp"), Paths.get("Test.out")); List expectLines = Arrays.asList( String.format(TestOutTemplate, File.separator).split("\n")); List actualLines = Files.readAllLines(Paths.get("Test.out")); tb.checkEqual(expectLines, actualLines); } - } diff --git a/langtools/test/tools/javac/4846262/Native2Ascii.java b/langtools/test/tools/javac/4846262/Native2Ascii.java new file mode 100644 index 00000000000..e49389b4637 --- /dev/null +++ b/langtools/test/tools/javac/4846262/Native2Ascii.java @@ -0,0 +1,213 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FilterReader; +import java.io.FilterWriter; +import java.io.IOException; +import java.io.Reader; +import java.io.Writer; +import java.nio.charset.Charset; +import java.nio.charset.CharsetEncoder; +import java.nio.file.Files; +import java.nio.file.Path; +import static java.nio.charset.StandardCharsets.*; + +/** + * Simple utility to convert from native encoding file to ascii or reverse + * including \udddd Unicode notation. + */ +public class Native2Ascii { + final Charset cs; + final CharsetEncoder encoder; + public Native2Ascii(Charset cs) { + this.cs = cs; + this.encoder = cs.newEncoder(); + } + + /** + * ASCII to Native conversion + */ + public void asciiToNative(Path infile, Path outfile) throws IOException { + try (BufferedReader in = Files.newBufferedReader(infile, US_ASCII); + BufferedReader reader = new BufferedReader(new A2NFilter(in)); + BufferedWriter writer = Files.newBufferedWriter(outfile, cs)) { + String line; + while ((line = reader.readLine()) != null) { + writer.write(line.toCharArray()); + writer.newLine(); + } + } + } + + /** + * Native to ASCII conversion + */ + public void nativeToAscii(Path infile, Path outfile) throws IOException { + try (BufferedReader reader = Files.newBufferedReader(infile, cs); + BufferedWriter out = Files.newBufferedWriter(outfile, US_ASCII); + BufferedWriter writer = new BufferedWriter(new N2AFilter(out))) { + String line; + while ((line = reader.readLine()) != null) { + writer.write(line.toCharArray()); + writer.newLine(); + } + } + } + + // A copy of native2ascii N2AFilter + class N2AFilter extends FilterWriter { + public N2AFilter(Writer out) { super(out); } + public void write(char b) throws IOException { + char[] buf = new char[1]; + buf[0] = b; + write(buf, 0, 1); + } + + public void write(char[] buf, int off, int len) throws IOException { + for (int i = 0; i < len; i++) { + if ((buf[i] > '\u007f')) { + // write \udddd + out.write('\\'); + out.write('u'); + String hex = Integer.toHexString(buf[i]); + StringBuilder hex4 = new StringBuilder(hex); + hex4.reverse(); + int length = 4 - hex4.length(); + for (int j = 0; j < length; j++) { + hex4.append('0'); + } + for (int j = 0; j < 4; j++) { + out.write(hex4.charAt(3 - j)); + } + } else + out.write(buf[i]); + } + } + } + + // A copy of native2ascii A2NFilter + class A2NFilter extends FilterReader { + // maintain a trailing buffer to hold any incompleted + // unicode escaped sequences + private char[] trailChars = null; + + public A2NFilter(Reader in) { + super(in); + } + + public int read(char[] buf, int off, int len) throws IOException { + int numChars = 0; // how many characters have been read + int retChars = 0; // how many characters we'll return + + char[] cBuf = new char[len]; + int cOffset = 0; // offset at which we'll start reading + boolean eof = false; + + // copy trailing chars from previous invocation to input buffer + if (trailChars != null) { + for (int i = 0; i < trailChars.length; i++) + cBuf[i] = trailChars[i]; + numChars = trailChars.length; + trailChars = null; + } + + int n = in.read(cBuf, numChars, len - numChars); + if (n < 0) { + eof = true; + if (numChars == 0) + return -1; // EOF; + } else { + numChars += n; + } + + for (int i = 0; i < numChars; ) { + char c = cBuf[i++]; + + if (c != '\\' || (eof && numChars <= 5)) { + // Not a backslash, so copy and continue + // Always pass non backslash chars straight thru + // for regular encoding. If backslash occurs in + // input stream at the final 5 chars then don't + // attempt to read-ahead and de-escape since these + // are literal occurrences of U+005C which need to + // be encoded verbatim in the target encoding. + buf[retChars++] = c; + continue; + } + + int remaining = numChars - i; + if (remaining < 5) { + // Might be the first character of a unicode escape, but we + // don't have enough characters to tell, so save it and finish + trailChars = new char[1 + remaining]; + trailChars[0] = c; + for (int j = 0; j < remaining; j++) + trailChars[1 + j] = cBuf[i + j]; + break; + } + // At this point we have at least five characters remaining + + c = cBuf[i++]; + if (c != 'u') { + // Not a unicode escape, so copy and continue + buf[retChars++] = '\\'; + buf[retChars++] = c; + continue; + } + + // The next four characters are the hex part of a unicode escape + char rc = 0; + boolean isUE = true; + try { + rc = (char) Integer.parseInt(new String(cBuf, i, 4), 16); + } catch (NumberFormatException x) { + isUE = false; + } + if (isUE && encoder.canEncode(rc)) { + // We'll be able to convert this + buf[retChars++] = rc; + i += 4; // Align beyond the current uXXXX sequence + } else { + // We won't, so just retain the original sequence + buf[retChars++] = '\\'; + buf[retChars++] = 'u'; + continue; + } + + } + + return retChars; + } + + public int read() throws IOException { + char[] buf = new char[1]; + + if (read(buf, 0, 1) == -1) + return -1; + else + return (int) buf[0]; + } + } +} From af164e79264970fd662aa9519724994d39252dec Mon Sep 17 00:00:00 2001 From: Sean Mullan Date: Sun, 24 May 2015 08:54:38 -0400 Subject: [PATCH 38/82] 8065233: Remove Policy provider code that synchronizes on identityPolicyEntries List Reviewed-by: weijun --- .../sun/security/provider/PolicyFile.java | 49 +------------------ .../share/conf/security/java.security | 3 +- 2 files changed, 4 insertions(+), 48 deletions(-) diff --git a/jdk/src/java.base/share/classes/sun/security/provider/PolicyFile.java b/jdk/src/java.base/share/classes/sun/security/provider/PolicyFile.java index 9b1de6805f9..33605436f82 100644 --- a/jdk/src/java.base/share/classes/sun/security/provider/PolicyFile.java +++ b/jdk/src/java.base/share/classes/sun/security/provider/PolicyFile.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -278,7 +278,6 @@ public class PolicyFile extends java.security.Policy { private boolean constructed = false; private boolean expandProperties = true; - private boolean ignoreIdentityScope = true; private boolean allowSystemProperties = true; private boolean notUtf8 = false; private URL url; @@ -415,8 +414,6 @@ public class PolicyFile extends java.security.Policy { public String run() { expandProperties = "true".equalsIgnoreCase (Security.getProperty("policy.expandProperties")); - ignoreIdentityScope = "true".equalsIgnoreCase - (Security.getProperty("policy.ignoreIdentityScope")); allowSystemProperties = "true".equalsIgnoreCase (Security.getProperty("policy.allowSystemProperty")); notUtf8 = "false".equalsIgnoreCase @@ -1206,31 +1203,6 @@ public class PolicyFile extends java.security.Policy { addPermissions(perms, cs, principals, entry); } - // Go through policyEntries gotten from identity db; sync required - // because checkForTrustedIdentity (below) might update list - synchronized (pi.identityPolicyEntries) { - for (PolicyEntry entry : pi.identityPolicyEntries) { - addPermissions(perms, cs, principals, entry); - } - } - - // now see if any of the keys are trusted ids. - if (!ignoreIdentityScope) { - Certificate certs[] = cs.getCertificates(); - if (certs != null) { - for (int k=0; k < certs.length; k++) { - Object idMap = pi.aliasMapping.get(certs[k]); - if (idMap == null && - checkForTrustedIdentity(certs[k], pi)) { - // checkForTrustedIdentity added it - // to the policy for us. next time - // around we'll find it. This time - // around we need to add it. - perms.add(SecurityConstants.ALL_PERMISSION); - } - } - } - } return perms; } @@ -1620,7 +1592,7 @@ public class PolicyFile extends java.security.Policy { * associated with the given code source. * * The signer certificates are those certificates that were used - * to verifysigned code originating from the codesource location. + * to verify signed code originating from the codesource location. * * This method assumes that in the given code source, each signer * certificate is followed by its supporting certificate chain @@ -1916,17 +1888,6 @@ public class PolicyFile extends java.security.Policy { } } - /** - * Checks public key. If it is marked as trusted in - * the identity database, add it to the policy - * with the AllPermission. - */ - private boolean checkForTrustedIdentity(final Certificate cert, - PolicyInfo myInfo) - { - return false; - } - /** * Each entry in the policy configuration file is represented by a * PolicyEntry object.

    @@ -2282,10 +2243,6 @@ public class PolicyFile extends java.security.Policy { // Stores grant entries in the policy final List policyEntries; - // Stores grant entries gotten from identity database - // Use separate lists to avoid sync on policyEntries - final List identityPolicyEntries; - // Maps aliases to certs final Map aliasMapping; @@ -2295,8 +2252,6 @@ public class PolicyFile extends java.security.Policy { PolicyInfo(int numCaches) { policyEntries = new ArrayList<>(); - identityPolicyEntries = - Collections.synchronizedList(new ArrayList(2)); aliasMapping = Collections.synchronizedMap(new HashMap<>(11)); pdMapping = new ProtectionDomainCache[numCaches]; diff --git a/jdk/src/java.base/share/conf/security/java.security b/jdk/src/java.base/share/conf/security/java.security index be33f832a36..0f1fe1f5e27 100644 --- a/jdk/src/java.base/share/conf/security/java.security +++ b/jdk/src/java.base/share/conf/security/java.security @@ -179,7 +179,8 @@ policy.allowSystemProperty=true # whether or not we look into the IdentityScope for trusted Identities # when encountering a 1.1 signed JAR file. If the identity is found -# and is trusted, we grant it AllPermission. +# and is trusted, we grant it AllPermission. Note: the default policy +# provider (sun.security.provider.PolicyFile) does not support this property. policy.ignoreIdentityScope=false # From b013ddda1d2f6b3ce1f12e2710e67a47f542ceab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20Lid=C3=A9n?= Date: Mon, 25 May 2015 09:13:41 +0200 Subject: [PATCH 39/82] 8080930: SA changes broke bootcycle-images builds Reviewed-by: sla, brutisso --- hotspot/make/sa.files | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hotspot/make/sa.files b/hotspot/make/sa.files index 1c73c21c465..a39dc1c98e9 100644 --- a/hotspot/make/sa.files +++ b/hotspot/make/sa.files @@ -79,8 +79,10 @@ $(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windbg/x86/*.java \ $(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windows/x86/*.java \ $(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windows/amd64/*.java \ $(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/x86/*.java \ +$(AGENT_SRC_DIR)/sun/jvm/hotspot/gc/cms/*.java \ $(AGENT_SRC_DIR)/sun/jvm/hotspot/gc/g1/*.java \ $(AGENT_SRC_DIR)/sun/jvm/hotspot/gc/parallel/*.java \ +$(AGENT_SRC_DIR)/sun/jvm/hotspot/gc/serial/*.java \ $(AGENT_SRC_DIR)/sun/jvm/hotspot/gc/shared/*.java \ $(AGENT_SRC_DIR)/sun/jvm/hotspot/interpreter/*.java \ $(AGENT_SRC_DIR)/sun/jvm/hotspot/jdi/*.java \ From 6b7bbd4884767e23093635b3c165737e7a89ec91 Mon Sep 17 00:00:00 2001 From: Artem Smotrakov Date: Mon, 25 May 2015 11:47:41 +0300 Subject: [PATCH 40/82] 8050374: More Signature tests Reviewed-by: valeriep --- jdk/test/java/security/Signature/Offsets.java | 251 ++++++++++++++++++ .../java/security/SignedObject/Chain.java | 216 +++++++++++++++ jdk/test/java/security/SignedObject/Copy.java | 123 +++++++++ .../sun/security/ec/SignatureOffsets.java | 52 ++++ .../sun/security/ec/SignedObjectChain.java | 57 ++++ .../sun/security/mscapi/SignatureOffsets.java | 53 ++++ .../security/mscapi/SignedObjectChain.java | 58 ++++ .../sun/security/rsa/SignatureOffsets.java | 53 ++++ .../sun/security/rsa/SignedObjectChain.java | 59 ++++ .../security/ssl/rsa/SignatureOffsets.java | 50 ++++ .../security/ssl/rsa/SignedObjectChain.java | 56 ++++ 11 files changed, 1028 insertions(+) create mode 100644 jdk/test/java/security/Signature/Offsets.java create mode 100644 jdk/test/java/security/SignedObject/Chain.java create mode 100644 jdk/test/java/security/SignedObject/Copy.java create mode 100644 jdk/test/sun/security/ec/SignatureOffsets.java create mode 100644 jdk/test/sun/security/ec/SignedObjectChain.java create mode 100644 jdk/test/sun/security/mscapi/SignatureOffsets.java create mode 100644 jdk/test/sun/security/mscapi/SignedObjectChain.java create mode 100644 jdk/test/sun/security/rsa/SignatureOffsets.java create mode 100644 jdk/test/sun/security/rsa/SignedObjectChain.java create mode 100644 jdk/test/sun/security/ssl/rsa/SignatureOffsets.java create mode 100644 jdk/test/sun/security/ssl/rsa/SignedObjectChain.java diff --git a/jdk/test/java/security/Signature/Offsets.java b/jdk/test/java/security/Signature/Offsets.java new file mode 100644 index 00000000000..9e71690ea4f --- /dev/null +++ b/jdk/test/java/security/Signature/Offsets.java @@ -0,0 +1,251 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.security.InvalidKeyException; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.Signature; +import java.security.SignatureException; +import jdk.testlibrary.RandomFactory; + +/* + * @test + * @bug 8050374 + * @key randomness + * @summary This test validates signature verification + * Signature.verify(byte[], int, int). The test uses RandomFactory to + * get random set of clear text data to sign. After the signature + * generation, the test tries to verify signature with the above API + * and passing in different signature offset (0, 33, 66, 99). + * @library /lib/testlibrary + * @run main Offsets SUN NONEwithDSA + * @run main Offsets SUN SHA1withDSA + * @run main Offsets SUN SHA224withDSA + * @run main Offsets SUN SHA256withDSA + */ +public class Offsets { + + private final int size; + private final byte[] cleartext; + private final PublicKey pubkey; + private final Signature signature; + private final byte[] signed; + + private Offsets(Signature signature, PublicKey pubkey, PrivateKey privkey, + int size, byte[] cleartext) throws InvalidKeyException, + SignatureException { + this.pubkey = pubkey; + this.signature = signature; + this.size = size; + this.cleartext = cleartext; + + signature.initSign(privkey); + signature.update(cleartext, 0, size); + signed = signature.sign(); + } + + int getDataSize() { + return size; + } + + int getSignatureLength() { + return signed.length; + } + + byte[] shiftSignData(int offset) { + byte[] testSignData = new byte[offset + signed.length]; + System.arraycopy(signed, 0, testSignData, offset, + signed.length); + return testSignData; + } + + boolean verifySignature(byte[] sigData, int sigOffset, int sigLength, + int updateOffset, int updateLength) + throws InvalidKeyException, SignatureException { + signature.initVerify(pubkey); + signature.update(cleartext, updateOffset, updateLength); + return signature.verify(sigData, sigOffset, sigLength); + } + + static Offsets init(String provider, String algorithm) + throws NoSuchAlgorithmException, NoSuchProviderException, + InvalidKeyException, SignatureException { + // fill the cleartext data with random bytes + byte[] cleartext = new byte[100]; + RandomFactory.getRandom().nextBytes(cleartext); + + // NONEwith requires input to be of 20 bytes + int size = algorithm.contains("NONEwith") ? 20 : 100; + + // create signature instance + Signature signature = Signature.getInstance(algorithm, provider); + + String keyAlgo; + if (algorithm.contains("RSA")) { + keyAlgo = "RSA"; + } else if (algorithm.contains("ECDSA")) { + keyAlgo = "EC"; + } else if (algorithm.contains("DSA")) { + keyAlgo = "DSA"; + } else { + throw new RuntimeException("Test doesn't support this signature " + + "algorithm: " + algorithm); + } + + KeyPairGenerator kpg = KeyPairGenerator.getInstance(keyAlgo, provider); + KeyPair kp = kpg.generateKeyPair(); + PublicKey pubkey = kp.getPublic(); + PrivateKey privkey = kp.getPrivate(); + + return new Offsets(signature, pubkey, privkey, size, cleartext); + } + + public static void main(String[] args) throws NoSuchAlgorithmException, + InvalidKeyException, SignatureException { + if (args.length < 2) { + throw new RuntimeException("Wrong parameters"); + } + + boolean result = true; + try { + Offsets test = init(args[0], args[1]); + + // We are trying 3 different offsets, data size has nothing to do + // with signature length + for (int chunk = 3; chunk > 0; chunk--) { + int signOffset = test.getDataSize() / chunk; + + System.out.println("Running test with offset " + signOffset); + byte[] signData = test.shiftSignData(signOffset); + + boolean success = test.verifySignature(signData, signOffset, + test.getSignatureLength(), 0, test.getDataSize()); + + if (success) { + System.out.println("Successfully verified with offset " + + signOffset); + } else { + System.out.println("Verification failed with offset " + + signOffset); + result = false; + } + } + + // save signature to offset 0 + byte[] signData = test.shiftSignData(0); + + // Negative tests + + // Test signature offset 0. + // Wrong test data will be passed to update, + // so signature verification should fail. + for (int chunk = 3; chunk > 0; chunk--) { + int dataOffset = (test.getDataSize() - 1) / chunk; + boolean success; + try { + success = test.verifySignature(signData, 0, + test.getSignatureLength(), dataOffset, + (test.getDataSize() - dataOffset)); + } catch (SignatureException e) { + // Since we are trying different data size, it can throw + // SignatureException + success = false; + } + + if (!success) { + System.out.println("Signature verification failed " + + "as expected, with data offset " + dataOffset + + " and length " + + (test.getDataSize() - dataOffset)); + } else { + System.out.println("Signature verification " + + "should not succeed, with data offset " + + dataOffset + " and length " + + (test.getDataSize() - dataOffset)); + result = false; + } + } + + // Tests with manipulating offset and length + result &= Offsets.checkFailure(test, signData, -1, + test.getSignatureLength()); + + result &= Offsets.checkFailure(test, signData, 0, + test.getSignatureLength() - 1); + + result &= Offsets.checkFailure(test, signData, + test.getSignatureLength() + 1, test.getSignatureLength()); + + result &= Offsets.checkFailure(test, signData, 0, + test.getSignatureLength() + 1); + + result &= Offsets.checkFailure(test, signData, 0, 0); + + result &= Offsets.checkFailure(test, signData, 0, -1); + + result &= Offsets.checkFailure(test, signData, + 2147483646, test.getSignatureLength()); + + result &= Offsets.checkFailure(test, null, 0, + test.getSignatureLength()); + } catch (NoSuchProviderException nspe) { + System.out.println("No such provider: " + nspe); + } + + if (!result) { + throw new RuntimeException("Some test cases failed"); + } + } + + static boolean checkFailure(Offsets test, byte[] signData, int offset, + int length) { + boolean success; + try { + success = test.verifySignature(signData, offset, length, 0, + test.getDataSize()); + } catch (IllegalArgumentException | SignatureException e) { + System.out.println("Expected exception: " + e); + success = false; + } catch (InvalidKeyException e) { + System.out.println("Unexpected exception: " + e); + return false; + } + + if (!success) { + System.out.println("Signature verification failed as expected, " + + "with signature offset " + offset + " and length " + + length); + return true; + } else { + System.out.println("Signature verification should not succeed, " + + "with signature offset " + offset + " and length " + + length); + return false; + } + } + +} diff --git a/jdk/test/java/security/SignedObject/Chain.java b/jdk/test/java/security/SignedObject/Chain.java new file mode 100644 index 00000000000..e6c423cbb02 --- /dev/null +++ b/jdk/test/java/security/SignedObject/Chain.java @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.security.Signature; +import java.security.SignedObject; +import java.security.KeyPairGenerator; +import java.security.KeyPair; +import java.security.NoSuchProviderException; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.util.Arrays; + +/* + * @test + * @bug 8050374 + * @summary Verify a chain of signed objects + */ +public class Chain { + + static enum KeyAlg { + RSA("RSA"), + DSA("DSA"), + EC("EC"); + + final String name; + + KeyAlg(String alg) { + this.name = alg; + } + } + + static enum Provider { + Default("default"), + SunRsaSign("SunRsaSign"), + Sun("SUN"), + SunEC("SunEC"), + SunJSSE("SunJSSE"), + SunMSCAPI("SunMSCAPI"); + + final String name; + + Provider(String name) { + this.name = name; + } + } + + static enum SigAlg { + MD2withRSA("MD2withRSA"), + MD5withRSA("md5withRSA"), + + SHA1withDSA("SHA1withDSA"), + SHA224withDSA("SHA224withDSA"), + SHA256withDSA("SHA256withDSA"), + + SHA1withRSA("Sha1withrSA"), + SHA224withRSA("SHA224withRSA"), + SHA256withRSA("SHA256withRSA"), + SHA384withRSA("SHA384withRSA"), + SHA512withRSA("SHA512withRSA"), + + SHA1withECDSA("SHA1withECDSA"), + SHA256withECDSA("SHA256withECDSA"), + SHA224withECDSA("SHA224withECDSA"), + SHA384withECDSA("SHA384withECDSA"), + SHA512withECDSA("SHA512withECDSA"), + + MD5andSHA1withRSA("MD5andSHA1withRSA"); + + final String name; + + SigAlg(String name) { + this.name = name; + } + } + + static class Test { + final Provider provider; + final KeyAlg keyAlg; + final SigAlg sigAlg; + + Test(SigAlg sigAlg, KeyAlg keyAlg, Provider privider) { + this.provider = privider; + this.keyAlg = keyAlg; + this.sigAlg = sigAlg; + } + } + + private static final Test[] tests = { + new Test(SigAlg.SHA1withDSA, KeyAlg.DSA, Provider.Default), + new Test(SigAlg.MD2withRSA, KeyAlg.RSA, Provider.Default), + new Test(SigAlg.MD5withRSA, KeyAlg.RSA, Provider.Default), + new Test(SigAlg.SHA1withRSA, KeyAlg.RSA, Provider.Default), + new Test(SigAlg.SHA1withDSA, KeyAlg.DSA, Provider.Sun), + new Test(SigAlg.SHA224withDSA, KeyAlg.DSA, Provider.Sun), + new Test(SigAlg.SHA256withDSA, KeyAlg.DSA, Provider.Sun), + }; + + private static final String str = "to-be-signed"; + private static final int N = 3; + + public static void main(String argv[]) { + boolean result = Arrays.stream(tests).allMatch((test) -> runTest(test)); + if(result) { + System.out.println("All tests passed"); + } else { + throw new RuntimeException("Some tests failed"); + } + } + + static boolean runTest(Test test) { + System.out.format("Test: provider = %s, signature algorithm = %s, " + + "key algorithm = %s\n", + test.provider, test.sigAlg, test.keyAlg); + try { + // Generate all private/public key pairs + PrivateKey[] privKeys = new PrivateKey[N]; + PublicKey[] pubKeys = new PublicKey[N]; + PublicKey[] anotherPubKeys = new PublicKey[N]; + KeyPairGenerator kpg = KeyPairGenerator.getInstance( + test.keyAlg.name); + for (int j=0; j < N; j++) { + KeyPair kp = kpg.genKeyPair(); + KeyPair anotherKp = kpg.genKeyPair(); + privKeys[j] = kp.getPrivate(); + pubKeys[j] = kp.getPublic(); + anotherPubKeys[j] = anotherKp.getPublic(); + + if (Arrays.equals(pubKeys[j].getEncoded(), + anotherPubKeys[j].getEncoded())) { + System.out.println("Failed: it should not get " + + "the same pair of public key"); + return false; + } + } + + Signature signature; + if (test.provider != Provider.Default) { + signature = Signature.getInstance(test.sigAlg.name, + test.provider.name); + } else { + signature = Signature.getInstance(test.sigAlg.name); + } + + // Create a chain of signed objects + SignedObject[] objects = new SignedObject[N]; + objects[0] = new SignedObject(str, privKeys[0], signature); + for (int j = 1; j < N; j++) { + objects[j] = new SignedObject(objects[j - 1], privKeys[j], + signature); + } + + // Verify the chain + int n = objects.length - 1; + SignedObject object = objects[n]; + do { + if (!object.verify(pubKeys[n], signature)) { + System.out.println("Failed: verification failed, n = " + n); + return false; + } + + if (object.verify(anotherPubKeys[n], signature)) { + System.out.println("Failed: verification should not " + + "succeed with wrong public key, n = " + n); + return false; + } + + object = (SignedObject) object.getObject(); + n--; + } while (n > 0); + + System.out.println("signed data: " + object.getObject()); + if (!str.equals(object.getObject())) { + System.out.println("Failed: signed data is not equal to " + + "original one"); + return false; + } + + System.out.println("Test passed"); + return true; + } catch (NoSuchProviderException nspe) { + if (test.provider == Provider.SunMSCAPI + && !System.getProperty("os.name").startsWith("Windows")) { + System.out.println("SunMSCAPI is available only on Windows: " + + nspe); + return true; + } + System.out.println("Unexpected exception: " + nspe); + return false; + } catch (Exception e) { + System.out.println("Unexpected exception: " + e); + e.printStackTrace(System.out); + return false; + } + } +} + diff --git a/jdk/test/java/security/SignedObject/Copy.java b/jdk/test/java/security/SignedObject/Copy.java new file mode 100644 index 00000000000..22406ea2a84 --- /dev/null +++ b/jdk/test/java/security/SignedObject/Copy.java @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.Serializable; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.Signature; +import java.security.SignedObject; + +/* + * @test + * @bug 8050374 + * @summary Checks if a signed object is a copy of an original object + */ +public class Copy { + + private static final String DSA = "DSA"; + private static final int KEY_SIZE = 512; + private static final int MAGIC = 123; + + public static void main(String args[]) throws Exception { + KeyPairGenerator kg = KeyPairGenerator.getInstance(DSA); + kg.initialize(KEY_SIZE); + KeyPair kp = kg.genKeyPair(); + + Signature signature = Signature.getInstance(DSA); + Test original = new Test(); + SignedObject so = new SignedObject(original, kp.getPrivate(), + signature); + System.out.println("Signature algorithm: " + so.getAlgorithm()); + + signature = Signature.getInstance(DSA, "SUN"); + if (!so.verify(kp.getPublic(), signature)) { + throw new RuntimeException("Verification failed"); + } + + kg = KeyPairGenerator.getInstance(DSA); + kg.initialize(KEY_SIZE); + kp = kg.genKeyPair(); + + if (so.verify(kp.getPublic(), signature)) { + throw new RuntimeException("Unexpected success"); + } + + Object copy = so.getObject(); + if (!original.equals(copy)) { + throw new RuntimeException("Signed object is not equal " + + "to original one: " + copy); + } + + /* + * The signed object is a copy of an original one. + * Once the copy is made, further manipulation + * of the original object shouldn't has any effect on the copy. + */ + original.set(MAGIC - 1); + copy = so.getObject(); + if (original.equals(copy)) { + throw new RuntimeException("Signed object is not a copy " + + "of original one: " + copy); + } + + System.out.println("Test passed"); + } + + private static class Test implements Serializable { + private int number = MAGIC; + + public int get() { + return number; + } + + public void set(int magic) { + this.number = magic; + } + + @Override + public int hashCode() { + return number; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + + if (!(obj instanceof Test)) { + return false; + } + + Test other = (Test) obj; + return number == other.number; + } + + @Override + public String toString() { + return "" + number; + } + } +} + + diff --git a/jdk/test/sun/security/ec/SignatureOffsets.java b/jdk/test/sun/security/ec/SignatureOffsets.java new file mode 100644 index 00000000000..948923e78ba --- /dev/null +++ b/jdk/test/sun/security/ec/SignatureOffsets.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.SignatureException; + +/* + * @test + * @bug 8050374 + * @key randomness + * @summary This test validates signature verification + * Signature.verify(byte[], int, int). The test uses RandomFactory to + * get random set of clear text data to sign. After the signature + * generation, the test tries to verify signature with the above API + * and passing in different signature offset (0, 33, 66, 99). + * @library /lib/testlibrary + * @compile ../../../java/security/Signature/Offsets.java + * @run main SignatureOffsets SunEC NONEwithECDSA + * @run main SignatureOffsets SunEC SHA1withECDSA + * @run main SignatureOffsets SunEC SHA256withECDSA + * @run main SignatureOffsets SunEC SHA224withECDSA + * @run main SignatureOffsets SunEC SHA384withECDSA + * @run main SignatureOffsets SunEC SHA512withECDSA + */ +public class SignatureOffsets { + + public static void main(String[] args) throws NoSuchAlgorithmException, + InvalidKeyException, SignatureException { + Offsets.main(args); + } +} \ No newline at end of file diff --git a/jdk/test/sun/security/ec/SignedObjectChain.java b/jdk/test/sun/security/ec/SignedObjectChain.java new file mode 100644 index 00000000000..6e93053a776 --- /dev/null +++ b/jdk/test/sun/security/ec/SignedObjectChain.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8050374 + * @compile ../../../java/security/SignedObject/Chain.java + * @summary Verify a chain of signed objects + */ +public class SignedObjectChain { + + private static class Test extends Chain.Test { + + public Test(Chain.SigAlg sigAlg) { + super(sigAlg, Chain.KeyAlg.EC, Chain.Provider.SunEC); + } + } + + private static final Test[] tests = { + new Test(Chain.SigAlg.SHA1withECDSA), + new Test(Chain.SigAlg.SHA256withECDSA), + new Test(Chain.SigAlg.SHA224withECDSA), + new Test(Chain.SigAlg.SHA384withECDSA), + new Test(Chain.SigAlg.SHA512withECDSA), + }; + + public static void main(String argv[]) { + boolean resutl = java.util.Arrays.stream(tests).allMatch( + (test) -> Chain.runTest(test)); + + if(resutl) { + System.out.println("All tests passed"); + } else { + throw new RuntimeException("Some tests failed"); + } + } +} diff --git a/jdk/test/sun/security/mscapi/SignatureOffsets.java b/jdk/test/sun/security/mscapi/SignatureOffsets.java new file mode 100644 index 00000000000..34f91fbf9be --- /dev/null +++ b/jdk/test/sun/security/mscapi/SignatureOffsets.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.SignatureException; + +/* + * @test + * @bug 8050374 + * @key randomness + * @summary This test validates signature verification + * Signature.verify(byte[], int, int). The test uses RandomFactory to + * get random set of clear text data to sign. After the signature + * generation, the test tries to verify signature with the above API + * and passing in different signature offset (0, 33, 66, 99). + * @library /lib/testlibrary + * @compile ../../../java/security/Signature/Offsets.java + * @run main SignatureOffsets SunMSCAPI NONEwithRSA + * @run main SignatureOffsets SunMSCAPI MD2withRSA + * @run main SignatureOffsets SunMSCAPI MD5withRSA + * @run main SignatureOffsets SunMSCAPI SHA1withRSA + * @run main SignatureOffsets SunMSCAPI SHA256withRSA + * @run main SignatureOffsets SunMSCAPI SHA384withRSA + * @run main SignatureOffsets SunMSCAPI SHA512withRSA + */ +public class SignatureOffsets { + + public static void main(String[] args) throws NoSuchAlgorithmException, + InvalidKeyException, SignatureException { + Offsets.main(args); + } +} \ No newline at end of file diff --git a/jdk/test/sun/security/mscapi/SignedObjectChain.java b/jdk/test/sun/security/mscapi/SignedObjectChain.java new file mode 100644 index 00000000000..9790daa919b --- /dev/null +++ b/jdk/test/sun/security/mscapi/SignedObjectChain.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8050374 + * @compile ../../../java/security/SignedObject/Chain.java + * @summary Verify a chain of signed objects + */ +public class SignedObjectChain { + + private static class Test extends Chain.Test { + + public Test(Chain.SigAlg sigAlg) { + super(sigAlg, Chain.KeyAlg.RSA, Chain.Provider.SunMSCAPI); + } + } + + private static final Test[] tests = { + new Test(Chain.SigAlg.MD2withRSA), + new Test(Chain.SigAlg.MD5withRSA), + new Test(Chain.SigAlg.SHA1withRSA), + new Test(Chain.SigAlg.SHA256withRSA), + new Test(Chain.SigAlg.SHA384withRSA), + new Test(Chain.SigAlg.SHA512withRSA), + }; + + public static void main(String argv[]) { + boolean resutl = java.util.Arrays.stream(tests).allMatch( + (test) -> Chain.runTest(test)); + + if(resutl) { + System.out.println("All tests passed"); + } else { + throw new RuntimeException("Some tests failed"); + } + } +} diff --git a/jdk/test/sun/security/rsa/SignatureOffsets.java b/jdk/test/sun/security/rsa/SignatureOffsets.java new file mode 100644 index 00000000000..b813b26d4a5 --- /dev/null +++ b/jdk/test/sun/security/rsa/SignatureOffsets.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.SignatureException; + +/* + * @test + * @bug 8050374 + * @key randomness + * @summary This test validates signature verification + * Signature.verify(byte[], int, int). The test uses RandomFactory to + * get random set of clear text data to sign. After the signature + * generation, the test tries to verify signature with the above API + * and passing in different signature offset (0, 33, 66, 99). + * @library /lib/testlibrary + * @compile ../../../java/security/Signature/Offsets.java + * @run main SignatureOffsets SunRsaSign MD2withRSA + * @run main SignatureOffsets SunRsaSign MD5withRSA + * @run main SignatureOffsets SunRsaSign SHA1withRSA + * @run main SignatureOffsets SunRsaSign SHA224withRSA + * @run main SignatureOffsets SunRsaSign SHA256withRSA + * @run main SignatureOffsets SunRsaSign SHA384withRSA + * @run main SignatureOffsets SunRsaSign SHA512withRSA + */ +public class SignatureOffsets { + + public static void main(String[] args) throws NoSuchAlgorithmException, + InvalidKeyException, SignatureException { + Offsets.main(args); + } +} \ No newline at end of file diff --git a/jdk/test/sun/security/rsa/SignedObjectChain.java b/jdk/test/sun/security/rsa/SignedObjectChain.java new file mode 100644 index 00000000000..7bda7cd4df6 --- /dev/null +++ b/jdk/test/sun/security/rsa/SignedObjectChain.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8050374 + * @compile ../../../java/security/SignedObject/Chain.java + * @summary Verify a chain of signed objects + */ +public class SignedObjectChain { + + private static class Test extends Chain.Test { + + public Test(Chain.SigAlg sigAlg) { + super(sigAlg, Chain.KeyAlg.RSA, Chain.Provider.SunRsaSign); + } + } + + private static final Test[] tests = { + new Test(Chain.SigAlg.MD2withRSA), + new Test(Chain.SigAlg.MD5withRSA), + new Test(Chain.SigAlg.SHA1withRSA), + new Test(Chain.SigAlg.SHA224withRSA), + new Test(Chain.SigAlg.SHA256withRSA), + new Test(Chain.SigAlg.SHA384withRSA), + new Test(Chain.SigAlg.SHA512withRSA), + }; + + public static void main(String argv[]) { + boolean resutl = java.util.Arrays.stream(tests).allMatch( + (test) -> Chain.runTest(test)); + + if(resutl) { + System.out.println("All tests passed"); + } else { + throw new RuntimeException("Some tests failed"); + } + } +} diff --git a/jdk/test/sun/security/ssl/rsa/SignatureOffsets.java b/jdk/test/sun/security/ssl/rsa/SignatureOffsets.java new file mode 100644 index 00000000000..618dde714d4 --- /dev/null +++ b/jdk/test/sun/security/ssl/rsa/SignatureOffsets.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.SignatureException; + +/* + * @test + * @bug 8050374 + * @key randomness + * @summary This test validates signature verification + * Signature.verify(byte[], int, int). The test uses RandomFactory to + * get random set of clear text data to sign. After the signature + * generation, the test tries to verify signature with the above API + * and passing in different signature offset (0, 33, 66, 99). + * @library /lib/testlibrary + * @compile ../../../../java/security/Signature/Offsets.java + * @run main SignatureOffsets SunJSSE MD2withRSA + * @run main SignatureOffsets SunJSSE MD5withRSA + * @run main SignatureOffsets SunJSSE SHA1withRSA + * @run main SignatureOffsets SunJSSE MD5andSHA1withRSA + */ +public class SignatureOffsets { + + public static void main(String[] args) throws NoSuchAlgorithmException, + InvalidKeyException, SignatureException { + Offsets.main(args); + } +} \ No newline at end of file diff --git a/jdk/test/sun/security/ssl/rsa/SignedObjectChain.java b/jdk/test/sun/security/ssl/rsa/SignedObjectChain.java new file mode 100644 index 00000000000..ba4b00c56d8 --- /dev/null +++ b/jdk/test/sun/security/ssl/rsa/SignedObjectChain.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8050374 + * @compile ../../../../java/security/SignedObject/Chain.java + * @summary Verify a chain of signed objects + */ +public class SignedObjectChain { + + private static class Test extends Chain.Test { + + public Test(Chain.SigAlg sigAlg) { + super(sigAlg, Chain.KeyAlg.RSA, Chain.Provider.SunJSSE); + } + } + + private static final Test[] tests = { + new Test(Chain.SigAlg.MD2withRSA), + new Test(Chain.SigAlg.MD5withRSA), + new Test(Chain.SigAlg.SHA1withRSA), + new Test(Chain.SigAlg.MD5andSHA1withRSA), + }; + + public static void main(String argv[]) { + boolean resutl = java.util.Arrays.stream(tests).allMatch( + (test) -> Chain.runTest(test)); + + if(resutl) { + System.out.println("All tests passed"); + } else { + throw new RuntimeException("Some tests failed"); + } + } +} From 27aac42dc557f13a83642e2dfd9281e4335ecb03 Mon Sep 17 00:00:00 2001 From: Katja Kantserova Date: Mon, 25 May 2015 14:08:21 +0200 Subject: [PATCH 41/82] 8080833: JDK-8076524 has failed to remove binary files Reviewed-by: sla --- jdk/test/sun/tools/jhat/hprof.bin | Bin 282310 -> 0 bytes jdk/test/sun/tools/jhat/jmap.bin | Bin 1732977 -> 0 bytes jdk/test/sun/tools/jhat/minimal.bin | Bin 66153 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 jdk/test/sun/tools/jhat/hprof.bin delete mode 100644 jdk/test/sun/tools/jhat/jmap.bin delete mode 100644 jdk/test/sun/tools/jhat/minimal.bin diff --git a/jdk/test/sun/tools/jhat/hprof.bin b/jdk/test/sun/tools/jhat/hprof.bin deleted file mode 100644 index a8f6f7d3f863c8794d8569221b1619c3e7e4e75c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282310 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%0D9t?nJ+nRA%xVwRe3l%JrL~ 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�N`K&*8W-51tGjBHo0--{b6acGLOoWCR3VZ{id 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%0D^z$ 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

    kfS_c>`MD9PwCPLtBETE%* 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

    ^u9QwW1*Jzkb?|PJM*tj=O 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%0AF+Aq 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�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%0AmefqgL-S)ehhzn(VTcuMx3c_$-hIn0Gy2&Rz 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%0DO|>>qf<84C0QT?KX{nryqb)d(tiDJc9vVl^ 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 diff --git a/jdk/test/sun/tools/jhat/minimal.bin b/jdk/test/sun/tools/jhat/minimal.bin deleted file mode 100644 index 1b6ce0ee478257dfd5adad21e4c8f8586a808ba5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66153 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 E1Hu>51poj5 From b04e91828a8b4523181318fb36c7e563b4a41286 Mon Sep 17 00:00:00 2001 From: Athijegannathan Sundararajan Date: Mon, 25 May 2015 19:09:44 +0530 Subject: [PATCH 42/82] 8068978: All versions of javax.script.ScriptEngine.eval(...) method may clarify ScriptException throwing Reviewed-by: attila, jlaskey --- .../classes/javax/script/ScriptEngine.java | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/jdk/src/java.scripting/share/classes/javax/script/ScriptEngine.java b/jdk/src/java.scripting/share/classes/javax/script/ScriptEngine.java index 5d04247df99..c090b308d4c 100644 --- a/jdk/src/java.scripting/share/classes/javax/script/ScriptEngine.java +++ b/jdk/src/java.scripting/share/classes/javax/script/ScriptEngine.java @@ -132,7 +132,9 @@ public interface ScriptEngine { * * @return The value returned from the execution of the script. * - * @throws ScriptException if an error occurs in script. + * @throws ScriptException if an error occurs in script. ScriptEngines should create and throw + * ScriptException wrappers for checked Exceptions thrown by underlying scripting + * implementations. * @throws NullPointerException if either argument is null. */ public Object eval(Reader reader , ScriptContext context) throws ScriptException; @@ -145,7 +147,9 @@ public interface ScriptEngine { * * @return The value returned from the execution of the script. * - * @throws ScriptException if error occurs in script. + * @throws ScriptException if an error occurs in script. ScriptEngines should create and throw + * ScriptException wrappers for checked Exceptions thrown by underlying scripting + * implementations. * @throws NullPointerException if the argument is null. */ public Object eval(String script) throws ScriptException; @@ -158,7 +162,9 @@ public interface ScriptEngine { * * @return The value returned by the script. * - * @throws ScriptException if an error occurs in script. + * @throws ScriptException if an error occurs in script. ScriptEngines should create and throw + * ScriptException wrappers for checked Exceptions thrown by underlying scripting + * implementations. * @throws NullPointerException if the argument is null. */ public Object eval(Reader reader) throws ScriptException; @@ -177,7 +183,9 @@ public interface ScriptEngine { * * @return The value returned by the script. * - * @throws ScriptException if an error occurs in script. + * @throws ScriptException if an error occurs in script. ScriptEngines should create and throw + * ScriptException wrappers for checked Exceptions thrown by underlying scripting + * implementations. * @throws NullPointerException if either argument is null. */ public Object eval(String script, Bindings n) throws ScriptException; @@ -191,7 +199,9 @@ public interface ScriptEngine { * * @return The value returned by the script. * - * @throws ScriptException if an error occurs. + * @throws ScriptException if an error occurs in script. ScriptEngines should create and throw + * ScriptException wrappers for checked Exceptions thrown by underlying scripting + * implementations. * @throws NullPointerException if either argument is null. */ public Object eval(Reader reader , Bindings n) throws ScriptException; From abaeabd0cdcfb13a0e6bb4548750e216e5b81c03 Mon Sep 17 00:00:00 2001 From: Xueming Shen Date: Mon, 25 May 2015 13:52:28 -0700 Subject: [PATCH 43/82] 8042125: Japanese character converters incompatible between Java 7 and Java 8 To add the missing .nr and c2b mapping tables Reviewed-by: okutsu --- .../data/charsetmapping/JIS_X_0208_MS932.c2b | 7 ++++ .../data/charsetmapping/JIS_X_0208_MS932.map | 24 +++++------ .../charsetmapping/JIS_X_0212_Solaris.map | 4 +- jdk/test/sun/nio/cs/TestISO2022JP.java | 40 ++++++++++++++++++- jdk/test/sun/nio/cs/TestJIS0212Decoder.java | 21 +++++----- 5 files changed, 71 insertions(+), 25 deletions(-) create mode 100644 jdk/make/data/charsetmapping/JIS_X_0208_MS932.c2b diff --git a/jdk/make/data/charsetmapping/JIS_X_0208_MS932.c2b b/jdk/make/data/charsetmapping/JIS_X_0208_MS932.c2b new file mode 100644 index 00000000000..45a2a5cba95 --- /dev/null +++ b/jdk/make/data/charsetmapping/JIS_X_0208_MS932.c2b @@ -0,0 +1,7 @@ +0x2124 0x00b8 +0x2126 0x00b7 +0x2131 0x00af +0x2263 0x00ab +0x2264 0x00bb +0x2574 0x3094 +0x264c 0x00b5 diff --git a/jdk/make/data/charsetmapping/JIS_X_0208_MS932.map b/jdk/make/data/charsetmapping/JIS_X_0208_MS932.map index ee74c0b2753..9160866f6c8 100644 --- a/jdk/make/data/charsetmapping/JIS_X_0208_MS932.map +++ b/jdk/make/data/charsetmapping/JIS_X_0208_MS932.map @@ -1,7 +1,7 @@ # # mapping is based on JIS_X_0208_MS932_De/Encoder # -# moved following entries to .nr +# copied following entries to .nr # # 0x224c 0xffe2 # 0x225d 0x22a5 @@ -14,7 +14,7 @@ # 0x2d7b 0x2229 # 0x2d7c 0x222a # -# and following to c2b +# and moved following to c2b # # 0x2124 0x00b8 # 0x2126 0x00b7 @@ -144,13 +144,13 @@ 0x2241 0x2229 0x224a 0x2227 0x224b 0x2228 -#0x224c 0xffe2 +0x224c 0xffe2 0x224d 0x21d2 0x224e 0x21d4 0x224f 0x2200 0x2250 0x2203 0x225c 0x2220 -#0x225d 0x22a5 +0x225d 0x22a5 0x225e 0x2312 0x225f 0x2202 0x2260 0x2207 @@ -158,11 +158,11 @@ 0x2262 0x2252 0x2263 0x226a 0x2264 0x226b -#0x2265 0x221a +0x2265 0x221a 0x2266 0x223d 0x2267 0x221d 0x2268 0x2235 -#0x2269 0x222b +0x2269 0x222b 0x226a 0x222c 0x2272 0x212b 0x2273 0x2030 @@ -620,19 +620,19 @@ 0x2d6d 0x337e 0x2d6e 0x337d 0x2d6f 0x337c -#0x2d70 0x2252 -#0x2d71 0x2261 +0x2d70 0x2252 +0x2d71 0x2261 0x2d72 0x222b 0x2d73 0x222e 0x2d74 0x2211 0x2d75 0x221a 0x2d76 0x22a5 -#0x2d77 0x2220 +0x2d77 0x2220 0x2d78 0x221f 0x2d79 0x22bf -#0x2d7a 0x2235 -#0x2d7b 0x2229 -#0x2d7c 0x222a +0x2d7a 0x2235 +0x2d7b 0x2229 +0x2d7c 0x222a 0x3021 0x4e9c 0x3022 0x5516 0x3023 0x5a03 diff --git a/jdk/make/data/charsetmapping/JIS_X_0212_Solaris.map b/jdk/make/data/charsetmapping/JIS_X_0212_Solaris.map index 27d450dcf53..c73d471ccc6 100644 --- a/jdk/make/data/charsetmapping/JIS_X_0212_Solaris.map +++ b/jdk/make/data/charsetmapping/JIS_X_0212_Solaris.map @@ -23,7 +23,7 @@ # as the round-trip entries. # # b2c and c2b all have entry "0x2271 <-> 0x2116", so the -# "0x742c -> 0x2116" entry is moved to the .nr table. +# "0x742c -> 0x2116" entry is copied to the .nr table. # # mapping (c2b) generated from JIS_X_0212_Solaris_Encoder has # two "dup" entries @@ -6126,7 +6126,7 @@ 0x7429 0xff07 0x742a 0xff02 0x742b 0x3231 -#0x742c 0x2116 +0x742c 0x2116 0x742d 0x2121 0x742e 0x70bb 0x742f 0x4efc diff --git a/jdk/test/sun/nio/cs/TestISO2022JP.java b/jdk/test/sun/nio/cs/TestISO2022JP.java index 8ea4cb7faf7..fa533ef7a82 100644 --- a/jdk/test/sun/nio/cs/TestISO2022JP.java +++ b/jdk/test/sun/nio/cs/TestISO2022JP.java @@ -22,7 +22,7 @@ */ /* @test - @bug 4626545 4879522 4913711 4119445 + @bug 4626545 4879522 4913711 4119445 8042125 @summary Check full coverage encode/decode for ISO-2022-JP */ @@ -33,6 +33,8 @@ */ import java.io.*; +import java.util.Arrays; + public class TestISO2022JP { private final static String US_ASCII = @@ -608,5 +610,41 @@ public class TestISO2022JP { if (encoded[i] != expected[i]) throw new Exception("ISO-2022-JP Decoder error"); } + + // Test for 7 c2b codepoints in ms932 iso2022jp + String testStr4 = "\u00b8\u00b7\u00af\u00ab\u00bb\u3094\u00b5"; + expected = new byte[] { + (byte)0x1b, (byte)0x24, (byte)0x42, + (byte)0x21, (byte)0x24, + (byte)0x21, (byte)0x26, + (byte)0x21, (byte)0x31, + (byte)0x22, (byte)0x63, + (byte)0x22, (byte)0x64, + (byte)0x25, (byte)0x74, + (byte)0x26, (byte)0x4c, + (byte)0x1b, (byte)0x28, (byte)0x42 }; + encoded = testStr4.getBytes("x-windows-iso2022jp"); + if (!Arrays.equals(encoded, expected)) { + throw new Exception("MSISO2022JP Encoder error"); + } + // Test for 10 non-roundtrip characters in ms932 iso2022jp + encoded = new byte[] { + (byte)0x1B, (byte)0x24, (byte)0x42, + (byte)0x22, (byte)0x4C, + (byte)0x22, (byte)0x5D, + (byte)0x22, (byte)0x65, + (byte)0x22, (byte)0x69, + (byte)0x2D, (byte)0x70, + (byte)0x2D, (byte)0x71, + (byte)0x2D, (byte)0x77, + (byte)0x2D, (byte)0x7A, + (byte)0x2D, (byte)0x7B, + (byte)0x2D, (byte)0x7C, + (byte)0x1B, (byte)0x28, (byte)0x42, + }; + String expectedStr = "\uffe2\u22a5\u221a\u222b\u2252\u2261\u2220\u2235\u2229\u222a"; + if (!new String(encoded, "x-windows-iso2022jp").equals(expectedStr)) { + throw new Exception("MSISO2022JP Decoder error"); + } } } diff --git a/jdk/test/sun/nio/cs/TestJIS0212Decoder.java b/jdk/test/sun/nio/cs/TestJIS0212Decoder.java index 6bdc46ec45e..912f3c90f50 100644 --- a/jdk/test/sun/nio/cs/TestJIS0212Decoder.java +++ b/jdk/test/sun/nio/cs/TestJIS0212Decoder.java @@ -23,7 +23,7 @@ /* * @test - @bug 4179800 + @bug 4179800 8042125 @summary Make sure JIS0212.Decoder really works */ @@ -38,25 +38,26 @@ public class TestJIS0212Decoder { (byte)0x30, (byte)0x25, (byte)0x30, (byte)0x26, (byte)0x30, (byte)0x27}; - public static void main(String args[]) - throws Exception - { + public static void main(String args[]) throws Exception { test(); } - private static void test() - throws Exception - { + private static void test() throws Exception { CharsetDecoder dec = Charset.forName("JIS0212").newDecoder(); try { String ret = dec.decode(ByteBuffer.wrap(inputBytes)).toString(); if (ret.length() != outputString.length() || ! outputString.equals(ret)){ - throw new Exception("ByteToCharJIS0212 does not work correctly"); + throw new Exception("JIS0212 decoder does not work correctly"); } + } catch (Exception e){ + throw new Exception("JIS0212 encoder does not work correctly"); } - catch (Exception e){ - throw new Exception("ByteToCharJIS0212 does not work correctly"); + + // test 0x742c -> u2116 mapping + if (!"\u2116".equals(new String(new byte[] { (byte)0x8f, (byte)0xf4, (byte)0xac }, + "x-eucJP-Open"))) { + throw new RuntimeException("JIS0212_Solaris nr mapping failed"); } } } From 5b954fdc5ec5411226e9122d4caff708827ffac6 Mon Sep 17 00:00:00 2001 From: Athijegannathan Sundararajan Date: Tue, 26 May 2015 13:49:45 +0530 Subject: [PATCH 44/82] 8036743: need ArrayBuffer constructor with specified data Reviewed-by: attila, hannesw, lagergren --- .../internal/objects/NativeArrayBuffer.java | 7 ++- nashorn/test/script/basic/JDK-8036743.js | 57 +++++++++++++++++++ .../test/script/basic/JDK-8036743.js.EXPECTED | 49 ++++++++++++++++ 3 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 nashorn/test/script/basic/JDK-8036743.js create mode 100644 nashorn/test/script/basic/JDK-8036743.js.EXPECTED diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeArrayBuffer.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeArrayBuffer.java index 2464b844dcf..4a27c1f8dd2 100644 --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeArrayBuffer.java +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeArrayBuffer.java @@ -106,7 +106,12 @@ public final class NativeArrayBuffer extends ScriptObject { return new NativeArrayBuffer(0); } - return new NativeArrayBuffer(JSType.toInt32(args[0])); + final Object arg0 = args[0]; + if (arg0 instanceof ByteBuffer) { + return new NativeArrayBuffer((ByteBuffer)arg0); + } else { + return new NativeArrayBuffer(JSType.toInt32(arg0)); + } } private static ByteBuffer cloneBuffer(final ByteBuffer original, final int begin, final int end) { diff --git a/nashorn/test/script/basic/JDK-8036743.js b/nashorn/test/script/basic/JDK-8036743.js new file mode 100644 index 00000000000..bc39837fc1e --- /dev/null +++ b/nashorn/test/script/basic/JDK-8036743.js @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * JDK-8036743: need ArrayBuffer constructor with specified data + * + * @test + * @run + */ + +var ByteArray = Java.type("byte[]"); +var ByteBuffer = Java.type("java.nio.ByteBuffer"); + +var ba = new ByteArray(4); +// use constructor that accepts ByteBuffer as first arg. +var abuf = new ArrayBuffer(ByteBuffer.wrap(ba)); +print("abuf.byteLength = " + abuf.byteLength); +var view = new DataView(abuf); + +function setAndPrint(value, endian) { + view.setInt32(0, value, endian); + print("Little endian? " + endian); + print("view[0] = " + view.getInt32(0, endian)); + print("ba[0] = " + ba[0]); + print("ba[1] = " + ba[1]); + print("ba[2] = " + ba[2]); + print("ba[3] = " + ba[3]); +} + +setAndPrint(42, true); +setAndPrint(42, false); +setAndPrint(java.lang.Byte.MAX_VALUE, true); +setAndPrint(java.lang.Byte.MAX_VALUE, false); +setAndPrint(java.lang.Short.MAX_VALUE, true); +setAndPrint(java.lang.Short.MAX_VALUE, false); +setAndPrint(java.lang.Integer.MAX_VALUE, true); +setAndPrint(java.lang.Integer.MAX_VALUE, false); diff --git a/nashorn/test/script/basic/JDK-8036743.js.EXPECTED b/nashorn/test/script/basic/JDK-8036743.js.EXPECTED new file mode 100644 index 00000000000..53d4c0f1c9e --- /dev/null +++ b/nashorn/test/script/basic/JDK-8036743.js.EXPECTED @@ -0,0 +1,49 @@ +abuf.byteLength = 4 +Little endian? true +view[0] = 42 +ba[0] = 42 +ba[1] = 0 +ba[2] = 0 +ba[3] = 0 +Little endian? false +view[0] = 42 +ba[0] = 0 +ba[1] = 0 +ba[2] = 0 +ba[3] = 42 +Little endian? true +view[0] = 127 +ba[0] = 127 +ba[1] = 0 +ba[2] = 0 +ba[3] = 0 +Little endian? false +view[0] = 127 +ba[0] = 0 +ba[1] = 0 +ba[2] = 0 +ba[3] = 127 +Little endian? true +view[0] = 32767 +ba[0] = -1 +ba[1] = 127 +ba[2] = 0 +ba[3] = 0 +Little endian? false +view[0] = 32767 +ba[0] = 0 +ba[1] = 0 +ba[2] = 127 +ba[3] = -1 +Little endian? true +view[0] = 2147483647 +ba[0] = -1 +ba[1] = -1 +ba[2] = -1 +ba[3] = 127 +Little endian? false +view[0] = 2147483647 +ba[0] = 127 +ba[1] = -1 +ba[2] = -1 +ba[3] = -1 From 7b3c4b4d32bec16907056f9b88cfb934fdc412ef Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Tue, 26 May 2015 10:43:53 +0200 Subject: [PATCH 45/82] 8080983: libdt_socket: Build failed with VS2013 SP4 Reviewed-by: sla, ihse, tbell --- jdk/make/lib/Lib-jdk.hprof.agent.gmk | 1 - 1 file changed, 1 deletion(-) diff --git a/jdk/make/lib/Lib-jdk.hprof.agent.gmk b/jdk/make/lib/Lib-jdk.hprof.agent.gmk index 7f01e04790c..7c43331b33c 100644 --- a/jdk/make/lib/Lib-jdk.hprof.agent.gmk +++ b/jdk/make/lib/Lib-jdk.hprof.agent.gmk @@ -49,7 +49,6 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBHPROF, \ CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_WARNINGS_ARE_ERRORS) \ $(BUILD_LIBHPROF_CFLAGS), \ CFLAGS_debug := -DHPROF_LOGGING, \ - CFLAGS_windows := -D_WINSOCK_DEPRECATED_NO_WARNINGS, \ MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libhprof/mapfile-vers, \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ From f9b1376aa3fafc0be05db3d4783b5aa8eecbf907 Mon Sep 17 00:00:00 2001 From: Attila Szegedi Date: Tue, 26 May 2015 14:37:14 +0200 Subject: [PATCH 46/82] 8081015: Allow conversion of native arrays to Queue and Collection Reviewed-by: hannesw, lagergren, sundar --- .../nashorn/internal/objects/NativeJava.java | 14 ++-- .../jdk/nashorn/internal/runtime/JSType.java | 25 ------- .../runtime/linker/NashornLinker.java | 45 ++++++++--- .../runtime/test/JDK_8081015_Test.java | 74 +++++++++++++++++++ .../test/models/JDK_8081015_TestModel.java | 73 ++++++++++++++++++ 5 files changed, 190 insertions(+), 41 deletions(-) create mode 100644 nashorn/test/src/jdk/nashorn/internal/runtime/test/JDK_8081015_Test.java create mode 100644 nashorn/test/src/jdk/nashorn/test/models/JDK_8081015_TestModel.java diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeJava.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeJava.java index e9a4380dadc..3eb26695911 100644 --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeJava.java +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeJava.java @@ -27,11 +27,13 @@ package jdk.nashorn.internal.objects; import static jdk.nashorn.internal.runtime.ECMAErrors.typeError; import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED; + import java.lang.invoke.MethodHandles; import java.lang.reflect.Array; import java.util.Collection; import java.util.Deque; import java.util.List; +import java.util.Queue; import jdk.internal.dynalink.beans.StaticClass; import jdk.internal.dynalink.support.TypeUtilities; import jdk.nashorn.api.scripting.JSObject; @@ -337,7 +339,8 @@ public final class NativeJava { /** * Given a script object and a Java type, converts the script object into the desired Java type. Currently it - * performs shallow creation of Java arrays, as well as wrapping of objects in Lists and Dequeues. Example: + * performs shallow creation of Java arrays, as well as wrapping of objects in Lists, Dequeues, Queues, + * and Collections. Example: *

          * var anArray = [1, "13", false]
          * var javaIntArray = Java.to(anArray, "int[]")
    @@ -351,9 +354,10 @@ public final class NativeJava {
          * object to create. Can not be null. If undefined, a "default" conversion is presumed (allowing the argument to be
          * omitted).
          * @return a Java object whose value corresponds to the original script object's value. Specifically, for array
    -     * target types, returns a Java array of the same type with contents converted to the array's component type. Does
    -     * not recursively convert for multidimensional arrays. For {@link List} or {@link Deque}, returns a live wrapper
    -     * around the object, see {@link ListAdapter} for details. Returns null if obj is null.
    +     * target types, returns a Java array of the same type with contents converted to the array's component type.
    +     * Converts recursively when the target type is multidimensional array. For {@link List}, {@link Deque},
    +     * {@link Queue}, or {@link Collection}, returns a live wrapper around the object, see {@link ListAdapter} for
    +     * details. Returns null if obj is null.
          * @throws ClassNotFoundException if the class described by objType is not found
          */
         @Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR)
    @@ -383,7 +387,7 @@ public final class NativeJava {
                 return JSType.toJavaArray(obj, targetClass.getComponentType());
             }
     
    -        if(targetClass == List.class || targetClass == Deque.class) {
    +        if (targetClass == List.class || targetClass == Deque.class || targetClass == Queue.class || targetClass == Collection.class) {
                 return ListAdapter.create(obj);
             }
     
    diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/JSType.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/JSType.java
    index 31be7d28b91..76ba8acbd32 100644
    --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/JSType.java
    +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/JSType.java
    @@ -34,7 +34,6 @@ import java.lang.invoke.MethodHandles;
     import java.lang.reflect.Array;
     import java.util.Arrays;
     import java.util.Collections;
    -import java.util.Deque;
     import java.util.List;
     import jdk.internal.dynalink.beans.StaticClass;
     import jdk.nashorn.api.scripting.JSObject;
    @@ -201,12 +200,6 @@ public enum JSType {
         /** Method handle to convert a JS Object to a Java array. */
         public static final Call TO_JAVA_ARRAY = staticCall(JSTYPE_LOOKUP, JSType.class, "toJavaArray", Object.class, Object.class, Class.class);
     
    -    /** Method handle to convert a JS Object to a Java List. */
    -    public static final Call TO_JAVA_LIST = staticCall(JSTYPE_LOOKUP, JSType.class, "toJavaList", List.class, Object.class);
    -
    -    /** Method handle to convert a JS Object to a Java deque. */
    -    public static final Call TO_JAVA_DEQUE = staticCall(JSTYPE_LOOKUP, JSType.class, "toJavaDeque", Deque.class, Object.class);
    -
         /** Method handle for void returns. */
         public static final Call VOID_RETURN = staticCall(JSTYPE_LOOKUP, JSType.class, "voidReturn", void.class);
     
    @@ -1350,24 +1343,6 @@ public enum JSType {
             return dst;
         }
     
    -    /**
    -     * Converts a JavaScript object to a Java List. See {@link ListAdapter} for details.
    -     * @param obj the object to convert. Can be any array-like object.
    -     * @return a List that is live-backed by the JavaScript object.
    -     */
    -    public static List toJavaList(final Object obj) {
    -        return ListAdapter.create(obj);
    -    }
    -
    -    /**
    -     * Converts a JavaScript object to a Java Deque. See {@link ListAdapter} for details.
    -     * @param obj the object to convert. Can be any array-like object.
    -     * @return a Deque that is live-backed by the JavaScript object.
    -     */
    -    public static Deque toJavaDeque(final Object obj) {
    -        return ListAdapter.create(obj);
    -    }
    -
         /**
          * Check if an object is null or undefined
          *
    diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/NashornLinker.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/NashornLinker.java
    index 3555e5d91c0..ddcbae1fedb 100644
    --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/NashornLinker.java
    +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/NashornLinker.java
    @@ -29,13 +29,15 @@ import static jdk.nashorn.internal.lookup.Lookup.MH;
     
     import java.lang.invoke.MethodHandle;
     import java.lang.invoke.MethodHandles;
    -import java.lang.invoke.MethodHandles.Lookup;
    +import java.lang.invoke.MethodType;
     import java.lang.reflect.Modifier;
     import java.security.AccessController;
     import java.security.PrivilegedAction;
    +import java.util.Collection;
     import java.util.Deque;
     import java.util.List;
     import java.util.Map;
    +import java.util.Queue;
     import javax.script.Bindings;
     import jdk.internal.dynalink.CallSiteDescriptor;
     import jdk.internal.dynalink.linker.ConversionComparator;
    @@ -47,11 +49,13 @@ import jdk.internal.dynalink.linker.LinkerServices;
     import jdk.internal.dynalink.linker.TypeBasedGuardingDynamicLinker;
     import jdk.internal.dynalink.support.Guards;
     import jdk.internal.dynalink.support.LinkerServicesImpl;
    +import jdk.internal.dynalink.support.Lookup;
     import jdk.nashorn.api.scripting.JSObject;
     import jdk.nashorn.api.scripting.ScriptObjectMirror;
     import jdk.nashorn.api.scripting.ScriptUtils;
     import jdk.nashorn.internal.objects.NativeArray;
     import jdk.nashorn.internal.runtime.JSType;
    +import jdk.nashorn.internal.runtime.ListAdapter;
     import jdk.nashorn.internal.runtime.ScriptFunction;
     import jdk.nashorn.internal.runtime.ScriptObject;
     import jdk.nashorn.internal.runtime.Undefined;
    @@ -167,7 +171,7 @@ final class NashornLinker implements TypeBasedGuardingDynamicLinker, GuardingTyp
             return null;
         }
     
    -    private static Lookup getCurrentLookup() {
    +    private static java.lang.invoke.MethodHandles.Lookup getCurrentLookup() {
             final LinkRequest currentRequest = AccessController.doPrivileged(new PrivilegedAction() {
                 @Override
                 public LinkRequest run() {
    @@ -179,12 +183,12 @@ final class NashornLinker implements TypeBasedGuardingDynamicLinker, GuardingTyp
     
         /**
          * Returns a guarded invocation that converts from a source type that is NativeArray to a Java array or List or
    -     * Deque type.
    +     * Queue or Deque or Collection type.
          * @param sourceType the source type (presumably NativeArray a superclass of it)
    -     * @param targetType the target type (presumably an array type, or List or Deque)
    +     * @param targetType the target type (presumably an array type, or List or Queue, or Deque, or Collection)
          * @return a guarded invocation that converts from the source type to the target type. null is returned if
          * either the source type is neither NativeArray, nor a superclass of it, or if the target type is not an array
    -     * type, List, or Deque.
    +     * type, List, Queue, Deque, or Collection.
          */
         private static GuardedInvocation getArrayConverter(final Class sourceType, final Class targetType) {
             final boolean isSourceTypeNativeArray = sourceType == NativeArray.class;
    @@ -195,12 +199,14 @@ final class NashornLinker implements TypeBasedGuardingDynamicLinker, GuardingTyp
                 final MethodHandle guard = isSourceTypeGeneric ? IS_NATIVE_ARRAY : null;
                 if(targetType.isArray()) {
                     return new GuardedInvocation(ARRAY_CONVERTERS.get(targetType), guard);
    -            }
    -            if(targetType == List.class) {
    -                return new GuardedInvocation(JSType.TO_JAVA_LIST.methodHandle(), guard);
    -            }
    -            if(targetType == Deque.class) {
    -                return new GuardedInvocation(JSType.TO_JAVA_DEQUE.methodHandle(), guard);
    +            } else if(targetType == List.class) {
    +                return new GuardedInvocation(TO_LIST, guard);
    +            } else if(targetType == Deque.class) {
    +                return new GuardedInvocation(TO_DEQUE, guard);
    +            } else if(targetType == Queue.class) {
    +                return new GuardedInvocation(TO_QUEUE, guard);
    +            } else if(targetType == Collection.class) {
    +                return new GuardedInvocation(TO_COLLECTION, guard);
                 }
             }
             return null;
    @@ -286,6 +292,23 @@ final class NashornLinker implements TypeBasedGuardingDynamicLinker, GuardingTyp
         private static final MethodHandle IS_NASHORN_OR_UNDEFINED_TYPE = findOwnMH("isNashornTypeOrUndefined", Boolean.TYPE, Object.class);
         private static final MethodHandle CREATE_MIRROR = findOwnMH("createMirror", Object.class, Object.class);
     
    +    private static final MethodHandle TO_COLLECTION;
    +    private static final MethodHandle TO_DEQUE;
    +    private static final MethodHandle TO_LIST;
    +    private static final MethodHandle TO_QUEUE;
    +    static {
    +        final MethodHandle listAdapterCreate = new Lookup(MethodHandles.lookup()).findStatic(
    +                ListAdapter.class, "create", MethodType.methodType(ListAdapter.class, Object.class));
    +        TO_COLLECTION = asReturning(listAdapterCreate, Collection.class);
    +        TO_DEQUE = asReturning(listAdapterCreate, Deque.class);
    +        TO_LIST = asReturning(listAdapterCreate, List.class);
    +        TO_QUEUE = asReturning(listAdapterCreate, Queue.class);
    +    }
    +
    +    private static MethodHandle asReturning(final MethodHandle mh, final Class nrtype) {
    +        return mh.asType(mh.type().changeReturnType(nrtype));
    +    }
    +
         @SuppressWarnings("unused")
         private static boolean isNashornTypeOrUndefined(final Object obj) {
             return obj instanceof ScriptObject || obj instanceof Undefined;
    diff --git a/nashorn/test/src/jdk/nashorn/internal/runtime/test/JDK_8081015_Test.java b/nashorn/test/src/jdk/nashorn/internal/runtime/test/JDK_8081015_Test.java
    new file mode 100644
    index 00000000000..f3ddd5e4b1e
    --- /dev/null
    +++ b/nashorn/test/src/jdk/nashorn/internal/runtime/test/JDK_8081015_Test.java
    @@ -0,0 +1,74 @@
    +/*
    + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
    + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    + *
    + * This code is free software; you can redistribute it and/or modify it
    + * under the terms of the GNU General Public License version 2 only, as
    + * published by the Free Software Foundation.  Oracle designates this
    + * particular file as subject to the "Classpath" exception as provided
    + * by Oracle in the LICENSE file that accompanied this code.
    + *
    + * This code is distributed in the hope that it will be useful, but WITHOUT
    + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    + * version 2 for more details (a copy is included in the LICENSE file that
    + * accompanied this code).
    + *
    + * You should have received a copy of the GNU General Public License version
    + * 2 along with this work; if not, write to the Free Software Foundation,
    + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    + *
    + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    + * or visit www.oracle.com if you need additional information or have any
    + * questions.
    + */
    +
    +package jdk.nashorn.internal.runtime.test;
    +
    +import static org.testng.Assert.assertEquals;
    +import static org.testng.Assert.assertNull;
    +
    +import jdk.nashorn.test.models.JDK_8081015_TestModel;
    +
    +import java.util.Collection;
    +import java.util.Queue;
    +import javax.script.ScriptEngine;
    +import javax.script.ScriptException;
    +import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
    +import org.testng.annotations.Test;
    +
    +/**
    + * @bug 8081015
    + * @summary Test that native arrays get converted to {@link Queue} and {@link Collection}.
    + */
    +public class JDK_8081015_Test {
    +    @Test
    +    public void testConvertToCollection() throws ScriptException {
    +        test("receiveCollection");
    +    }
    +
    +    @Test
    +    public void testConvertToDeque() throws ScriptException {
    +        test("receiveDeque");
    +    }
    +
    +    @Test
    +    public void testConvertToList() throws ScriptException {
    +        test("receiveList");
    +    }
    +
    +    @Test
    +    public void testConvertToQueue() throws ScriptException {
    +        test("receiveQueue");
    +    }
    +
    +    private void test(final String methodName) throws ScriptException {
    +        final ScriptEngine engine = new NashornScriptEngineFactory().getScriptEngine();
    +        final JDK_8081015_TestModel model = new JDK_8081015_TestModel();
    +        engine.put("test", model);
    +
    +        assertNull(model.getLastInvoked());
    +        engine.eval("test." + methodName + "([1, 2, 3.3, 'foo'])");
    +        assertEquals(model.getLastInvoked(), methodName );
    +    }
    +}
    diff --git a/nashorn/test/src/jdk/nashorn/test/models/JDK_8081015_TestModel.java b/nashorn/test/src/jdk/nashorn/test/models/JDK_8081015_TestModel.java
    new file mode 100644
    index 00000000000..069bc1b2a50
    --- /dev/null
    +++ b/nashorn/test/src/jdk/nashorn/test/models/JDK_8081015_TestModel.java
    @@ -0,0 +1,73 @@
    +/*
    + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
    + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    + *
    + * This code is free software; you can redistribute it and/or modify it
    + * under the terms of the GNU General Public License version 2 only, as
    + * published by the Free Software Foundation.  Oracle designates this
    + * particular file as subject to the "Classpath" exception as provided
    + * by Oracle in the LICENSE file that accompanied this code.
    + *
    + * This code is distributed in the hope that it will be useful, but WITHOUT
    + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    + * version 2 for more details (a copy is included in the LICENSE file that
    + * accompanied this code).
    + *
    + * You should have received a copy of the GNU General Public License version
    + * 2 along with this work; if not, write to the Free Software Foundation,
    + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    + *
    + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    + * or visit www.oracle.com if you need additional information or have any
    + * questions.
    + */
    +
    +package jdk.nashorn.test.models;
    +
    +import static org.testng.Assert.assertEquals;
    +import static org.testng.Assert.assertFalse;
    +
    +import java.util.Collection;
    +import java.util.Deque;
    +import java.util.Iterator;
    +import java.util.List;
    +import java.util.Queue;
    +
    +@SuppressWarnings("javadoc")
    +public class JDK_8081015_TestModel {
    +    private String lastInvoked;
    +
    +    public void receiveCollection(final Collection c) {
    +        lastInvoked = "receiveCollection";
    +        walkCollection(c);
    +    }
    +
    +    public void receiveDeque(final Deque d) {
    +        lastInvoked = "receiveDeque";
    +        walkCollection(d);
    +    }
    +
    +    public void receiveList(final List l) {
    +        lastInvoked = "receiveList";
    +        walkCollection(l);
    +    }
    +
    +    public void receiveQueue(final Queue q) {
    +        lastInvoked = "receiveQueue";
    +        walkCollection(q);
    +    }
    +
    +    public String getLastInvoked() {
    +        return lastInvoked;
    +    }
    +
    +    private static void walkCollection(final Collection c) {
    +        final Iterator it = c.iterator();
    +        assertEquals(it.next(), Integer.valueOf(1));
    +        assertEquals(it.next(), Integer.valueOf(2));
    +        assertEquals(it.next(), Double.valueOf(3.3));
    +        assertEquals(it.next(), "foo");
    +        assertFalse(it.hasNext());
    +    }
    +}
    
    From 4f8755f9b8aaf41e6d875d2918d49ad678163e10 Mon Sep 17 00:00:00 2001
    From: Weijun Wang 
    Date: Tue, 26 May 2015 22:10:37 +0800
    Subject: [PATCH 47/82] 8080911:
     sun/security/krb5/auto/UseCacheAndStoreKey.java timed out intermittently
    
    Reviewed-by: xuelei
    ---
     .../share/classes/sun/security/krb5/Config.java             | 6 ++++--
     1 file changed, 4 insertions(+), 2 deletions(-)
    
    diff --git a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/Config.java b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/Config.java
    index f2f74ab5c67..395738095a7 100644
    --- a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/Config.java
    +++ b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/Config.java
    @@ -110,8 +110,10 @@ public class Config {
          * java.security.krb5.kdc not specified, error reading configuration file.
          */
     
    -    public static synchronized void refresh() throws KrbException {
    -        singleton = new Config();
    +    public static void refresh() throws KrbException {
    +        synchronized (Config.class) {
    +            singleton = new Config();
    +        }
             KdcComm.initStatic();
             EType.initStatic();
             Checksum.initStatic();
    
    From 1333ff7ddd4b4cf6946f09eda730277e7605da22 Mon Sep 17 00:00:00 2001
    From: Attila Szegedi 
    Date: Tue, 26 May 2015 16:12:23 +0200
    Subject: [PATCH 48/82] 8081062: ListAdapter should take advantage of JSObject
    
    Reviewed-by: lagergren, sundar
    ---
     .../internal/runtime/JSObjectListAdapter.java |  56 ------
     .../nashorn/internal/runtime/ListAdapter.java | 175 +++++++-----------
     .../runtime/test/JDK_8081015_Test.java        |   6 +-
     3 files changed, 75 insertions(+), 162 deletions(-)
     delete mode 100644 nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/JSObjectListAdapter.java
    
    diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/JSObjectListAdapter.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/JSObjectListAdapter.java
    deleted file mode 100644
    index e1357d6c4c9..00000000000
    --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/JSObjectListAdapter.java
    +++ /dev/null
    @@ -1,56 +0,0 @@
    -/*
    - * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
    - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    - *
    - * This code is free software; you can redistribute it and/or modify it
    - * under the terms of the GNU General Public License version 2 only, as
    - * published by the Free Software Foundation.  Oracle designates this
    - * particular file as subject to the "Classpath" exception as provided
    - * by Oracle in the LICENSE file that accompanied this code.
    - *
    - * This code is distributed in the hope that it will be useful, but WITHOUT
    - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - * version 2 for more details (a copy is included in the LICENSE file that
    - * accompanied this code).
    - *
    - * You should have received a copy of the GNU General Public License version
    - * 2 along with this work; if not, write to the Free Software Foundation,
    - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    - *
    - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - * or visit www.oracle.com if you need additional information or have any
    - * questions.
    - */
    -
    -package jdk.nashorn.internal.runtime;
    -
    -import jdk.nashorn.api.scripting.JSObject;
    -
    -/**
    - * A ListAdapter that can wraps a JSObject.
    - */
    -public final class JSObjectListAdapter extends ListAdapter {
    -    /**
    -     * Creates a new list wrapper for the specified JSObject.
    -     * @param obj JSOcript the object to wrap
    -     */
    -    public JSObjectListAdapter(final JSObject obj) {
    -        super(obj);
    -    }
    -
    -    @Override
    -    public int size() {
    -        return JSType.toInt32(((JSObject)obj).getMember("length"));
    -    }
    -
    -    @Override
    -    protected Object getAt(final int index) {
    -        return ((JSObject)obj).getSlot(index);
    -    }
    -
    -    @Override
    -    protected void setAt(final int index, final Object element) {
    -        ((JSObject)obj).setSlot(index, element);
    -    }
    -}
    diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ListAdapter.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ListAdapter.java
    index 25179a590c0..3ae3855b24c 100644
    --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ListAdapter.java
    +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ListAdapter.java
    @@ -25,17 +25,18 @@
     
     package jdk.nashorn.internal.runtime;
     
    +import java.lang.invoke.MethodHandle;
     import java.util.AbstractList;
     import java.util.Deque;
     import java.util.Iterator;
     import java.util.ListIterator;
     import java.util.NoSuchElementException;
    +import java.util.Objects;
     import java.util.RandomAccess;
     import java.util.concurrent.Callable;
     import jdk.nashorn.api.scripting.JSObject;
     import jdk.nashorn.api.scripting.ScriptObjectMirror;
     import jdk.nashorn.internal.runtime.linker.Bootstrap;
    -import jdk.nashorn.internal.runtime.linker.InvokeByName;
     
     /**
      * An adapter that can wrap any ECMAScript Array-like object (that adheres to the array rules for the property
    @@ -50,81 +51,56 @@ import jdk.nashorn.internal.runtime.linker.InvokeByName;
      * operations respectively, while {@link #addLast(Object)} and {@link #removeLast()} will translate to {@code push} and
      * {@code pop}.
      */
    -public abstract class ListAdapter extends AbstractList implements RandomAccess, Deque {
    -    // These add to the back and front of the list
    -    private static final Object PUSH    = new Object();
    -    private static InvokeByName getPUSH() {
    -        return Context.getGlobal().getInvokeByName(PUSH,
    -                new Callable() {
    -                    @Override
    -                    public InvokeByName call() {
    -                        return new InvokeByName("push", Object.class, void.class, Object.class);
    -                    }
    -                });
    +public final class ListAdapter extends AbstractList implements RandomAccess, Deque {
    +    // Invoker creator for methods that add to the start or end of the list: PUSH and UNSHIFT. Takes fn, this, and value, returns void.
    +    private static final Callable ADD_INVOKER_CREATOR = invokerCreator(void.class, Object.class, JSObject.class, Object.class);
    +
    +    // PUSH adds to the end of the list
    +    private static final Object PUSH = new Object();
    +    private static MethodHandle getPushInvoker() {
    +        return getDynamicInvoker(PUSH, ADD_INVOKER_CREATOR);
         }
     
    +    // UNSHIFT adds to the start of the list
         private static final Object UNSHIFT = new Object();
    -    private static InvokeByName getUNSHIFT() {
    -        return Context.getGlobal().getInvokeByName(UNSHIFT,
    -                new Callable() {
    -                    @Override
    -                    public InvokeByName call() {
    -                        return new InvokeByName("unshift", Object.class, void.class, Object.class);
    -                    }
    -                });
    +    private static MethodHandle getUnshiftInvoker() {
    +        return getDynamicInvoker(UNSHIFT, ADD_INVOKER_CREATOR);
         }
     
    -    // These remove from the back and front of the list
    +    // Invoker creator for methods that remove from the tail or head of the list: POP and SHIFT. Takes fn, this, returns Object.
    +    private static final Callable REMOVE_INVOKER_CREATOR = invokerCreator(Object.class, Object.class, JSObject.class);
    +
    +    // POP removes from the to the end of the list
         private static final Object POP = new Object();
    -    private static InvokeByName getPOP() {
    -        return Context.getGlobal().getInvokeByName(POP,
    -                new Callable() {
    -                    @Override
    -                    public InvokeByName call() {
    -                        return new InvokeByName("pop", Object.class, Object.class);
    -                    }
    -                });
    +    private static MethodHandle getPopInvoker() {
    +        return getDynamicInvoker(POP, REMOVE_INVOKER_CREATOR);
         }
     
    +    // SHIFT removes from the to the start of the list
         private static final Object SHIFT = new Object();
    -    private static InvokeByName getSHIFT() {
    -        return Context.getGlobal().getInvokeByName(SHIFT,
    -                new Callable() {
    -                    @Override
    -                    public InvokeByName call() {
    -                        return new InvokeByName("shift", Object.class, Object.class);
    -                    }
    -                });
    +    private static MethodHandle getShiftInvoker() {
    +        return getDynamicInvoker(SHIFT, REMOVE_INVOKER_CREATOR);
         }
     
    -    // These insert and remove in the middle of the list
    +    // SPLICE can be used to add a value in the middle of the list.
         private static final Object SPLICE_ADD = new Object();
    -    private static InvokeByName getSPLICE_ADD() {
    -        return Context.getGlobal().getInvokeByName(SPLICE_ADD,
    -                new Callable() {
    -                    @Override
    -                    public InvokeByName call() {
    -                        return new InvokeByName("splice", Object.class, void.class, int.class, int.class, Object.class);
    -                    }
    -                });
    +    private static final Callable SPLICE_ADD_INVOKER_CREATOR = invokerCreator(void.class, Object.class, JSObject.class, int.class, int.class, Object.class);
    +    private static MethodHandle getSpliceAddInvoker() {
    +        return getDynamicInvoker(SPLICE_ADD, SPLICE_ADD_INVOKER_CREATOR);
         }
     
    +    // SPLICE can also be used to remove values from the middle of the list.
         private static final Object SPLICE_REMOVE = new Object();
    -    private static InvokeByName getSPLICE_REMOVE() {
    -        return  Context.getGlobal().getInvokeByName(SPLICE_REMOVE,
    -                new Callable() {
    -                    @Override
    -                    public InvokeByName call() {
    -                        return new InvokeByName("splice", Object.class, void.class, int.class, int.class);
    -                    }
    -                });
    +    private static final Callable SPLICE_REMOVE_INVOKER_CREATOR = invokerCreator(void.class, Object.class, JSObject.class, int.class, int.class);
    +    private static MethodHandle getSpliceRemoveInvoker() {
    +        return getDynamicInvoker(SPLICE_REMOVE, SPLICE_REMOVE_INVOKER_CREATOR);
         }
     
         /** wrapped object */
    -    protected final Object obj;
    +    protected final JSObject obj;
     
         // allow subclasses only in this package
    -    ListAdapter(final Object obj) {
    +    ListAdapter(final JSObject obj) {
             this.obj = obj;
         }
     
    @@ -135,14 +111,16 @@ public abstract class ListAdapter extends AbstractList implements Random
          * @return A ListAdapter wrapper object
          */
         public static ListAdapter create(final Object obj) {
    +        return new ListAdapter(getJSObject(obj));
    +    }
    +
    +    private static JSObject getJSObject(final Object obj) {
             if (obj instanceof ScriptObject) {
    -            final Object mirror = ScriptObjectMirror.wrap(obj, Context.getGlobal());
    -            return new JSObjectListAdapter((JSObject)mirror);
    +            return (JSObject)ScriptObjectMirror.wrap(obj, Context.getGlobal());
             } else if (obj instanceof JSObject) {
    -            return new JSObjectListAdapter((JSObject)obj);
    -        } else {
    -            throw new IllegalArgumentException("ScriptObject or JSObject expected");
    +            return (JSObject)obj;
             }
    +        throw new IllegalArgumentException("ScriptObject or JSObject expected");
         }
     
         @Override
    @@ -151,34 +129,29 @@ public abstract class ListAdapter extends AbstractList implements Random
             return getAt(index);
         }
     
    -    /**
    -     * Get object at an index
    -     * @param index index in list
    -     * @return object
    -     */
    -    protected abstract Object getAt(final int index);
    +    private Object getAt(final int index) {
    +        return obj.getSlot(index);
    +    }
     
         @Override
         public Object set(final int index, final Object element) {
             checkRange(index);
             final Object prevValue = getAt(index);
    -        setAt(index, element);
    +        obj.setSlot(index, element);
             return prevValue;
         }
     
    -    /**
    -     * Set object at an index
    -     * @param index   index in list
    -     * @param element element
    -     */
    -    protected abstract void setAt(final int index, final Object element);
    -
         private void checkRange(final int index) {
             if(index < 0 || index >= size()) {
                 throw invalidIndex(index);
             }
         }
     
    +    @Override
    +    public int size() {
    +        return JSType.toInt32(obj.getMember("length"));
    +    }
    +
         @Override
         public final void push(final Object e) {
             addFirst(e);
    @@ -193,10 +166,7 @@ public abstract class ListAdapter extends AbstractList implements Random
         @Override
         public final void addFirst(final Object e) {
             try {
    -            final InvokeByName unshiftInvoker = getUNSHIFT();
    -            final Object fn = unshiftInvoker.getGetter().invokeExact(obj);
    -            checkFunction(fn, unshiftInvoker);
    -            unshiftInvoker.getInvoker().invokeExact(fn, obj, e);
    +            getUnshiftInvoker().invokeExact(getFunction("unshift"), obj, e);
             } catch(RuntimeException | Error ex) {
                 throw ex;
             } catch(final Throwable t) {
    @@ -207,10 +177,7 @@ public abstract class ListAdapter extends AbstractList implements Random
         @Override
         public final void addLast(final Object e) {
             try {
    -            final InvokeByName pushInvoker = getPUSH();
    -            final Object fn = pushInvoker.getGetter().invokeExact(obj);
    -            checkFunction(fn, pushInvoker);
    -            pushInvoker.getInvoker().invokeExact(fn, obj, e);
    +            getPushInvoker().invokeExact(getFunction("push"), obj, e);
             } catch(RuntimeException | Error ex) {
                 throw ex;
             } catch(final Throwable t) {
    @@ -228,10 +195,7 @@ public abstract class ListAdapter extends AbstractList implements Random
                 } else {
                     final int size = size();
                     if(index < size) {
    -                    final InvokeByName spliceAddInvoker = getSPLICE_ADD();
    -                    final Object fn = spliceAddInvoker.getGetter().invokeExact(obj);
    -                    checkFunction(fn, spliceAddInvoker);
    -                    spliceAddInvoker.getInvoker().invokeExact(fn, obj, index, 0, e);
    +                    getSpliceAddInvoker().invokeExact(obj.getMember("splice"), obj, index, 0, e);
                     } else if(index == size) {
                         addLast(e);
                     } else {
    @@ -244,10 +208,12 @@ public abstract class ListAdapter extends AbstractList implements Random
                 throw new RuntimeException(t);
             }
         }
    -    private static void checkFunction(final Object fn, final InvokeByName invoke) {
    +    private Object getFunction(final String name) {
    +        final Object fn = obj.getMember(name);
             if(!(Bootstrap.isCallable(fn))) {
    -            throw new UnsupportedOperationException("The script object doesn't have a function named " + invoke.getName());
    +            throw new UnsupportedOperationException("The script object doesn't have a function named " + name);
             }
    +        return fn;
         }
     
         private static IndexOutOfBoundsException invalidIndex(final int index) {
    @@ -321,10 +287,7 @@ public abstract class ListAdapter extends AbstractList implements Random
     
         private Object invokeShift() {
             try {
    -            final InvokeByName shiftInvoker = getSHIFT();
    -            final Object fn = shiftInvoker.getGetter().invokeExact(obj);
    -            checkFunction(fn, shiftInvoker);
    -            return shiftInvoker.getInvoker().invokeExact(fn, obj);
    +            return getShiftInvoker().invokeExact(getFunction("shift"), obj);
             } catch(RuntimeException | Error ex) {
                 throw ex;
             } catch(final Throwable t) {
    @@ -334,10 +297,7 @@ public abstract class ListAdapter extends AbstractList implements Random
     
         private Object invokePop() {
             try {
    -            final InvokeByName popInvoker = getPOP();
    -            final Object fn = popInvoker.getGetter().invokeExact(obj);
    -            checkFunction(fn, popInvoker);
    -            return popInvoker.getInvoker().invokeExact(fn, obj);
    +            return getPopInvoker().invokeExact(getFunction("pop"), obj);
             } catch(RuntimeException | Error ex) {
                 throw ex;
             } catch(final Throwable t) {
    @@ -352,10 +312,7 @@ public abstract class ListAdapter extends AbstractList implements Random
     
         private void invokeSpliceRemove(final int fromIndex, final int count) {
             try {
    -            final InvokeByName spliceRemoveInvoker = getSPLICE_REMOVE();
    -            final Object fn = spliceRemoveInvoker.getGetter().invokeExact(obj);
    -            checkFunction(fn, spliceRemoveInvoker);
    -            spliceRemoveInvoker.getInvoker().invokeExact(fn, obj, fromIndex, count);
    +            getSpliceRemoveInvoker().invokeExact(getFunction("splice"), obj, fromIndex, count);
             } catch(RuntimeException | Error ex) {
                 throw ex;
             } catch(final Throwable t) {
    @@ -443,12 +400,24 @@ public abstract class ListAdapter extends AbstractList implements Random
     
         private static boolean removeOccurrence(final Object o, final Iterator it) {
             while(it.hasNext()) {
    -            final Object e = it.next();
    -            if(o == null ? e == null : o.equals(e)) {
    +            if(Objects.equals(o, it.next())) {
                     it.remove();
                     return true;
                 }
             }
             return false;
         }
    +
    +    private static Callable invokerCreator(final Class rtype, final Class... ptypes) {
    +        return new Callable() {
    +            @Override
    +            public MethodHandle call() {
    +                return Bootstrap.createDynamicInvoker("dyn:call", rtype, ptypes);
    +            }
    +        };
    +    }
    +
    +    private static MethodHandle getDynamicInvoker(final Object key, final Callable creator) {
    +        return Context.getGlobal().getDynamicInvoker(key, creator);
    +    }
     }
    diff --git a/nashorn/test/src/jdk/nashorn/internal/runtime/test/JDK_8081015_Test.java b/nashorn/test/src/jdk/nashorn/internal/runtime/test/JDK_8081015_Test.java
    index f3ddd5e4b1e..6051591eaae 100644
    --- a/nashorn/test/src/jdk/nashorn/internal/runtime/test/JDK_8081015_Test.java
    +++ b/nashorn/test/src/jdk/nashorn/internal/runtime/test/JDK_8081015_Test.java
    @@ -28,19 +28,19 @@ package jdk.nashorn.internal.runtime.test;
     import static org.testng.Assert.assertEquals;
     import static org.testng.Assert.assertNull;
     
    -import jdk.nashorn.test.models.JDK_8081015_TestModel;
    -
     import java.util.Collection;
     import java.util.Queue;
     import javax.script.ScriptEngine;
     import javax.script.ScriptException;
     import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
    +import jdk.nashorn.test.models.JDK_8081015_TestModel;
     import org.testng.annotations.Test;
     
     /**
      * @bug 8081015
      * @summary Test that native arrays get converted to {@link Queue} and {@link Collection}.
      */
    +@SuppressWarnings("javadoc")
     public class JDK_8081015_Test {
         @Test
         public void testConvertToCollection() throws ScriptException {
    @@ -62,7 +62,7 @@ public class JDK_8081015_Test {
             test("receiveQueue");
         }
     
    -    private void test(final String methodName) throws ScriptException {
    +    private static void test(final String methodName) throws ScriptException {
             final ScriptEngine engine = new NashornScriptEngineFactory().getScriptEngine();
             final JDK_8081015_TestModel model = new JDK_8081015_TestModel();
             engine.put("test", model);
    
    From 60ea3cb98fcbc45e34607eaeb6b7cdc0a4b65d55 Mon Sep 17 00:00:00 2001
    From: Alexander Stepanov 
    Date: Tue, 26 May 2015 18:31:21 +0400
    Subject: [PATCH 49/82] 8040147: minor cleanup for docs
    
    Minor cleanup for docs
    
    Reviewed-by: lancea
    ---
     .../share/classes/java/math/BigDecimal.java   |   2 +-
     .../classes/java/text/AttributedString.java   |   6 +-
     .../jdk/internal/util/xml/impl/Parser.java    |   4 +-
     .../classes/com/sun/jndi/cosnaming/CNCtx.java |   6 +-
     .../com/sun/jndi/cosnaming/CorbanameUrl.java  |  30 +-
     .../com/sun/jndi/cosnaming/IiopUrl.java       |   9 +-
     .../sun/jndi/toolkit/corba/CorbaUtils.java    |   3 +-
     .../com/sun/rowset/CachedRowSetImpl.java      |  15 +-
     .../rowset/internal/CachedRowSetWriter.java   |   2 +-
     .../java.sql/share/classes/java/sql/Blob.java | 281 ++++++++--------
     .../java.sql/share/classes/java/sql/Clob.java | 307 +++++++++---------
     .../classes/javax/transaction/xa/package.html |   2 +-
     .../classes/javax/transaction/package.html    |   2 +-
     .../sun/tools/attach/AttachPermission.java    |   4 +-
     .../com/sun/net/httpserver/HttpExchange.java  |   6 +-
     .../sun/tools/jconsole/JConsoleContext.java   |   1 -
     16 files changed, 349 insertions(+), 331 deletions(-)
    
    diff --git a/jdk/src/java.base/share/classes/java/math/BigDecimal.java b/jdk/src/java.base/share/classes/java/math/BigDecimal.java
    index 2afd6e3b7a2..44d7a9f65f6 100644
    --- a/jdk/src/java.base/share/classes/java/math/BigDecimal.java
    +++ b/jdk/src/java.base/share/classes/java/math/BigDecimal.java
    @@ -5176,7 +5176,7 @@ public class BigDecimal extends Number implements Comparable {
         }
     
         /*
    -     * returns true if 128 bit number  is less then 
    +     * returns true if 128 bit number  is less than 
          * hi0 & hi1 should be non-negative
          */
         private static boolean longLongCompareMagnitude(long hi0, long lo0, long hi1, long lo1) {
    diff --git a/jdk/src/java.base/share/classes/java/text/AttributedString.java b/jdk/src/java.base/share/classes/java/text/AttributedString.java
    index daceb62a70f..6e89fdec599 100644
    --- a/jdk/src/java.base/share/classes/java/text/AttributedString.java
    +++ b/jdk/src/java.base/share/classes/java/text/AttributedString.java
    @@ -332,7 +332,7 @@ public class AttributedString {
          * @param beginIndex Index of the first character of the range.
          * @param endIndex Index of the character following the last character of the range.
          * @exception NullPointerException if attribute is null.
    -     * @exception IllegalArgumentException if beginIndex is less then 0, endIndex is
    +     * @exception IllegalArgumentException if beginIndex is less than 0, endIndex is
          * greater than the length of the string, or beginIndex and endIndex together don't
          * define a non-empty subrange of the string.
          */
    @@ -357,7 +357,7 @@ public class AttributedString {
          * @param endIndex Index of the character following the last
          * character of the range.
          * @exception NullPointerException if attributes is null.
    -     * @exception IllegalArgumentException if beginIndex is less then
    +     * @exception IllegalArgumentException if beginIndex is less than
          * 0, endIndex is greater than the length of the string, or
          * beginIndex and endIndex together don't define a non-empty
          * subrange of the string and the attributes parameter is not an
    @@ -580,7 +580,7 @@ public class AttributedString {
          * @param beginIndex the index of the first character
          * @param endIndex the index of the character following the last character
          * @return an iterator providing access to the text and its attributes
    -     * @exception IllegalArgumentException if beginIndex is less then 0,
    +     * @exception IllegalArgumentException if beginIndex is less than 0,
          * endIndex is greater than the length of the string, or beginIndex is
          * greater than endIndex.
          */
    diff --git a/jdk/src/java.base/share/classes/jdk/internal/util/xml/impl/Parser.java b/jdk/src/java.base/share/classes/jdk/internal/util/xml/impl/Parser.java
    index 57115f2139d..eb2c5f7028e 100644
    --- a/jdk/src/java.base/share/classes/jdk/internal/util/xml/impl/Parser.java
    +++ b/jdk/src/java.base/share/classes/jdk/internal/util/xml/impl/Parser.java
    @@ -162,8 +162,8 @@ public abstract class Parser {
          * Possible character type values are:
    - 0 for underscore ('_') or any * lower and upper case alphabetical character value;
    - 1 for colon * (':') character;
    - 2 for dash ('-') and dot ('.') or any decimal - * digit character value;
    - 3 for any kind of white space character
    An ASCII (7 bit) character which does not fall in any category listed + * digit character value;
    - 3 for any kind of white space character
    + * An ASCII (7 bit) character which does not fall in any category listed * above is mapped to 0xff. */ private static final byte nmttyp[]; diff --git a/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/CNCtx.java b/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/CNCtx.java index 6a4d3dea7da..3d77c3746b7 100644 --- a/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/CNCtx.java +++ b/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/CNCtx.java @@ -1040,7 +1040,7 @@ public class CNCtx implements javax.naming.Context { /** * Allow access to the name parser object. - * @param String JNDI name, is ignored since there is only one Name + * @param name JNDI name, is ignored since there is only one Name * Parser object. * @exception NamingException -- * @return NameParser object @@ -1051,7 +1051,7 @@ public class CNCtx implements javax.naming.Context { /** * Allow access to the name parser object. - * @param Name JNDI name, is ignored since there is only one Name + * @param name JNDI name, is ignored since there is only one Name * Parser object. * @exception NamingException -- * @return NameParser object @@ -1088,7 +1088,7 @@ public class CNCtx implements javax.naming.Context { * Record change but do not reinitialize ORB. * * @param propName The property name. - * @param propVal The ORB. + * @param propValue The ORB. * @return the previous value of this property if any. */ @SuppressWarnings("unchecked") diff --git a/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/CorbanameUrl.java b/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/CorbanameUrl.java index 6b32bb17aa0..a0cc08034f6 100644 --- a/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/CorbanameUrl.java +++ b/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/CorbanameUrl.java @@ -35,32 +35,36 @@ import com.sun.jndi.toolkit.url.UrlUtil; * Extract components of a "corbaname" URL. * * The format of an corbaname URL is defined in INS 99-12-03 as follows. - *

    + *

    {@code
      * corbaname url = "corbaname:"  ["#" ]
      * corbaloc_obj  =  ["/" ]
      * obj_addr_list = as defined in a corbaloc URL
      * key_string    = as defined in a corbaloc URL
      * string_name   = stringified COS name | empty_string
    - *

    - * Characters in are escaped as follows. + * }

    + * Characters in {@code } are escaped as follows. * US-ASCII alphanumeric characters are not escaped. Any characters outside * of this range are escaped except for the following: + *
    {@code
      *        ; / : ? @ & = + $ , - _ . ! ~ * ; ( )
    + * }
    * Escaped characters is escaped by using a % followed by its 2 hexadecimal * numbers representing the octet. - *

    + *

    * The corbaname URL is parsed into two parts: a corbaloc URL and a COS name. - * The corbaloc URL is constructed by concatenation "corbaloc:" with - * . - * The COS name is with the escaped characters resolved. - *

    + * The corbaloc URL is constructed by concatenation {@code "corbaloc:"} with + * {@code }. + * The COS name is {@code } with the escaped characters resolved. + *

    * A corbaname URL is resolved by: - *

      - *
    1. Construct a corbaloc URL by concatenating "corbaloc:" and . - *
    2. Resolve the corbaloc URL to a NamingContext by using + *
        + *
      1. Construct a corbaloc URL by concatenating {@code "corbaloc:"} and {@code }. + *
      2. Resolve the corbaloc URL to a NamingContext by using + *
        {@code
          *     nctx = ORB.string_to_object(corbalocUrl);
        - *
      3. Resolve in the NamingContext. - *
      + * } + *
    3. Resolve {@code } in the NamingContext. + *
    * * @author Rosanna Lee */ diff --git a/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/IiopUrl.java b/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/IiopUrl.java index d6ed5fd71fd..a51d6a4880c 100644 --- a/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/IiopUrl.java +++ b/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/IiopUrl.java @@ -38,6 +38,7 @@ import com.sun.jndi.toolkit.url.UrlUtil; * * The format of an iiopname URL is defined in INS 98-10-11 as follows: * + *
      * iiopname url = "iiopname://" [addr_list]["/" string_name]
      * addr_list    = [address ","]* address
      * address      = [version host [":" port]]
    @@ -46,19 +47,23 @@ import com.sun.jndi.toolkit.url.UrlUtil;
      * port         = number
      * major        = number
      * minor        = number
    - * string_name = stringified name | empty_string
    + * string_name  = stringified name | empty_string
    + * 
    * * The default port is 9999. The default version is "1.0" * US-ASCII alphanumeric characters are not escaped. Any characters outside * of this range are escaped except for the following: + *
    {@code
      * ; / : ? : @ & = + $ , - _ . ! ~ *  ' ( )
    + * }
    * Escaped characters is escaped by using a % followed by its 2 hexadecimal * numbers representing the octet. * * For backward compatibility, the "iiop" URL as defined in INS 97-6-6 * is also supported: - * + *
    {@code
      * iiop url     = "iiop://" [host [":" port]] ["/" string_name]
    + * }
    * The default port is 900. * * @author Rosanna Lee diff --git a/jdk/src/java.corba/share/classes/com/sun/jndi/toolkit/corba/CorbaUtils.java b/jdk/src/java.corba/share/classes/com/sun/jndi/toolkit/corba/CorbaUtils.java index 3802f5f106c..2fa43bca79e 100644 --- a/jdk/src/java.corba/share/classes/com/sun/jndi/toolkit/corba/CorbaUtils.java +++ b/jdk/src/java.corba/share/classes/com/sun/jndi/toolkit/corba/CorbaUtils.java @@ -56,7 +56,7 @@ public class CorbaUtils { * object by using the javax.rmi.CORBA package. *

    * This method effective does the following: - *

    +      * 
           * java.lang.Object stub;
           * try {
           *     stub = PortableRemoteObject.toStub(remoteObj);
    @@ -72,6 +72,7 @@ public class CorbaUtils {
           *     // ignore 'already connected' error
           * }
           * return (javax.rmi.CORBA.Stub)stub;
    +      * 
    * * @param remoteObj The non-null remote object for * @param orb The non-null ORB to connect the remote object to diff --git a/jdk/src/java.sql.rowset/share/classes/com/sun/rowset/CachedRowSetImpl.java b/jdk/src/java.sql.rowset/share/classes/com/sun/rowset/CachedRowSetImpl.java index 8fb0b5be9e2..a97a27244af 100644 --- a/jdk/src/java.sql.rowset/share/classes/com/sun/rowset/CachedRowSetImpl.java +++ b/jdk/src/java.sql.rowset/share/classes/com/sun/rowset/CachedRowSetImpl.java @@ -1059,7 +1059,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern * (acceptChanges) or population. This method may also be called * while performing updates to the insert row. *

    - * undoUpdateTINYINT, SMALLINT, INTEGER - * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, - * VARCHAR or LONGVARCHAR< value. The bold SQL type - * designates the recommended return type. + * column does not store an SQL {@code TINYINT, SMALLINT, INTEGER + * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, } + * {@code CHAR, VARCHAR} or + * {@code LONGVARCHAR} value. + * The bold SQL type designates the recommended return type. */ public String getString(String columnName) throws SQLException { return getString(getColIdxByName(columnName)); @@ -7748,7 +7749,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern * Updates the designated column with a RowId value. The updater * methods are used to update column values in the current row or the insert * row. The updater methods do not update the underlying database; instead - * the updateRow or insertRow methods are called + * the {@code updateRow} or {@code insertRow} methods are called * to update the database. * * @param columnIndex the first column is 1, the second 2, ... @@ -7764,7 +7765,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern * Updates the designated column with a RowId value. The updater * methods are used to update column values in the current row or the insert * row. The updater methods do not update the underlying database; instead - * the updateRow or insertRow methods are called + * the {@code updateRow} or {@code insertRow} methods are called * to update the database. * * @param columnName the name of the column diff --git a/jdk/src/java.sql.rowset/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java b/jdk/src/java.sql.rowset/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java index 79c3e78fc00..a3979499f28 100644 --- a/jdk/src/java.sql.rowset/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java +++ b/jdk/src/java.sql.rowset/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java @@ -182,7 +182,7 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable { private CachedRowSetImpl crsResolve; /** - * This ArrayList will hold the values of SyncResolver.* + * This {@code ArrayList} will hold the values of SyncResolver.* */ private ArrayList status; diff --git a/jdk/src/java.sql/share/classes/java/sql/Blob.java b/jdk/src/java.sql/share/classes/java/sql/Blob.java index 090e89b6750..181dc96a6cf 100644 --- a/jdk/src/java.sql/share/classes/java/sql/Blob.java +++ b/jdk/src/java.sql/share/classes/java/sql/Blob.java @@ -29,29 +29,28 @@ import java.io.InputStream; /** * The representation (mapping) in - * the Java™ programming - * language of an SQL - * BLOB value. An SQL BLOB is a built-in type + * the Java™ programming language of an SQL + * {@code BLOB} value. An SQL {@code BLOB} is a built-in type * that stores a Binary Large Object as a column value in a row of - * a database table. By default drivers implement Blob using - * an SQL locator(BLOB), which means that a - * Blob object contains a logical pointer to the - * SQL BLOB data rather than the data itself. - * A Blob object is valid for the duration of the + * a database table. By default drivers implement {@code Blob} using + * an SQL {@code locator(BLOB)}, which means that a + * {@code Blob} object contains a logical pointer to the + * SQL {@code BLOB} data rather than the data itself. + * A {@code Blob} object is valid for the duration of the * transaction in which is was created. * *

    Methods in the interfaces {@link ResultSet}, * {@link CallableStatement}, and {@link PreparedStatement}, such as - * getBlob and setBlob allow a programmer to - * access an SQL BLOB value. - * The Blob interface provides methods for getting the - * length of an SQL BLOB (Binary Large Object) value, - * for materializing a BLOB value on the client, and for + * {@code getBlob} and {@code setBlob} allow a programmer to + * access an SQL {@code BLOB} value. + * The {@code Blob} interface provides methods for getting the + * length of an SQL {@code BLOB} (Binary Large Object) value, + * for materializing a {@code BLOB} value on the client, and for * determining the position of a pattern of bytes within a - * BLOB value. In addition, this interface has methods for updating - * a BLOB value. + * {@code BLOB} value. In addition, this interface has methods for updating + * a {@code BLOB} value. *

    - * All methods on the Blob interface must be fully implemented if the + * All methods on the {@code Blob} interface must be fully implemented if the * JDBC driver supports the data type. * * @since 1.2 @@ -60,51 +59,52 @@ import java.io.InputStream; public interface Blob { /** - * Returns the number of bytes in the BLOB value - * designated by this Blob object. - * @return length of the BLOB in bytes + * Returns the number of bytes in the {@code BLOB} value + * designated by this {@code Blob} object. + * + * @return length of the {@code BLOB} in bytes * @exception SQLException if there is an error accessing the - * length of the BLOB - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * length of the {@code BLOB} + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @since 1.2 */ long length() throws SQLException; /** - * Retrieves all or part of the BLOB - * value that this Blob object represents, as an array of - * bytes. This byte array contains up to length - * consecutive bytes starting at position pos. + * Retrieves all or part of the {@code BLOB} + * value that this {@code Blob} object represents, as an array of + * bytes. This {@code byte} array contains up to {@code length} + * consecutive bytes starting at position {@code pos}. * * @param pos the ordinal position of the first byte in the - * BLOB value to be extracted; the first byte is at + * {@code BLOB} value to be extracted; the first byte is at * position 1 * @param length the number of consecutive bytes to be copied; the value - * for length must be 0 or greater - * @return a byte array containing up to length - * consecutive bytes from the BLOB value designated - * by this Blob object, starting with the - * byte at position pos + * for length must be 0 or greater + * @return a byte array containing up to {@code length} + * consecutive bytes from the {@code BLOB} value designated + * by this {@code Blob} object, starting with the + * byte at position {@code pos} * @exception SQLException if there is an error accessing the - * BLOB value; if pos is less than 1 or length is - * less than 0 - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * {@code BLOB} value; if pos is less than 1 or length is + * less than 0 + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @see #setBytes * @since 1.2 */ byte[] getBytes(long pos, int length) throws SQLException; /** - * Retrieves the BLOB value designated by this - * Blob instance as a stream. + * Retrieves the {@code BLOB} value designated by this + * {@code Blob} instance as a stream. * - * @return a stream containing the BLOB data + * @return a stream containing the {@code BLOB} data * @exception SQLException if there is an error accessing the - * BLOB value - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * {@code BLOB} value + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @see #setBinaryStream * @since 1.2 */ @@ -112,38 +112,38 @@ public interface Blob { /** * Retrieves the byte position at which the specified byte array - * pattern begins within the BLOB - * value that this Blob object represents. The - * search for pattern begins at position - * start. + * {@code pattern} begins within the {@code BLOB} + * value that this {@code Blob} object represents. + * The search for {@code pattern} begins at position + * {@code start}. * * @param pattern the byte array for which to search * @param start the position at which to begin searching; the * first position is 1 * @return the position at which the pattern appears, else -1 * @exception SQLException if there is an error accessing the - * BLOB or if start is less than 1 - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * {@code BLOB} or if start is less than 1 + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @since 1.2 */ long position(byte pattern[], long start) throws SQLException; /** - * Retrieves the byte position in the BLOB value - * designated by this Blob object at which - * pattern begins. The search begins at position - * start. + * Retrieves the byte position in the {@code BLOB} value + * designated by this {@code Blob} object at which + * {@code pattern} begins. The search begins at position + * {@code start}. * - * @param pattern the Blob object designating - * the BLOB value for which to search - * @param start the position in the BLOB value + * @param pattern the {@code Blob} object designating + * the {@code BLOB} value for which to search + * @param start the position in the {@code BLOB} value * at which to begin searching; the first position is 1 * @return the position at which the pattern begins, else -1 * @exception SQLException if there is an error accessing the - * BLOB value or if start is less than 1 - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * {@code BLOB} value or if start is less than 1 + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @since 1.2 */ long position(Blob pattern, long start) throws SQLException; @@ -151,152 +151,155 @@ public interface Blob { // -------------------------- JDBC 3.0 ----------------------------------- /** - * Writes the given array of bytes to the BLOB value that - * this Blob object represents, starting at position - * pos, and returns the number of bytes written. + * Writes the given array of bytes to the {@code BLOB} value that + * this {@code Blob} object represents, starting at position + * {@code pos}, and returns the number of bytes written. * The array of bytes will overwrite the existing bytes - * in the Blob object starting at the position - * pos. If the end of the Blob value is reached - * while writing the array of bytes, then the length of the Blob + * in the {@code Blob} object starting at the position + * {@code pos}. If the end of the {@code Blob} value is reached + * while writing the array of bytes, then the length of the {@code Blob} * value will be increased to accommodate the extra bytes. *

    - * Note: If the value specified for pos - * is greater then the length+1 of the BLOB value then the - * behavior is undefined. Some JDBC drivers may throw a - * SQLException while other drivers may support this + * Note: If the value specified for {@code pos} + * is greater than the length+1 of the {@code BLOB} value then the + * behavior is undefined. Some JDBC drivers may throw an + * {@code SQLException} while other drivers may support this * operation. * - * @param pos the position in the BLOB object at which + * @param pos the position in the {@code BLOB} object at which * to start writing; the first position is 1 - * @param bytes the array of bytes to be written to the BLOB - * value that this Blob object represents + * @param bytes the array of bytes to be written to the {@code BLOB} + * value that this {@code Blob} object represents * @return the number of bytes written * @exception SQLException if there is an error accessing the - * BLOB value or if pos is less than 1 - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * {@code BLOB} value or if pos is less than 1 + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @see #getBytes * @since 1.4 */ int setBytes(long pos, byte[] bytes) throws SQLException; /** - * Writes all or part of the given byte array to the - * BLOB value that this Blob object represents + * Writes all or part of the given {@code byte} array to the + * {@code BLOB} value that this {@code Blob} object represents * and returns the number of bytes written. - * Writing starts at position pos in the BLOB - * value; len bytes from the given byte array are written. + * Writing starts at position {@code pos} in the {@code BLOB} + * value; {@code len} bytes from the given byte array are written. * The array of bytes will overwrite the existing bytes - * in the Blob object starting at the position - * pos. If the end of the Blob value is reached - * while writing the array of bytes, then the length of the Blob + * in the {@code Blob} object starting at the position + * {@code pos}. If the end of the {@code Blob} value is reached + * while writing the array of bytes, then the length of the {@code Blob} * value will be increased to accommodate the extra bytes. *

    - * Note: If the value specified for pos - * is greater then the length+1 of the BLOB value then the - * behavior is undefined. Some JDBC drivers may throw a - * SQLException while other drivers may support this + * Note: If the value specified for {@code pos} + * is greater than the length+1 of the {@code BLOB} value then the + * behavior is undefined. Some JDBC drivers may throw an + * {@code SQLException} while other drivers may support this * operation. * - * @param pos the position in the BLOB object at which + * @param pos the position in the {@code BLOB} object at which * to start writing; the first position is 1 - * @param bytes the array of bytes to be written to this BLOB + * @param bytes the array of bytes to be written to this {@code BLOB} * object - * @param offset the offset into the array bytes at which + * @param offset the offset into the array {@code bytes} at which * to start reading the bytes to be set - * @param len the number of bytes to be written to the BLOB - * value from the array of bytes bytes + * @param len the number of bytes to be written to the {@code BLOB} + * value from the array of bytes {@code bytes} * @return the number of bytes written * @exception SQLException if there is an error accessing the - * BLOB value or if pos is less than 1 - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * {@code BLOB} value or if pos is less than 1 + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @see #getBytes * @since 1.4 */ int setBytes(long pos, byte[] bytes, int offset, int len) throws SQLException; /** - * Retrieves a stream that can be used to write to the BLOB - * value that this Blob object represents. The stream begins - * at position pos. + * Retrieves a stream that can be used to write to the {@code BLOB} + * value that this {@code Blob} object represents. The stream begins + * at position {@code pos}. * The bytes written to the stream will overwrite the existing bytes - * in the Blob object starting at the position - * pos. If the end of the Blob value is reached - * while writing to the stream, then the length of the Blob + * in the {@code Blob} object starting at the position + * {@code pos}. If the end of the {@code Blob} value is reached + * while writing to the stream, then the length of the {@code Blob} * value will be increased to accommodate the extra bytes. *

    - * Note: If the value specified for pos - * is greater then the length+1 of the BLOB value then the - * behavior is undefined. Some JDBC drivers may throw a - * SQLException while other drivers may support this + * Note: If the value specified for {@code pos} + * is greater than the length+1 of the {@code BLOB} value then the + * behavior is undefined. Some JDBC drivers may throw an + * {@code SQLException} while other drivers may support this * operation. * - * @param pos the position in the BLOB value at which + * @param pos the position in the {@code BLOB} value at which * to start writing; the first position is 1 - * @return a java.io.OutputStream object to which data can + * @return a {@code java.io.OutputStream} object to which data can * be written * @exception SQLException if there is an error accessing the - * BLOB value or if pos is less than 1 - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * {@code BLOB} value or if pos is less than 1 + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @see #getBinaryStream * @since 1.4 */ java.io.OutputStream setBinaryStream(long pos) throws SQLException; /** - * Truncates the BLOB value that this Blob - * object represents to be len bytes in length. + * Truncates the {@code BLOB} value that this {@code Blob} + * object represents to be {@code len} bytes in length. *

    - * Note: If the value specified for pos - * is greater then the length+1 of the BLOB value then the - * behavior is undefined. Some JDBC drivers may throw a - * SQLException while other drivers may support this + * Note: If the value specified for {@code pos} + * is greater than the length+1 of the {@code BLOB} value then the + * behavior is undefined. Some JDBC drivers may throw an + * {@code SQLException} while other drivers may support this * operation. * - * @param len the length, in bytes, to which the BLOB value - * that this Blob object represents should be truncated + * @param len the length, in bytes, to which the {@code BLOB} value + * that this {@code Blob} object represents should be truncated * @exception SQLException if there is an error accessing the - * BLOB value or if len is less than 0 - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * {@code BLOB} value or if len is less than 0 + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @since 1.4 */ void truncate(long len) throws SQLException; /** - * This method frees the Blob object and releases the resources that - * it holds. The object is invalid once the free + * This method frees the {@code Blob} object and releases the resources that + * it holds. The object is invalid once the {@code free} * method is called. *

    - * After free has been called, any attempt to invoke a - * method other than free will result in a SQLException - * being thrown. If free is called multiple times, the subsequent - * calls to free are treated as a no-op. + * After {@code free} has been called, any attempt to invoke a + * method other than {@code free} will result in an {@code SQLException} + * being thrown. If {@code free} is called multiple times, the subsequent + * calls to {@code free} are treated as a no-op. * * @throws SQLException if an error occurs releasing - * the Blob's resources - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * the Blob's resources + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @since 1.6 */ void free() throws SQLException; /** - * Returns an InputStream object that contains a partial Blob value, - * starting with the byte specified by pos, which is length bytes in length. + * Returns an {@code InputStream} object that contains + * a partial {@code Blob} value, starting with the byte + * specified by pos, which is length bytes in length. * - * @param pos the offset to the first byte of the partial value to be retrieved. - * The first byte in the Blob is at position 1 + * @param pos the offset to the first byte of the partial value to be + * retrieved. The first byte in the {@code Blob} is at position 1. * @param length the length in bytes of the partial value to be retrieved - * @return InputStream through which the partial Blob value can be read. - * @throws SQLException if pos is less than 1 or if pos is greater than the number of bytes - * in the Blob or if pos + length is greater than the number of bytes - * in the Blob + * @return {@code InputStream} through which + * the partial {@code Blob} value can be read. + * @throws SQLException if pos is less than 1 or if pos is greater + * than the number of bytes in the {@code Blob} or if + * pos + length is greater than the number of bytes + * in the {@code Blob} * - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @since 1.6 */ InputStream getBinaryStream(long pos, long length) throws SQLException; diff --git a/jdk/src/java.sql/share/classes/java/sql/Clob.java b/jdk/src/java.sql/share/classes/java/sql/Clob.java index b074ac604c0..3c4bfda793a 100644 --- a/jdk/src/java.sql/share/classes/java/sql/Clob.java +++ b/jdk/src/java.sql/share/classes/java/sql/Clob.java @@ -29,28 +29,28 @@ import java.io.Reader; /** * The mapping in the Java™ programming language - * for the SQL CLOB type. - * An SQL CLOB is a built-in type + * for the SQL {@code CLOB} type. + * An SQL {@code CLOB} is a built-in type * that stores a Character Large Object as a column value in a row of * a database table. - * By default drivers implement a Clob object using an SQL - * locator(CLOB), which means that a Clob object - * contains a logical pointer to the SQL CLOB data rather than - * the data itself. A Clob object is valid for the duration + * By default drivers implement a {@code Clob} object using an SQL + * {@code locator(CLOB)}, which means that a {@code Clob} object + * contains a logical pointer to the SQL {@code CLOB} data rather than + * the data itself. A {@code Clob} object is valid for the duration * of the transaction in which it was created. - *

    The Clob interface provides methods for getting the - * length of an SQL CLOB (Character Large Object) value, - * for materializing a CLOB value on the client, and for - * searching for a substring or CLOB object within a - * CLOB value. + *

    The {@code Clob} interface provides methods for getting the + * length of an SQL {@code CLOB} (Character Large Object) value, + * for materializing a {@code CLOB} value on the client, and for + * searching for a substring or {@code CLOB} object within a + * {@code CLOB} value. * Methods in the interfaces {@link ResultSet}, * {@link CallableStatement}, and {@link PreparedStatement}, such as - * getClob and setClob allow a programmer to - * access an SQL CLOB value. In addition, this interface - * has methods for updating a CLOB value. + * {@code getClob} and {@code setClob} allow a programmer to + * access an SQL {@code CLOB} value. In addition, this interface + * has methods for updating a {@code CLOB} value. *

    - * All methods on the Clob interface must be fully implemented if the - * JDBC driver supports the data type. + * All methods on the {@code Clob} interface must be + * fully implemented if the JDBC driver supports the data type. * * @since 1.2 */ @@ -59,67 +59,67 @@ public interface Clob { /** * Retrieves the number of characters - * in the CLOB value - * designated by this Clob object. + * in the {@code CLOB} value + * designated by this {@code Clob} object. * - * @return length of the CLOB in characters + * @return length of the {@code CLOB} in characters * @exception SQLException if there is an error accessing the - * length of the CLOB value - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * length of the {@code CLOB} value + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @since 1.2 */ long length() throws SQLException; /** * Retrieves a copy of the specified substring - * in the CLOB value - * designated by this Clob object. + * in the {@code CLOB} value + * designated by this {@code Clob} object. * The substring begins at position - * pos and has up to length consecutive + * {@code pos} and has up to {@code length} consecutive * characters. * * @param pos the first character of the substring to be extracted. - * The first character is at position 1. + * The first character is at position 1. * @param length the number of consecutive characters to be copied; - * the value for length must be 0 or greater - * @return a String that is the specified substring in - * the CLOB value designated by this Clob object + * the value for length must be 0 or greater + * @return a {@code String} that is the specified substring in + * the {@code CLOB} value designated by this {@code Clob} object * @exception SQLException if there is an error accessing the - * CLOB value; if pos is less than 1 or length is - * less than 0 - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * {@code CLOB} value; if pos is less than 1 or length is + * less than 0 + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @since 1.2 */ String getSubString(long pos, int length) throws SQLException; /** - * Retrieves the CLOB value designated by this Clob - * object as a java.io.Reader object (or as a stream of + * Retrieves the {@code CLOB} value designated by this {@code Clob} + * object as a {@code java.io.Reader} object (or as a stream of * characters). * - * @return a java.io.Reader object containing the - * CLOB data + * @return a {@code java.io.Reader} object containing the + * {@code CLOB} data * @exception SQLException if there is an error accessing the - * CLOB value - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * {@code CLOB} value + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @see #setCharacterStream * @since 1.2 */ java.io.Reader getCharacterStream() throws SQLException; /** - * Retrieves the CLOB value designated by this Clob + * Retrieves the {@code CLOB} value designated by this {@code Clob} * object as an ascii stream. * - * @return a java.io.InputStream object containing the - * CLOB data + * @return a {@code java.io.InputStream} object containing the + * {@code CLOB} data * @exception SQLException if there is an error accessing the - * CLOB value - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * {@code CLOB} value + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @see #setAsciiStream * @since 1.2 */ @@ -127,38 +127,38 @@ public interface Clob { /** * Retrieves the character position at which the specified substring - * searchstr appears in the SQL CLOB value - * represented by this Clob object. The search - * begins at position start. + * {@code searchstr} appears in the SQL {@code CLOB} value + * represented by this {@code Clob} object. The search + * begins at position {@code start}. * * @param searchstr the substring for which to search - * @param start the position at which to begin searching; the first position - * is 1 + * @param start the position at which to begin searching; + * the first position is 1 * @return the position at which the substring appears or -1 if it is not * present; the first position is 1 * @exception SQLException if there is an error accessing the - * CLOB value or if pos is less than 1 - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * {@code CLOB} value or if pos is less than 1 + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @since 1.2 */ long position(String searchstr, long start) throws SQLException; /** * Retrieves the character position at which the specified - * Clob object searchstr appears in this - * Clob object. The search begins at position - * start. + * {@code Clob} object {@code searchstr} appears in this + * {@code Clob} object. The search begins at position + * {@code start}. * - * @param searchstr the Clob object for which to search + * @param searchstr the {@code Clob} object for which to search * @param start the position at which to begin searching; the first * position is 1 - * @return the position at which the Clob object appears - * or -1 if it is not present; the first position is 1 + * @return the position at which the {@code Clob} object appears + * or -1 if it is not present; the first position is 1 * @exception SQLException if there is an error accessing the - * CLOB value or if start is less than 1 - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * {@code CLOB} value or if start is less than 1 + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @since 1.2 */ long position(Clob searchstr, long start) throws SQLException; @@ -166,90 +166,91 @@ public interface Clob { //---------------------------- jdbc 3.0 ----------------------------------- /** - * Writes the given Java String to the CLOB - * value that this Clob object designates at the position - * pos. The string will overwrite the existing characters - * in the Clob object starting at the position - * pos. If the end of the Clob value is reached - * while writing the given string, then the length of the Clob + * Writes the given Java {@code String} to the {@code CLOB} + * value that this {@code Clob} object designates at the position + * {@code pos}. The string will overwrite the existing characters + * in the {@code Clob} object starting at the position + * {@code pos}. If the end of the {@code Clob} value is reached + * while writing the given string, then the length of the {@code Clob} * value will be increased to accommodate the extra characters. *

    - * Note: If the value specified for pos - * is greater then the length+1 of the CLOB value then the - * behavior is undefined. Some JDBC drivers may throw a - * SQLException while other drivers may support this + * Note: If the value specified for {@code pos} + * is greater than the length+1 of the {@code CLOB} value then the + * behavior is undefined. Some JDBC drivers may throw an + * {@code SQLException} while other drivers may support this * operation. * - * @param pos the position at which to start writing to the CLOB - * value that this Clob object represents; - * The first position is 1 - * @param str the string to be written to the CLOB - * value that this Clob designates + * @param pos the position at which to start writing to the {@code CLOB} + * value that this {@code Clob} object represents; + * the first position is 1. + * @param str the string to be written to the {@code CLOB} + * value that this {@code Clob} designates * @return the number of characters written * @exception SQLException if there is an error accessing the - * CLOB value or if pos is less than 1 + * {@code CLOB} value or if pos is less than 1 * - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @since 1.4 */ int setString(long pos, String str) throws SQLException; /** - * Writes len characters of str, starting - * at character offset, to the CLOB value - * that this Clob represents. The string will overwrite the existing characters - * in the Clob object starting at the position - * pos. If the end of the Clob value is reached - * while writing the given string, then the length of the Clob + * Writes {@code len} characters of {@code str}, starting + * at character {@code offset}, to the {@code CLOB} value + * that this {@code Clob} represents. + * The string will overwrite the existing characters + * in the {@code Clob} object starting at the position + * {@code pos}. If the end of the {@code Clob} value is reached + * while writing the given string, then the length of the {@code Clob} * value will be increased to accommodate the extra characters. *

    - * Note: If the value specified for pos - * is greater then the length+1 of the CLOB value then the - * behavior is undefined. Some JDBC drivers may throw a - * SQLException while other drivers may support this + * Note: If the value specified for {@code pos} + * is greater than the length+1 of the {@code CLOB} value then the + * behavior is undefined. Some JDBC drivers may throw an + * {@code SQLException} while other drivers may support this * operation. * * @param pos the position at which to start writing to this - * CLOB object; The first position is 1 - * @param str the string to be written to the CLOB - * value that this Clob object represents - * @param offset the offset into str to start reading + * {@code CLOB} object; The first position is 1 + * @param str the string to be written to the {@code CLOB} + * value that this {@code Clob} object represents + * @param offset the offset into {@code str} to start reading * the characters to be written * @param len the number of characters to be written * @return the number of characters written * @exception SQLException if there is an error accessing the - * CLOB value or if pos is less than 1 + * {@code CLOB} value or if pos is less than 1 * - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @since 1.4 */ int setString(long pos, String str, int offset, int len) throws SQLException; /** * Retrieves a stream to be used to write Ascii characters to the - * CLOB value that this Clob object represents, - * starting at position pos. Characters written to the stream + * {@code CLOB} value that this {@code Clob} object represents, + * starting at position {@code pos}. Characters written to the stream * will overwrite the existing characters - * in the Clob object starting at the position - * pos. If the end of the Clob value is reached - * while writing characters to the stream, then the length of the Clob + * in the {@code Clob} object starting at the position + * {@code pos}. If the end of the {@code Clob} value is reached + * while writing characters to the stream, then the length of the {@code Clob} * value will be increased to accommodate the extra characters. *

    - * Note: If the value specified for pos - * is greater then the length+1 of the CLOB value then the - * behavior is undefined. Some JDBC drivers may throw a - * SQLException while other drivers may support this + * Note: If the value specified for {@code pos} + * is greater than the length+1 of the {@code CLOB} value then the + * behavior is undefined. Some JDBC drivers may throw an + * {@code SQLException} while other drivers may support this * operation. * * @param pos the position at which to start writing to this - * CLOB object; The first position is 1 + * {@code CLOB} object; The first position is 1 * @return the stream to which ASCII encoded characters can be written * @exception SQLException if there is an error accessing the - * CLOB value or if pos is less than 1 - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * {@code CLOB} value or if pos is less than 1 + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @see #getAsciiStream * * @since 1.4 @@ -258,28 +259,28 @@ public interface Clob { /** * Retrieves a stream to be used to write a stream of Unicode characters - * to the CLOB value that this Clob object - * represents, at position pos. Characters written to the stream + * to the {@code CLOB} value that this {@code Clob} object + * represents, at position {@code pos}. Characters written to the stream * will overwrite the existing characters - * in the Clob object starting at the position - * pos. If the end of the Clob value is reached - * while writing characters to the stream, then the length of the Clob + * in the {@code Clob} object starting at the position + * {@code pos}. If the end of the {@code Clob} value is reached + * while writing characters to the stream, then the length of the {@code Clob} * value will be increased to accommodate the extra characters. *

    - * Note: If the value specified for pos - * is greater then the length+1 of the CLOB value then the - * behavior is undefined. Some JDBC drivers may throw a - * SQLException while other drivers may support this + * Note: If the value specified for {@code pos} + * is greater than the length+1 of the {@code CLOB} value then the + * behavior is undefined. Some JDBC drivers may throw an + * {@code SQLException} while other drivers may support this * operation. * * @param pos the position at which to start writing to the - * CLOB value; The first position is 1 + * {@code CLOB} value; The first position is 1 * * @return a stream to which Unicode encoded characters can be written * @exception SQLException if there is an error accessing the - * CLOB value or if pos is less than 1 - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * {@code CLOB} value or if pos is less than 1 + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @see #getCharacterStream * * @since 1.4 @@ -287,60 +288,64 @@ public interface Clob { java.io.Writer setCharacterStream(long pos) throws SQLException; /** - * Truncates the CLOB value that this Clob - * designates to have a length of len + * Truncates the {@code CLOB} value that this {@code Clob} + * designates to have a length of {@code len} * characters. *

    - * Note: If the value specified for pos - * is greater then the length+1 of the CLOB value then the - * behavior is undefined. Some JDBC drivers may throw a - * SQLException while other drivers may support this + * Note: If the value specified for {@code pos} + * is greater than the length+1 of the {@code CLOB} value then the + * behavior is undefined. Some JDBC drivers may throw an + * {@code SQLException} while other drivers may support this * operation. * - * @param len the length, in characters, to which the CLOB value + * @param len the length, in characters, to which the {@code CLOB} value * should be truncated * @exception SQLException if there is an error accessing the - * CLOB value or if len is less than 0 + * {@code CLOB} value or if len is less than 0 * - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @since 1.4 */ void truncate(long len) throws SQLException; /** - * This method releases the resources that the Clob object - * holds. The object is invalid once the free method + * This method releases the resources that the {@code Clob} object + * holds. The object is invalid once the {@code free} method * is called. *

    - * After free has been called, any attempt to invoke a - * method other than free will result in a SQLException - * being thrown. If free is called multiple times, the subsequent - * calls to free are treated as a no-op. + * After {@code free} has been called, any attempt to invoke a + * method other than {@code free} will result in a {@code SQLException} + * being thrown. If {@code free} is called multiple times, the subsequent + * calls to {@code free} are treated as a no-op. * * @throws SQLException if an error occurs releasing - * the Clob's resources + * the Clob's resources * - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @since 1.6 */ void free() throws SQLException; /** - * Returns a Reader object that contains a partial Clob value, starting - * with the character specified by pos, which is length characters in length. + * Returns a {@code Reader} object that contains + * a partial {@code Clob} value, starting with the character + * specified by pos, which is length characters in length. * * @param pos the offset to the first character of the partial value to * be retrieved. The first character in the Clob is at position 1. * @param length the length in characters of the partial value to be retrieved. - * @return Reader through which the partial Clob value can be read. - * @throws SQLException if pos is less than 1 or if pos is greater than the number of - * characters in the Clob or if pos + length is greater than the number of - * characters in the Clob + * @return {@code Reader} through which + * the partial {@code Clob} value can be read. + * @throws SQLException if pos is less than 1; + * or if pos is greater than the number of characters + * in the {@code Clob}; + * or if pos + length is greater than the number of + * characters in the {@code Clob} * - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support - * this method + * @exception SQLFeatureNotSupportedException if the JDBC driver + * does not support this method * @since 1.6 */ Reader getCharacterStream(long pos, long length) throws SQLException; diff --git a/jdk/src/java.sql/share/classes/javax/transaction/xa/package.html b/jdk/src/java.sql/share/classes/javax/transaction/xa/package.html index daa9e6807ca..0d74a973014 100644 --- a/jdk/src/java.sql/share/classes/javax/transaction/xa/package.html +++ b/jdk/src/java.sql/share/classes/javax/transaction/xa/package.html @@ -35,7 +35,7 @@ manager to enlist and delist resource objects (supplied by the resource manager driver) in JTA transactions. The driver vendor for a specific resource manager provides the implementation of this API. -

    + @since 1.4 diff --git a/jdk/src/java.transaction/share/classes/javax/transaction/package.html b/jdk/src/java.transaction/share/classes/javax/transaction/package.html index 7f71b1791c8..77591c037c9 100644 --- a/jdk/src/java.transaction/share/classes/javax/transaction/package.html +++ b/jdk/src/java.transaction/share/classes/javax/transaction/package.html @@ -30,7 +30,7 @@ questions. Contains three exceptions thrown by the ORB machinery during unmarshalling. -

    + @since 1.3 diff --git a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AttachPermission.java b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AttachPermission.java index 51e198bc3cf..0f573e8dff4 100644 --- a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AttachPermission.java +++ b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AttachPermission.java @@ -31,7 +31,7 @@ package com.sun.tools.attach; * VirtualMachine#attach VirtalMachine.attach} to attach to a target virtual * machine. * This permission is also checked when an {@link - * com.sun.tools.attach.spi.AttachProvider AttachProvider} is created.

    + * com.sun.tools.attach.spi.AttachProvider AttachProvider} is created. * *

    An AttachPermission object contains a name (also referred * to as a "target name") but no actions list; you either have the @@ -39,7 +39,7 @@ package com.sun.tools.attach; * The following table provides a summary description of what the * permission allows, and discusses the risks of granting code the * permission. - *

    + * * * diff --git a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpExchange.java b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpExchange.java index 757f067451b..0cf3623cf3d 100644 --- a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpExchange.java +++ b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpExchange.java @@ -173,12 +173,12 @@ public abstract class HttpExchange { *

    * This method must be called prior to calling {@link #getResponseBody()}. * @param rCode the response code to send - * @param responseLength if > 0, specifies a fixed response body length - * and that exact number of bytes must be written + * @param responseLength if {@literal > 0}, specifies a fixed response + * body length and that exact number of bytes must be written * to the stream acquired from getResponseBody(), or else * if equal to 0, then chunked encoding is used, * and an arbitrary number of bytes may be written. - * if <= -1, then no response body length is specified and + * if {@literal <= -1}, then no response body length is specified and * no response body may be written. * @see HttpExchange#getResponseBody() */ diff --git a/jdk/src/jdk.jconsole/share/classes/com/sun/tools/jconsole/JConsoleContext.java b/jdk/src/jdk.jconsole/share/classes/com/sun/tools/jconsole/JConsoleContext.java index 4eda258af17..fd941b87fea 100644 --- a/jdk/src/jdk.jconsole/share/classes/com/sun/tools/jconsole/JConsoleContext.java +++ b/jdk/src/jdk.jconsole/share/classes/com/sun/tools/jconsole/JConsoleContext.java @@ -39,7 +39,6 @@ import javax.swing.event.SwingPropertyChangeSupport; * {@link ConnectionState#DISCONNECTED DISCONNECTED}. * The {@code JConsoleContext} instance will be the source for * any generated events. - *

    * * @since 1.6 */ From f41f1b4c7a660b7751349e11c3cde80b5ccae217 Mon Sep 17 00:00:00 2001 From: Alexander Stepanov Date: Tue, 26 May 2015 18:32:10 +0400 Subject: [PATCH 50/82] 8040147: minor cleanup for docs Minor cleanup for docs Reviewed-by: lancea --- .../classes/org/omg/DynamicAny/package.html | 123 +++++++++--------- 1 file changed, 61 insertions(+), 62 deletions(-) diff --git a/corba/src/java.corba/share/classes/org/omg/DynamicAny/package.html b/corba/src/java.corba/share/classes/org/omg/DynamicAny/package.html index 287f8fdc819..1650112c789 100644 --- a/corba/src/java.corba/share/classes/org/omg/DynamicAny/package.html +++ b/corba/src/java.corba/share/classes/org/omg/DynamicAny/package.html @@ -25,7 +25,7 @@ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA or visit www.oracle.com if you need additional information or have any questions. - + --> @@ -40,97 +40,97 @@ for the type of the any (code generated for the type by an IDL comp been compiled with the object implementation). As a result, the object receiving the any does not have a portable method of using it. -

    DynAnys enable traversal of the data value associated with an -any at runtime, and extraction of the primitive constituents of the data value. -This is especially helpful for writing powerful generic servers (bridges, event channels -supporting filtering). Similarly, this facility enables the construction of an -any at runtime, without having static knowledge of its type. This is especially +

    DynAnys enable traversal of the data value associated with an +any at runtime, and extraction of the primitive constituents of the data value. +This is especially helpful for writing powerful generic servers (bridges, event channels +supporting filtering). Similarly, this facility enables the construction of an +any at runtime, without having static knowledge of its type. This is especially helpful for writing generic clients (bridges, browsers, debuggers, user interface tools). -

    Any values can be dynamically interpreted (traversed) and constructed through -DynAny objects. A DynAny object is associated with a data -value which corresponds to a copy of the value inserted into an Any. A +

    Any values can be dynamically interpreted (traversed) and constructed through +DynAny objects. A DynAny object is associated with a data +value which corresponds to a copy of the value inserted into an Any. A DynAny object may be viewed as an ordered collection of component -DynAnys. For DynAnys representing a basic type, such as long, -or a type without components, such as an empty exception, the ordered collection of -components is empty. +DynAnys. For DynAnys representing a basic type, such as long, +or a type without components, such as an empty exception, the ordered collection of +components is empty. -

    Each DynAny object maintains the notion of a current position into its collection -of component DynAnys. The current position is identified by an index value that runs -from 0 to n-1, where n is the number of components. The special index value -1 +

    Each DynAny object maintains the notion of a current position into its collection +of component DynAnys. The current position is identified by an index value that runs +from 0 to n-1, where n is the number of components. The special index value -1 indicates a current position that points nowhere. For values that cannot have a current position (such as an empty exception), the index value is fixed at -1. - If a DynAny is initialized with a value that has components, the index is + If a DynAny is initialized with a value that has components, the index is initialized to 0. - After creation of an uninitialized DynAny (that is, a DynAny that + After creation of an uninitialized DynAny (that is, a DynAny that has no value but a TypeCode that permits components), the current position depends on the type of value represented by - the DynAny. (The current position is set to 0 or -1, depending on whether the + the DynAny. (The current position is set to 0 or -1, depending on whether the new DynAny gets default values for its components.) - - -

    The iteration operations rewind, seek, and next + + +

    The iteration operations rewind, seek, and next can be used to change the current position - and the current_component operation returns the component at the current + and the current_component operation returns the component at the current position. - The component_count operation returns the number of components of a + The component_count operation returns the number of components of a DynAny. - Collectively, these operations enable iteration over the components of a + Collectively, these operations enable iteration over the components of a DynAny, for example, to (recursively) examine its contents. -

    A constructed DynAny object is a DynAny object associated with +

    A constructed DynAny object is a DynAny object associated with a constructed type. - There is a different interface, inheriting from the DynAny interface, + There is a different interface, inheriting from the DynAny interface, associated with each kind of constructed type in IDL (fixed, enum, struct, sequence, union, array, - exception, and value type). A constructed DynAny object exports operations + exception, and value type). A constructed DynAny object exports operations that enable the creation of new DynAny objects, each of them associated with a component of the constructed data value. - As an example, a DynStruct is associated with a struct value. This + As an example, a DynStruct is associated with a struct value. This means that the DynStruct may be seen as owning an ordered collection of components, one for each structure member. - The DynStruct object exports operations that enable the creation of new + The DynStruct object exports operations that enable the creation of new DynAny objects, each of them associated with a member of the struct. - - -

    If a DynAny object has been obtained from another (constructed) + + +

    If a DynAny object has been obtained from another (constructed) DynAny object, - such as a DynAny representing a structure member that was created from a + such as a DynAny representing a structure member that was created from a DynStruct, the member DynAny is logically contained in the DynStruct. - Calling an insert or get operation leaves the current position + Calling an insert or get operation leaves the current position unchanged. - Destroying a top-level DynAny object (one that was not obtained as a component + Destroying a top-level DynAny object (one that was not obtained as a component of another DynAny) also destroys any component DynAny objects obtained from it. Destroying a non-top level DynAny object does nothing. - Invoking operations on a destroyed top-level DynAny or any of its descendants + Invoking operations on a destroyed top-level DynAny or any of its descendants raises OBJECT_NOT_EXIST. - If the programmer wants to destroy a DynAny object but still wants to + If the programmer wants to destroy a DynAny object but still wants to manipulate some component - of the data value associated with it, then he or she should first create a + of the data value associated with it, then he or she should first create a DynAny for the component and, after that, make a copy of the created DynAny object. - - -

    The behavior of DynAny objects has been defined in order to enable efficient + + +

    The behavior of DynAny objects has been defined in order to enable efficient implementations - in terms of allocated memory space and speed of access. DynAny objects are +in terms of allocated memory space and speed of access. DynAny objects are intended to be used - for traversing values extracted from anys or constructing values of +for traversing values extracted from anys or constructing values of anys at runtime. - Their use for other purposes is not recommended. - - - +Their use for other purposes is not recommended. + + +

    Handling DynAny objects

    - -

    Insert and get operations are necessary to handle basic + +

    Insert and get operations are necessary to handle basic DynAny objects but are also helpful to handle constructed DynAny objects. Inserting a basic data type value into a constructed DynAny object @@ -145,9 +145,8 @@ equivalent to the TypeCode contained in the DynAny or, if the DynAny has components, is equivalent to the TypeCode of the DynAny at the current position. - +

    Basic operations include: -

    • insert_boolean, get_boolean
    • insert_char, get_char @@ -181,28 +180,28 @@ equivalent to
    • get_boxed_value
    • get_boxed_value_as_dyn_any
    - - -

    DynAny and DynAnyFactory objects are intended to be local to + + +

    DynAny and DynAnyFactory objects are intended to be local to the process in which they are - created and used. This means that references to DynAny and + created and used. This means that references to DynAny and DynAnyFactory objects cannot be exported to other processes, or externalized with ORB.object_to_string(). - If any attempt is made to do so, the offending operation will raise a MARSHAL system + If any attempt is made to do so, the offending operation will raise a MARSHAL system exception. - Since their interfaces are specified in IDL, DynAny objects export operations + Since their interfaces are specified in IDL, DynAny objects export operations defined in the standard - org.omg.CORBA.Object interface. However, any attempt to invoke operations + org.omg.CORBA.Object interface. However, any attempt to invoke operations exported through the Object interface may raise the standard NO_IMPLEMENT exception. - An attempt to use a DynAny object with the DII may raise the NO_IMPLEMENT + An attempt to use a DynAny object with the DII may raise the NO_IMPLEMENT exception.

    Package Specification

    -

    For a precise list of supported sections of official specifications with which -the Java[tm] Platform, Standard Edition 6 ORB complies, see Official Specifications for CORBA +

    For a precise list of supported sections of official specifications with which +the Java[tm] Platform, Standard Edition 6 ORB complies, see Official Specifications for CORBA support in Java[tm] SE 6. @since 1.4 From 91b74f4fdc8a578bb41fdc08531f0d407586d797 Mon Sep 17 00:00:00 2001 From: Artem Smotrakov Date: Tue, 26 May 2015 18:42:08 +0300 Subject: [PATCH 51/82] 8078823: javax/net/ssl/ciphersuites/DisabledAlgorithms.java fails intermittently Reviewed-by: xuelei --- .../net/ssl/ciphersuites/DisabledAlgorithms.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/jdk/test/javax/net/ssl/ciphersuites/DisabledAlgorithms.java b/jdk/test/javax/net/ssl/ciphersuites/DisabledAlgorithms.java index 97cedaeaa59..f1fd67d9b38 100644 --- a/jdk/test/javax/net/ssl/ciphersuites/DisabledAlgorithms.java +++ b/jdk/test/javax/net/ssl/ciphersuites/DisabledAlgorithms.java @@ -103,6 +103,8 @@ public class DisabledAlgorithms { default: throw new RuntimeException("Wrong parameter: " + args[0]); } + + System.out.println("Test passed"); } /* @@ -127,7 +129,6 @@ public class DisabledAlgorithms { } } - server.stop(); while (server.isRunning()) { sleep(); } @@ -223,11 +224,19 @@ public class DisabledAlgorithms { } catch (SSLHandshakeException e) { System.out.println("Server: run: " + e); sslError = true; + stopped = true; } catch (IOException e) { if (!stopped) { - System.out.println("Server: run: " + e); + System.out.println("Server: run: unexpected exception: " + + e); e.printStackTrace(); otherError = true; + stopped = true; + } else { + System.out.println("Server: run: " + e); + System.out.println("The exception above occurred " + + "because socket was closed, " + + "please ignore it"); } } } @@ -260,6 +269,7 @@ public class DisabledAlgorithms { stopped = true; if (!ssocket.isClosed()) { try { + System.out.println("Server: close socket"); ssocket.close(); } catch (IOException e) { System.out.println("Server: close: " + e); From 92bfe45d6a39525817144ad6e875d60033b43649 Mon Sep 17 00:00:00 2001 From: Xueming Shen Date: Tue, 26 May 2015 12:34:51 -0700 Subject: [PATCH 52/82] 8060161: re-examine sun/nio/cs/Test4200310.sh, test is invalid for modular image To remove the invalid test case Reviewed-by: alanb --- jdk/test/sun/nio/cs/Test4200310.sh | 41 ------------------------------ 1 file changed, 41 deletions(-) delete mode 100644 jdk/test/sun/nio/cs/Test4200310.sh diff --git a/jdk/test/sun/nio/cs/Test4200310.sh b/jdk/test/sun/nio/cs/Test4200310.sh deleted file mode 100644 index ff9a45f5deb..00000000000 --- a/jdk/test/sun/nio/cs/Test4200310.sh +++ /dev/null @@ -1,41 +0,0 @@ -# -# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# -# @test -# @bug 4200310 -# @summary make sure class files are not duplicated between rt.jar, -# charsets.jar, and localedata.jar -# @author Norbert Lindenberg -# @run shell Test4200310.sh - -2>&1 $TESTJAVA/bin/jar -tf "$TESTJAVA/jre/lib/rt.jar" > class-list -2>&1 $TESTJAVA/bin/jar -tf "$TESTJAVA/jre/lib/charsets.jar" >> class-list -2>&1 $TESTJAVA/bin/jar -tf "$TESTJAVA/jre/lib/ext/localedata.jar" >> class-list -duplicates=`grep '\.class$' class-list | sort | uniq -d` - -rm -f class-list -if [ "$duplicates" != "" ]; then - echo FAILED: $duplicates are duplicated between rt.jar, charsets.jar, and localedata.jar - exit 1 -fi - -exit 0 From 385f5d800aaf36a1c8d9a1c9dfee2648f3ff515e Mon Sep 17 00:00:00 2001 From: Srikanth Adayapalam Date: Wed, 27 May 2015 11:27:42 +0530 Subject: [PATCH 53/82] 8080726: Redundant error message on private abstract interface method with body Reviewed-by: mcimadamore --- .../classes/com/sun/tools/javac/code/Types.java | 2 +- .../classes/com/sun/tools/javac/comp/Attr.java | 2 +- .../javac/defaultMethods/private/Private10.java | 16 ++++++++++++++++ .../javac/defaultMethods/private/Private10.out | 3 +++ 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 langtools/test/tools/javac/defaultMethods/private/Private10.java create mode 100644 langtools/test/tools/javac/defaultMethods/private/Private10.out diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java index f2c141f948f..cf0a7aaa38c 100644 --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java @@ -2749,7 +2749,7 @@ public class Types { Scope s = c.members(); for (Symbol sym : s.getSymbols(NON_RECURSIVE)) { if (sym.kind == MTH && - (sym.flags() & (ABSTRACT|IPROXY|DEFAULT)) == ABSTRACT) { + (sym.flags() & (ABSTRACT|IPROXY|DEFAULT|PRIVATE)) == ABSTRACT) { MethodSymbol absmeth = (MethodSymbol)sym; MethodSymbol implmeth = absmeth.implementation(impl, this, true); if (implmeth == null || implmeth == absmeth) { diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java index 1d312cf78f8..9c7336af396 100644 --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java @@ -985,7 +985,7 @@ public class Attr extends JCTree.Visitor { if (isDefaultMethod || (tree.sym.flags() & (ABSTRACT | NATIVE)) == 0 && !relax) log.error(tree.pos(), "missing.meth.body.or.decl.abstract"); - } else if ((tree.sym.flags() & ABSTRACT) != 0 && !isDefaultMethod) { + } else if ((tree.sym.flags() & (ABSTRACT|DEFAULT|PRIVATE)) == ABSTRACT) { if ((owner.flags() & INTERFACE) != 0) { log.error(tree.body.pos(), "intf.meth.cant.have.body"); } else { diff --git a/langtools/test/tools/javac/defaultMethods/private/Private10.java b/langtools/test/tools/javac/defaultMethods/private/Private10.java new file mode 100644 index 00000000000..2352671101d --- /dev/null +++ b/langtools/test/tools/javac/defaultMethods/private/Private10.java @@ -0,0 +1,16 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8080726 + * @summary Redundant error message on private abstract interface method with body. + * @compile/fail/ref=Private10.out -XDrawDiagnostics Private10.java + */ + + +public class Private10 { + interface I { + private abstract void foo() {} + } + class C { + private abstract void foo() {} + } +} diff --git a/langtools/test/tools/javac/defaultMethods/private/Private10.out b/langtools/test/tools/javac/defaultMethods/private/Private10.out new file mode 100644 index 00000000000..764d438532e --- /dev/null +++ b/langtools/test/tools/javac/defaultMethods/private/Private10.out @@ -0,0 +1,3 @@ +Private10.java:11:31: compiler.err.illegal.combination.of.modifiers: abstract, private +Private10.java:14:31: compiler.err.illegal.combination.of.modifiers: abstract, private +2 errors From b05ced98a1db5d466de192d42d1b0a878b469e9e Mon Sep 17 00:00:00 2001 From: Athijegannathan Sundararajan Date: Wed, 27 May 2015 13:16:50 +0530 Subject: [PATCH 54/82] 8007456: Nashorn test framework @argument does not handle quoted strings Reviewed-by: hannesw, lagergren --- .../internal/runtime/ScriptingFunctions.java | 2 +- nashorn/test/script/basic/JDK-8007456.js | 35 ++++++ .../test/script/basic/JDK-8007456.js.EXPECTED | 3 + .../internal/test/framework/TestFinder.java | 116 +++++++++--------- 4 files changed, 98 insertions(+), 58 deletions(-) create mode 100644 nashorn/test/script/basic/JDK-8007456.js create mode 100644 nashorn/test/script/basic/JDK-8007456.js.EXPECTED diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptingFunctions.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptingFunctions.java index d85e5712c34..7abfc2d746b 100644 --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptingFunctions.java +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptingFunctions.java @@ -245,7 +245,7 @@ public final class ScriptingFunctions { * constitute the command line. * @throws IOException in case {@link StreamTokenizer#nextToken()} raises it. */ - private static List tokenizeCommandLine(final String execString) throws IOException { + public static List tokenizeCommandLine(final String execString) throws IOException { final StreamTokenizer tokenizer = new StreamTokenizer(new StringReader(execString)); tokenizer.resetSyntax(); tokenizer.wordChars(0, 255); diff --git a/nashorn/test/script/basic/JDK-8007456.js b/nashorn/test/script/basic/JDK-8007456.js new file mode 100644 index 00000000000..2d37de4a15d --- /dev/null +++ b/nashorn/test/script/basic/JDK-8007456.js @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * JDK-8007456: Nashorn test framework argument does not handle quoted strings + * + * @test + * @argument "hello world" + * @argument "This has spaces" + * @run + */ + +print(arguments.length); +print(arguments[0]); +print(arguments[1]); diff --git a/nashorn/test/script/basic/JDK-8007456.js.EXPECTED b/nashorn/test/script/basic/JDK-8007456.js.EXPECTED new file mode 100644 index 00000000000..bc56f76e3e9 --- /dev/null +++ b/nashorn/test/script/basic/JDK-8007456.js.EXPECTED @@ -0,0 +1,3 @@ +2 +hello world +This has spaces diff --git a/nashorn/test/src/jdk/nashorn/internal/test/framework/TestFinder.java b/nashorn/test/src/jdk/nashorn/internal/test/framework/TestFinder.java index 3f4252b0c04..fefb9e72bcd 100644 --- a/nashorn/test/src/jdk/nashorn/internal/test/framework/TestFinder.java +++ b/nashorn/test/src/jdk/nashorn/internal/test/framework/TestFinder.java @@ -22,7 +22,6 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ - package jdk.nashorn.internal.test.framework; import static jdk.nashorn.internal.test.framework.TestConfig.OPTIONS_CHECK_COMPILE_MSG; @@ -61,14 +60,15 @@ import java.util.Collections; import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Scanner; import java.util.Set; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; +import jdk.nashorn.internal.runtime.ScriptingFunctions; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; @@ -78,28 +78,33 @@ import org.xml.sax.InputSource; */ @SuppressWarnings("javadoc") public final class TestFinder { - private TestFinder() {} - interface TestFactory { - // 'test' instance type is decided by the client. - T createTest(final String framework, final File testFile, final List engineOptions, final Map testOptions, final List arguments); - // place to log messages from TestFinder - void log(String mg); + private TestFinder() { } + interface TestFactory { + + // 'test' instance type is decided by the client. + + T createTest(final String framework, final File testFile, final List engineOptions, final Map testOptions, final List arguments); + + // place to log messages from TestFinder + + void log(String mg); + } // finds all tests from configuration and calls TestFactory to create 'test' instance for each script test found static void findAllTests(final List tests, final Set orphans, final TestFactory testFactory) throws Exception { final String framework = System.getProperty(TEST_JS_FRAMEWORK); final String testList = System.getProperty(TEST_JS_LIST); final String failedTestFileName = System.getProperty(TEST_FAILED_LIST_FILE); - if(failedTestFileName != null) { + if (failedTestFileName != null) { final File failedTestFile = new File(failedTestFileName); - if(failedTestFile.exists() && failedTestFile.length() > 0L) { - try(final BufferedReader r = new BufferedReader(new FileReader(failedTestFile))) { - for(;;) { + if (failedTestFile.exists() && failedTestFile.length() > 0L) { + try (final BufferedReader r = new BufferedReader(new FileReader(failedTestFile))) { + for (;;) { final String testFileName = r.readLine(); - if(testFileName == null) { + if (testFileName == null) { break; } handleOneTest(framework, new File(testFileName).toPath(), tests, orphans, testFactory); @@ -151,7 +156,7 @@ public final class TestFinder { final Exception[] exceptions = new Exception[1]; final List excludedActualTests = new ArrayList<>(); - if (! dir.toFile().isDirectory()) { + if (!dir.toFile().isDirectory()) { factory.log("WARNING: " + dir + " not found or not a directory"); } @@ -219,27 +224,28 @@ public final class TestFinder { boolean explicitOptimistic = false; - try (Scanner scanner = new Scanner(testFile)) { - while (scanner.hasNext()) { - // TODO: Scan for /ref=file qualifiers, etc, to determine run - // behavior - String token = scanner.next(); - if (token.startsWith("/*")) { - inComment = true; - } else if (token.endsWith(("*/"))) { - inComment = false; - } else if (!inComment) { - continue; - } + String allContent = new String(Files.readAllBytes(testFile)); + Iterator scanner = ScriptingFunctions.tokenizeCommandLine(allContent).iterator(); + while (scanner.hasNext()) { + // TODO: Scan for /ref=file qualifiers, etc, to determine run + // behavior + String token = scanner.next(); + if (token.startsWith("/*")) { + inComment = true; + } else if (token.endsWith(("*/"))) { + inComment = false; + } else if (!inComment) { + continue; + } - // remove whitespace and trailing semicolons, if any - // (trailing semicolons are found in some sputnik tests) - token = token.trim(); - final int semicolon = token.indexOf(';'); - if (semicolon > 0) { - token = token.substring(0, semicolon); - } - switch (token) { + // remove whitespace and trailing semicolons, if any + // (trailing semicolons are found in some sputnik tests) + token = token.trim(); + final int semicolon = token.indexOf(';'); + if (semicolon > 0) { + token = token.substring(0, semicolon); + } + switch (token) { case "@test": isTest = true; break; @@ -308,24 +314,21 @@ public final class TestFinder { break; default: break; - } + } - // negative tests are expected to fail at runtime only - // for those tests that are expected to fail at compile time, - // add @test/compile-error - if (token.equals("@negative") || token.equals("@strict_mode_negative")) { - shouldRun = true; - runFailure = true; - } + // negative tests are expected to fail at runtime only + // for those tests that are expected to fail at compile time, + // add @test/compile-error + if (token.equals("@negative") || token.equals("@strict_mode_negative")) { + shouldRun = true; + runFailure = true; + } - if (token.equals("@strict_mode") || token.equals("@strict_mode_negative") || token.equals("@onlyStrict") || token.equals("@noStrict")) { - if (!strictModeEnabled()) { - return; - } + if (token.equals("@strict_mode") || token.equals("@strict_mode_negative") || token.equals("@onlyStrict") || token.equals("@noStrict")) { + if (!strictModeEnabled()) { + return; } } - } catch (final Exception ignored) { - return; } if (isTest) { @@ -369,8 +372,8 @@ public final class TestFinder { private static final boolean OPTIMISTIC_OVERRIDE = false; /** - * Check if there is an optimistic override, that disables the default - * false optimistic types and sets them to true, for testing purposes + * Check if there is an optimistic override, that disables the default false + * optimistic types and sets them to true, for testing purposes * * @return true if optimistic type override has been set by test suite */ @@ -379,10 +382,9 @@ public final class TestFinder { } /** - * Add an optimistic-types=true option to an argument list if this - * is set to override the default false. Add an optimistic-types=true - * options to an argument list if this is set to override the default - * true + * Add an optimistic-types=true option to an argument list if this is set to + * override the default false. Add an optimistic-types=true options to an + * argument list if this is set to override the default true * * @args new argument list array */ @@ -396,8 +398,8 @@ public final class TestFinder { } /** - * Add an optimistic-types=true option to an argument list if this - * is set to override the default false + * Add an optimistic-types=true option to an argument list if this is set to + * override the default false * * @args argument list */ @@ -438,7 +440,7 @@ public final class TestFinder { private static void loadExcludesFile(final String testExcludesFile, final Set testExcludeSet) throws XPathExpressionException { final XPath xpath = XPathFactory.newInstance().newXPath(); - final NodeList testIds = (NodeList)xpath.evaluate("/excludeList/test/@id", new InputSource(testExcludesFile), XPathConstants.NODESET); + final NodeList testIds = (NodeList) xpath.evaluate("/excludeList/test/@id", new InputSource(testExcludesFile), XPathConstants.NODESET); for (int i = testIds.getLength() - 1; i >= 0; i--) { testExcludeSet.add(testIds.item(i).getNodeValue()); } From 6e24cffe34dbeb71a46773e81572f4b8e64e050a Mon Sep 17 00:00:00 2001 From: Attila Szegedi Date: Wed, 27 May 2015 14:37:11 +0300 Subject: [PATCH 55/82] 8081204: ListAdapter throws NPE when adding/removing elements outside of JS context Reviewed-by: lagergren, sundar --- .../nashorn/internal/runtime/ListAdapter.java | 57 +++++----- .../runtime/resources/Messages.properties | 2 +- ...AdapterOutsideOfJavaScriptContextTest.java | 102 ++++++++++++++++++ 3 files changed, 127 insertions(+), 34 deletions(-) create mode 100644 nashorn/test/src/jdk/nashorn/internal/runtime/test/AddAndRemoveOnListAdapterOutsideOfJavaScriptContextTest.java diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ListAdapter.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ListAdapter.java index 3ae3855b24c..175a1c4d90a 100644 --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ListAdapter.java +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ListAdapter.java @@ -36,6 +36,7 @@ import java.util.RandomAccess; import java.util.concurrent.Callable; import jdk.nashorn.api.scripting.JSObject; import jdk.nashorn.api.scripting.ScriptObjectMirror; +import jdk.nashorn.internal.objects.Global; import jdk.nashorn.internal.runtime.linker.Bootstrap; /** @@ -55,53 +56,43 @@ public final class ListAdapter extends AbstractList implements RandomAcc // Invoker creator for methods that add to the start or end of the list: PUSH and UNSHIFT. Takes fn, this, and value, returns void. private static final Callable ADD_INVOKER_CREATOR = invokerCreator(void.class, Object.class, JSObject.class, Object.class); - // PUSH adds to the end of the list + // PUSH adds to the start of the list private static final Object PUSH = new Object(); - private static MethodHandle getPushInvoker() { - return getDynamicInvoker(PUSH, ADD_INVOKER_CREATOR); - } - - // UNSHIFT adds to the start of the list + // UNSHIFT adds to the end of the list private static final Object UNSHIFT = new Object(); - private static MethodHandle getUnshiftInvoker() { - return getDynamicInvoker(UNSHIFT, ADD_INVOKER_CREATOR); - } // Invoker creator for methods that remove from the tail or head of the list: POP and SHIFT. Takes fn, this, returns Object. private static final Callable REMOVE_INVOKER_CREATOR = invokerCreator(Object.class, Object.class, JSObject.class); - // POP removes from the to the end of the list + // POP removes from the start of the list private static final Object POP = new Object(); - private static MethodHandle getPopInvoker() { - return getDynamicInvoker(POP, REMOVE_INVOKER_CREATOR); - } - - // SHIFT removes from the to the start of the list + // SHIFT removes from the end of the list private static final Object SHIFT = new Object(); - private static MethodHandle getShiftInvoker() { - return getDynamicInvoker(SHIFT, REMOVE_INVOKER_CREATOR); - } // SPLICE can be used to add a value in the middle of the list. private static final Object SPLICE_ADD = new Object(); private static final Callable SPLICE_ADD_INVOKER_CREATOR = invokerCreator(void.class, Object.class, JSObject.class, int.class, int.class, Object.class); - private static MethodHandle getSpliceAddInvoker() { - return getDynamicInvoker(SPLICE_ADD, SPLICE_ADD_INVOKER_CREATOR); - } // SPLICE can also be used to remove values from the middle of the list. private static final Object SPLICE_REMOVE = new Object(); private static final Callable SPLICE_REMOVE_INVOKER_CREATOR = invokerCreator(void.class, Object.class, JSObject.class, int.class, int.class); - private static MethodHandle getSpliceRemoveInvoker() { - return getDynamicInvoker(SPLICE_REMOVE, SPLICE_REMOVE_INVOKER_CREATOR); - } /** wrapped object */ - protected final JSObject obj; + private final JSObject obj; + private final Global global; // allow subclasses only in this package ListAdapter(final JSObject obj) { this.obj = obj; + this.global = getGlobalNonNull(); + } + + private static Global getGlobalNonNull() { + final Global global = Context.getGlobal(); + if (global != null) { + return global; + } + throw new IllegalStateException(ECMAErrors.getMessage("list.adapter.null.global")); } /** @@ -166,7 +157,7 @@ public final class ListAdapter extends AbstractList implements RandomAcc @Override public final void addFirst(final Object e) { try { - getUnshiftInvoker().invokeExact(getFunction("unshift"), obj, e); + getDynamicInvoker(UNSHIFT, ADD_INVOKER_CREATOR).invokeExact(getFunction("unshift"), obj, e); } catch(RuntimeException | Error ex) { throw ex; } catch(final Throwable t) { @@ -177,7 +168,7 @@ public final class ListAdapter extends AbstractList implements RandomAcc @Override public final void addLast(final Object e) { try { - getPushInvoker().invokeExact(getFunction("push"), obj, e); + getDynamicInvoker(PUSH, ADD_INVOKER_CREATOR).invokeExact(getFunction("push"), obj, e); } catch(RuntimeException | Error ex) { throw ex; } catch(final Throwable t) { @@ -195,7 +186,7 @@ public final class ListAdapter extends AbstractList implements RandomAcc } else { final int size = size(); if(index < size) { - getSpliceAddInvoker().invokeExact(obj.getMember("splice"), obj, index, 0, e); + getDynamicInvoker(SPLICE_ADD, SPLICE_ADD_INVOKER_CREATOR).invokeExact(obj.getMember("splice"), obj, index, 0, e); } else if(index == size) { addLast(e); } else { @@ -287,7 +278,7 @@ public final class ListAdapter extends AbstractList implements RandomAcc private Object invokeShift() { try { - return getShiftInvoker().invokeExact(getFunction("shift"), obj); + return getDynamicInvoker(SHIFT, REMOVE_INVOKER_CREATOR).invokeExact(getFunction("shift"), obj); } catch(RuntimeException | Error ex) { throw ex; } catch(final Throwable t) { @@ -297,7 +288,7 @@ public final class ListAdapter extends AbstractList implements RandomAcc private Object invokePop() { try { - return getPopInvoker().invokeExact(getFunction("pop"), obj); + return getDynamicInvoker(POP, REMOVE_INVOKER_CREATOR).invokeExact(getFunction("pop"), obj); } catch(RuntimeException | Error ex) { throw ex; } catch(final Throwable t) { @@ -312,7 +303,7 @@ public final class ListAdapter extends AbstractList implements RandomAcc private void invokeSpliceRemove(final int fromIndex, final int count) { try { - getSpliceRemoveInvoker().invokeExact(getFunction("splice"), obj, fromIndex, count); + getDynamicInvoker(SPLICE_REMOVE, SPLICE_REMOVE_INVOKER_CREATOR).invokeExact(getFunction("splice"), obj, fromIndex, count); } catch(RuntimeException | Error ex) { throw ex; } catch(final Throwable t) { @@ -417,7 +408,7 @@ public final class ListAdapter extends AbstractList implements RandomAcc }; } - private static MethodHandle getDynamicInvoker(final Object key, final Callable creator) { - return Context.getGlobal().getDynamicInvoker(key, creator); + private MethodHandle getDynamicInvoker(final Object key, final Callable creator) { + return global.getDynamicInvoker(key, creator); } } diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Messages.properties b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Messages.properties index 125e29d0f06..9bb5dd8db83 100644 --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Messages.properties +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Messages.properties @@ -174,4 +174,4 @@ io.error.cant.write=cannot write "{0}" config.error.no.dest=no destination directory supplied uri.error.bad.uri=Bad URI "{0}" near offset {1} - +list.adapter.null.global=Attempted to create the adapter from outside a JavaScript execution context. diff --git a/nashorn/test/src/jdk/nashorn/internal/runtime/test/AddAndRemoveOnListAdapterOutsideOfJavaScriptContextTest.java b/nashorn/test/src/jdk/nashorn/internal/runtime/test/AddAndRemoveOnListAdapterOutsideOfJavaScriptContextTest.java new file mode 100644 index 00000000000..3115e181ebe --- /dev/null +++ b/nashorn/test/src/jdk/nashorn/internal/runtime/test/AddAndRemoveOnListAdapterOutsideOfJavaScriptContextTest.java @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.nashorn.internal.runtime.test; + +import static org.testng.Assert.assertEquals; + +import java.util.Arrays; +import java.util.Deque; +import java.util.List; +import javax.script.ScriptEngine; +import javax.script.ScriptException; +import jdk.nashorn.api.scripting.NashornScriptEngineFactory; +import org.testng.annotations.Test; + +/** + * @bug 8081204 + * @summary adding and removing elements to a ListAdapter outside of JS context should work. + */ +@SuppressWarnings("javadoc") +public class AddAndRemoveOnListAdapterOutsideOfJavaScriptContextTest { + + @SuppressWarnings("unchecked") + private static T getListAdapter() throws ScriptException { + final ScriptEngine engine = new NashornScriptEngineFactory().getScriptEngine(); + return (T)engine.eval("Java.to([1, 2, 3, 4], 'java.util.List')"); + } + + @Test + public void testInvokePush() throws ScriptException { + final Deque l = getListAdapter(); + l.addLast(5); + assertEquals(l.size(), 5); + assertEquals(l.getLast(), 5); + assertEquals(l.getFirst(), 1); + } + + @Test + public void testPop() throws ScriptException { + final Deque l = getListAdapter(); + assertEquals(l.removeLast(), 4); + assertEquals(l.size(), 3); + assertEquals(l.getLast(), 3); + } + + @Test + public void testUnshift() throws ScriptException { + final Deque l = getListAdapter(); + l.addFirst(0); + assertEquals(l.getFirst(), 0); + assertEquals(l.getLast(), 4); + assertEquals(l.size(), 5); + } + + @Test + public void testShift() throws ScriptException { + final Deque l = getListAdapter(); + l.removeFirst(); + assertEquals(l.getFirst(), 2); + assertEquals(l.getLast(), 4); + assertEquals(l.size(), 3); + } + + @Test + public void testSpliceAdd() throws ScriptException { + final List l = getListAdapter(); + assertEquals(l, Arrays.asList(1, 2, 3, 4)); + l.add(2, "foo"); + assertEquals(l, Arrays.asList(1, 2, "foo", 3, 4)); + } + + + @Test + public void testSpliceRemove() throws ScriptException { + final List l = getListAdapter(); + assertEquals(l, Arrays.asList(1, 2, 3, 4)); + l.remove(2); + assertEquals(l, Arrays.asList(1, 2, 4)); + } +} From 03c24ff25bf677051ee4943e3f4dfdbaaf383940 Mon Sep 17 00:00:00 2001 From: Mark Sheppard Date: Wed, 27 May 2015 13:04:32 +0100 Subject: [PATCH 56/82] 8041677: java/net/MulticastSocket/TestInterfaces failed on Oracle VM Virtual Ethernet Adapter Ignore Teredo interface in test Reviewed-by: alanb, chegar --- jdk/test/java/net/MulticastSocket/TestInterfaces.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/jdk/test/java/net/MulticastSocket/TestInterfaces.java b/jdk/test/java/net/MulticastSocket/TestInterfaces.java index 958e77eb0b4..b9b641d40cc 100644 --- a/jdk/test/java/net/MulticastSocket/TestInterfaces.java +++ b/jdk/test/java/net/MulticastSocket/TestInterfaces.java @@ -46,6 +46,11 @@ public class TestInterfaces { while (nifs.hasMoreElements()) { NetworkInterface ni = (NetworkInterface)nifs.nextElement(); + // JDK-8022963, Skip (Windows) Teredo Tunneling Pseudo-Interface + String dName = ni.getDisplayName(); + if (isWindows && dName != null && dName.contains("Teredo")) + continue; + /* * Test MulticastSocket.getInterface */ @@ -92,10 +97,6 @@ public class TestInterfaces { continue; } - // JDK-8022963, Skip (Windows) Teredo Tunneling Pseudo-Interface - String dName = ni.getDisplayName(); - if (isWindows && dName != null && dName.contains("Teredo")) - continue; NetworkInterface curr = soc.getNetworkInterface(); if (!curr.equals(ni)) { From 48a0b96187855561c0782966b3ccaec8afb5a8d4 Mon Sep 17 00:00:00 2001 From: Mark Sheppard Date: Wed, 27 May 2015 13:23:40 +0100 Subject: [PATCH 57/82] 8077377: java/net/MulticastSocket/SetOutgoingIf.java fails intermittently with NullPointerException Ignore "stray" packets received from non test interface Reviewed-by: alanb, chegar --- jdk/test/java/net/MulticastSocket/SetOutgoingIf.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/jdk/test/java/net/MulticastSocket/SetOutgoingIf.java b/jdk/test/java/net/MulticastSocket/SetOutgoingIf.java index cfcd3c09702..1acfa16ef38 100644 --- a/jdk/test/java/net/MulticastSocket/SetOutgoingIf.java +++ b/jdk/test/java/net/MulticastSocket/SetOutgoingIf.java @@ -156,12 +156,13 @@ public class SetOutgoingIf { // now check which network interface this packet comes from NetworkInterface from = NetworkInterface.getByInetAddress(packet.getAddress()); NetworkInterface shouldbe = nic; - if (!from.equals(shouldbe)) { - System.out.println("Packets on group " + if (from != null) { + if (!from.equals(shouldbe)) { + System.out.println("Packets on group " + group + " should come from " + shouldbe.getName() + ", but came from " + from.getName()); - //throw new RuntimeException("Test failed."); + } } mcastsock.leaveGroup(new InetSocketAddress(group, PORT), nic); From d321ca95232765e4bd8e90610a09452553890981 Mon Sep 17 00:00:00 2001 From: Athijegannathan Sundararajan Date: Wed, 27 May 2015 22:18:51 +0530 Subject: [PATCH 58/82] 8081156: jjs "nashorn.args" system property is not effective when script arguments are passed Reviewed-by: hannesw, lagergren --- .../internal/runtime/options/Options.java | 8 ++++ nashorn/test/script/basic/JDK-8081156.js | 46 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 nashorn/test/script/basic/JDK-8081156.js diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/options/Options.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/options/Options.java index 374e8f336fe..322da782f4f 100644 --- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/options/Options.java +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/options/Options.java @@ -424,9 +424,17 @@ public final class Options { public void process(final String[] args) { final LinkedList argList = new LinkedList<>(); addSystemProperties(NASHORN_ARGS_PREPEND_PROPERTY, argList); + processArgList(argList); + assert argList.isEmpty(); Collections.addAll(argList, args); + processArgList(argList); + assert argList.isEmpty(); addSystemProperties(NASHORN_ARGS_PROPERTY, argList); + processArgList(argList); + assert argList.isEmpty(); + } + private void processArgList(final LinkedList argList) { while (!argList.isEmpty()) { final String arg = argList.remove(0); Objects.requireNonNull(arg); diff --git a/nashorn/test/script/basic/JDK-8081156.js b/nashorn/test/script/basic/JDK-8081156.js new file mode 100644 index 00000000000..6760824aa29 --- /dev/null +++ b/nashorn/test/script/basic/JDK-8081156.js @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * JDK-8081156: jjs "nashorn.args" system property is not effective when script arguments are passed + * + * @test + * @fork + * @option -Dnashorn.args=-strict + * @argument foo + * @argument bar + * @run + */ + +try { + x = 14; + throw new Error("should have thrown ReferenceError"); +} catch (e) { + if (! (e instanceof ReferenceError)) { + throw e; + } +} + +Assert.assertTrue(arguments.length == 2); +Assert.assertTrue(arguments[0] == "foo"); +Assert.assertTrue(arguments[1] == "bar"); From ba7c5970f9aa833fd933b21ad42cf62c42ea1ebe Mon Sep 17 00:00:00 2001 From: Xueming Shen Date: Wed, 27 May 2015 12:23:35 -0700 Subject: [PATCH 59/82] 8028480: (zipfs) NoSuchFileException on creating a file in ZipFileSystem with CREATE and WRITE 8034773: (zipfs) newOutputstream uses CREATE_NEW when no options specified To open the new steram with appropricate open options Reviewed-by: alanb --- .../classes/jdk/nio/zipfs/ZipFileSystem.java | 17 ++++-- .../share/classes/jdk/nio/zipfs/ZipPath.java | 2 +- jdk/test/jdk/nio/zipfs/ZFSTests.java | 52 +++++++++++++++++-- 3 files changed, 63 insertions(+), 8 deletions(-) diff --git a/jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java b/jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java index 17acf262266..e269216c081 100644 --- a/jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java +++ b/jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java @@ -503,6 +503,7 @@ class ZipFileSystem extends FileSystem { boolean hasCreateNew = false; boolean hasCreate = false; boolean hasAppend = false; + boolean hasTruncate = false; for (OpenOption opt: options) { if (opt == READ) throw new IllegalArgumentException("READ not allowed"); @@ -512,7 +513,11 @@ class ZipFileSystem extends FileSystem { hasCreate = true; if (opt == APPEND) hasAppend = true; + if (opt == TRUNCATE_EXISTING) + hasTruncate = true; } + if (hasAppend && hasTruncate) + throw new IllegalArgumentException("APPEND + TRUNCATE_EXISTING not allowed"); beginRead(); // only need a readlock, the "update()" will try { // try to obtain a writelock when the os is ensureOpen(); // being closed. @@ -564,6 +569,8 @@ class ZipFileSystem extends FileSystem { if (!(option instanceof StandardOpenOption)) throw new IllegalArgumentException(); } + if (options.contains(APPEND) && options.contains(TRUNCATE_EXISTING)) + throw new IllegalArgumentException("APPEND + TRUNCATE_EXISTING not allowed"); } // Returns a Writable/ReadByteChannel for now. Might consdier to use @@ -711,15 +718,19 @@ class ZipFileSystem extends FileSystem { if (forWrite) { checkWritable(); if (e == null) { - if (!options.contains(StandardOpenOption.CREATE_NEW)) - throw new NoSuchFileException(getString(path)); + if (!options.contains(StandardOpenOption.CREATE) && + !options.contains(StandardOpenOption.CREATE_NEW)) { + throw new NoSuchFileException(getString(path)); + } } else { - if (options.contains(StandardOpenOption.CREATE_NEW)) + if (options.contains(StandardOpenOption.CREATE_NEW)) { throw new FileAlreadyExistsException(getString(path)); + } if (e.isDir()) throw new FileAlreadyExistsException("directory <" + getString(path) + "> exists"); } + options = new HashSet<>(options); options.remove(StandardOpenOption.CREATE_NEW); // for tmpfile } else if (e == null || e.isDir()) { throw new NoSuchFileException(getString(path)); diff --git a/jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipPath.java b/jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipPath.java index 6001d0654ed..6e40ab574e0 100644 --- a/jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipPath.java +++ b/jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipPath.java @@ -773,7 +773,7 @@ class ZipPath implements Path { { if (options.length == 0) return zfs.newOutputStream(getResolvedPath(), - CREATE_NEW, WRITE); + CREATE, TRUNCATE_EXISTING, WRITE); return zfs.newOutputStream(getResolvedPath(), options); } diff --git a/jdk/test/jdk/nio/zipfs/ZFSTests.java b/jdk/test/jdk/nio/zipfs/ZFSTests.java index 23617a31ab5..8febcf2730d 100644 --- a/jdk/test/jdk/nio/zipfs/ZFSTests.java +++ b/jdk/test/jdk/nio/zipfs/ZFSTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ */ /* @test - * @bug 7156873 8040059 + * @bug 7156873 8040059 8028480 8034773 * @summary ZipFileSystem regression tests * * @run main ZFSTests @@ -30,15 +30,19 @@ */ +import java.io.OutputStream; import java.net.URI; +import java.nio.ByteBuffer; +import java.nio.channels.*; import java.nio.file.*; -import java.util.Map; -import java.util.HashMap; +import java.nio.file.spi.*; +import java.util.*; public class ZFSTests { public static void main(String[] args) throws Throwable { test7156873(); + testOpenOptions(); } static void test7156873() throws Throwable { @@ -56,4 +60,44 @@ public class ZFSTests { Files.deleteIfExists(dir); } } + + static void testOpenOptions() throws Throwable { + Path path = Paths.get("file.zip"); + try { + URI uri = URI.create("jar:" + path.toUri()); + Map env = new HashMap(); + env.put("create", "true"); + try (FileSystem fs = FileSystems.newFileSystem(uri, env)) { + FileSystemProvider fsp = fs.provider(); + Set options; + Path p = fs.getPath("test.txt"); + // 8028480 + options = EnumSet.of(StandardOpenOption.CREATE, + StandardOpenOption.WRITE, + StandardOpenOption.APPEND); + try (FileChannel ch = fsp.newFileChannel(p, options)) { + ch.write(ByteBuffer.wrap("Hello!".getBytes("ASCII"))); + } + // 8034773 + try (OutputStream os = fsp.newOutputStream(p, new OpenOption[0])) { + os.write("Hello2!".getBytes("ASCII")); + } + if (!"Hello2!".equals(new String( + Files.readAllBytes(fs.getPath("test.txt"))))) { + throw new RuntimeException("failed to open as truncate_existing"); + } + + options = EnumSet.of(StandardOpenOption.CREATE, + StandardOpenOption.APPEND, + StandardOpenOption.TRUNCATE_EXISTING); + try (FileChannel ch = fsp.newFileChannel(p, options)) { + throw new RuntimeException("expected IAE not thrown!"); + } catch (IllegalArgumentException x) { + // expected x.printStackTrace(); + } + } + } finally { + Files.deleteIfExists(path); + } + } } From 7b960a2e592fdc1b70a77a48745aba1237ae758a Mon Sep 17 00:00:00 2001 From: Roger Riggs Date: Wed, 27 May 2015 15:57:10 -0400 Subject: [PATCH 60/82] 8081022: java/time/test/java/time/format/TestZoneTextPrinterParser.java fails by timeout on slow device Reduce number of iterations to 8 instead of 50 Reviewed-by: naoto --- jdk/test/java/time/TEST.properties | 1 + .../java/time/format/TestZoneTextPrinterParser.java | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/jdk/test/java/time/TEST.properties b/jdk/test/java/time/TEST.properties index 909c6193da8..f480a511913 100644 --- a/jdk/test/java/time/TEST.properties +++ b/jdk/test/java/time/TEST.properties @@ -1,3 +1,4 @@ # Threeten test uses TestNG TestNG.dirs = . othervm.dirs = tck/java/time/chrono test/java/time/chrono test/java/time/format +lib.dirs = ../../lib/testlibrary diff --git a/jdk/test/java/time/test/java/time/format/TestZoneTextPrinterParser.java b/jdk/test/java/time/test/java/time/format/TestZoneTextPrinterParser.java index 28ccbfe0516..079af06d9d6 100644 --- a/jdk/test/java/time/test/java/time/format/TestZoneTextPrinterParser.java +++ b/jdk/test/java/time/test/java/time/format/TestZoneTextPrinterParser.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,10 +42,17 @@ import java.util.Locale; import java.util.Random; import java.util.Set; import java.util.TimeZone; +import jdk.testlibrary.RandomFactory; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; +/* + * @test + * @bug 8081022 + * @key randomness + */ + /** * Test ZoneTextPrinterParser */ @@ -59,8 +66,8 @@ public class TestZoneTextPrinterParser extends AbstractTestPrinterParser { } public void test_printText() { - Random r = new Random(); - int N = 50; + Random r = RandomFactory.getRandom(); + int N = 8; Locale[] locales = Locale.getAvailableLocales(); Set zids = ZoneRulesProvider.getAvailableZoneIds(); ZonedDateTime zdt = ZonedDateTime.now(); From ab120497cfbb0f2dc0daf1ccb0960972bbf939c2 Mon Sep 17 00:00:00 2001 From: Mandy Chung Date: Wed, 27 May 2015 13:25:18 -0700 Subject: [PATCH 61/82] 8074432: Move jdeps and javap to jdk.jdeps module Reviewed-by: jjg, alanb, erikj --- langtools/make/CompileInterim.gmk | 6 ++--- langtools/make/build.properties | 4 +-- langtools/make/build.xml | 6 ++--- langtools/make/gensrc/Gensrc-jdk.compiler.gmk | 5 +--- ...ensrc-jdk.dev.gmk => Gensrc-jdk.jdeps.gmk} | 6 ++++- langtools/make/intellij/langtools.iml | 4 +-- langtools/make/intellij/workspace.xml | 12 ++++----- .../netbeans/langtools/nbproject/project.xml | 26 +++++++++---------- .../com/sun/tools/classfile/AccessFlags.java | 0 .../com/sun/tools/classfile/Annotation.java | 0 .../AnnotationDefault_attribute.java | 0 .../com/sun/tools/classfile/Attribute.java | 0 .../tools/classfile/AttributeException.java | 0 .../com/sun/tools/classfile/Attributes.java | 0 .../classfile/BootstrapMethods_attribute.java | 0 .../CharacterRangeTable_attribute.java | 0 .../com/sun/tools/classfile/ClassFile.java | 0 .../com/sun/tools/classfile/ClassReader.java | 0 .../sun/tools/classfile/ClassTranslator.java | 0 .../com/sun/tools/classfile/ClassWriter.java | 0 .../sun/tools/classfile/Code_attribute.java | 0 .../classfile/CompilationID_attribute.java | 0 .../com/sun/tools/classfile/ConstantPool.java | 0 .../classfile/ConstantPoolException.java | 0 .../classfile/ConstantValue_attribute.java | 0 .../sun/tools/classfile/DefaultAttribute.java | 0 .../com/sun/tools/classfile/Dependencies.java | 0 .../com/sun/tools/classfile/Dependency.java | 0 .../tools/classfile/Deprecated_attribute.java | 0 .../com/sun/tools/classfile/Descriptor.java | 0 .../tools/classfile/DescriptorException.java | 0 .../classfile/EnclosingMethod_attribute.java | 0 .../tools/classfile/Exceptions_attribute.java | 0 .../com/sun/tools/classfile/Field.java | 0 .../classfile/InnerClasses_attribute.java | 0 .../com/sun/tools/classfile/Instruction.java | 0 .../classfile/LineNumberTable_attribute.java | 0 .../LocalVariableTable_attribute.java | 0 .../LocalVariableTypeTable_attribute.java | 0 .../com/sun/tools/classfile/Method.java | 0 .../classfile/MethodParameters_attribute.java | 0 .../com/sun/tools/classfile/Opcode.java | 0 .../sun/tools/classfile/ReferenceFinder.java | 0 .../RuntimeAnnotations_attribute.java | 0 ...RuntimeInvisibleAnnotations_attribute.java | 0 ...visibleParameterAnnotations_attribute.java | 0 ...imeInvisibleTypeAnnotations_attribute.java | 0 ...RuntimeParameterAnnotations_attribute.java | 0 .../RuntimeTypeAnnotations_attribute.java | 0 .../RuntimeVisibleAnnotations_attribute.java | 0 ...VisibleParameterAnnotations_attribute.java | 0 ...ntimeVisibleTypeAnnotations_attribute.java | 0 .../com/sun/tools/classfile/Signature.java | 0 .../tools/classfile/Signature_attribute.java | 0 .../SourceDebugExtension_attribute.java | 0 .../tools/classfile/SourceFile_attribute.java | 0 .../tools/classfile/SourceID_attribute.java | 0 .../classfile/StackMapTable_attribute.java | 0 .../tools/classfile/StackMap_attribute.java | 0 .../tools/classfile/Synthetic_attribute.java | 0 .../classes/com/sun/tools/classfile/Type.java | 0 .../sun/tools/classfile/TypeAnnotation.java | 0 .../com/sun/tools/classfile/package-info.java | 0 .../com/sun/tools/javap/AnnotationWriter.java | 0 .../com/sun/tools/javap/AttributeWriter.java | 0 .../com/sun/tools/javap/BasicWriter.java | 0 .../com/sun/tools/javap/ClassWriter.java | 0 .../com/sun/tools/javap/CodeWriter.java | 0 .../com/sun/tools/javap/ConstantWriter.java | 0 .../classes/com/sun/tools/javap/Context.java | 0 .../com/sun/tools/javap/DisassemblerTool.java | 0 .../tools/javap/InstructionDetailWriter.java | 0 .../com/sun/tools/javap/InternalError.java | 0 .../com/sun/tools/javap/JavapFileManager.java | 0 .../com/sun/tools/javap/JavapTask.java | 0 .../tools/javap/LocalVariableTableWriter.java | 0 .../javap/LocalVariableTypeTableWriter.java | 0 .../classes/com/sun/tools/javap/Main.java | 0 .../classes/com/sun/tools/javap/Messages.java | 0 .../classes/com/sun/tools/javap/Options.java | 0 .../com/sun/tools/javap/SourceWriter.java | 0 .../com/sun/tools/javap/StackMapWriter.java | 0 .../com/sun/tools/javap/TryBlockWriter.java | 0 .../sun/tools/javap/TypeAnnotationWriter.java | 0 .../classes/com/sun/tools/javap/overview.html | 0 .../com/sun/tools/javap/package-info.java | 0 .../tools/javap/resources/javap.properties | 0 .../tools/javap/resources/javap_ja.properties | 0 .../javap/resources/javap_zh_CN.properties | 0 .../resources/version.properties-template | 0 .../classes/com/sun/tools/jdeps/Analyzer.java | 0 .../classes/com/sun/tools/jdeps/Archive.java | 0 .../com/sun/tools/jdeps/ClassFileReader.java | 0 .../com/sun/tools/jdeps/JdepsTask.java | 0 .../classes/com/sun/tools/jdeps/Main.java | 0 .../classes/com/sun/tools/jdeps/Module.java | 0 .../com/sun/tools/jdeps/ModulesXmlReader.java | 0 .../sun/tools/jdeps/PlatformClassPath.java | 0 .../classes/com/sun/tools/jdeps/Profile.java | 0 .../tools/jdeps/resources/jdeps.properties | 0 .../tools/jdeps/resources/jdeps_ja.properties | 0 .../jdeps/resources/jdeps_zh_CN.properties | 0 .../jdeps/resources/jdkinternals.properties | 0 .../resources/version.properties-template | 0 .../test/tools/javac/4241573/T4241573.java | 2 +- .../test/tools/javac/7003595/T7003595.java | 2 +- .../CPoolRefClassContainingInlinedCts.java | 2 +- .../CheckACC_STRICTFlagOnclinitTest.java | 2 +- .../7199823/InnerClassCannotBeVerified.java | 2 +- .../8000518/DuplicateConstantPoolEntry.java | 2 +- ...eckACC_STRICTFlagOnPkgAccessClassTest.java | 2 +- .../8009170/RedundantByteCodeInArrayTest.java | 2 +- .../MethodParameters/AnnotationTest.java | 2 +- .../MethodParameters/AnonymousClass.java | 2 +- .../javac/MethodParameters/Constructors.java | 2 +- .../javac/MethodParameters/EnumTest.java | 2 +- .../MethodParameters/InstanceMethods.java | 2 +- .../javac/MethodParameters/LambdaTest.java | 2 +- .../MethodParameters/LocalClassTest.java | 2 +- .../MethodParameters/MemberClassTest.java | 2 +- .../javac/MethodParameters/StaticMethods.java | 2 +- .../MethodParameters/UncommonParamNames.java | 2 +- .../tools/javac/MethodParametersTest.java | 2 +- .../test/tools/javac/NoStringToLower.java | 2 +- ...ationsAreNotCopiedToBridgeMethodsTest.java | 2 +- .../DebugPointerAtBadPositionTest.java | 2 +- .../InlinedFinallyConfuseDebuggersTest.java | 2 +- .../tools/javac/T7053059/DoubleCastTest.java | 2 +- langtools/test/tools/javac/T7093325.java | 2 +- ...rClassAttrMustNotHaveStrictFPFlagTest.java | 2 +- .../T8003967/DetectMutableStaticFields.java | 2 +- ...rNamesAreNotCopiedToAnonymousInitTest.java | 2 +- .../EmptyUTF8ForInnerClassNameTest.java | 2 +- .../javac/T8019486/WrongLNTForLambdaTest.java | 2 +- .../DeadCodeGeneratedForEmptyTryTest.java | 2 +- .../NoDeadCodeGenerationOnTrySmtTest.java | 2 +- .../DontGenerateLVTForGNoneOpTest.java | 2 +- .../annotations/SyntheticParameters.java | 2 +- .../classfile/CombinationsTargetTest1.java | 2 +- .../classfile/CombinationsTargetTest2.java | 2 +- .../classfile/CombinationsTargetTest3.java | 2 +- .../typeAnnotations/classfile/DeadCode.java | 2 +- .../classfile/NewTypeArguments.java | 2 +- .../classfile/NoTargetAnnotations.java | 2 +- .../typeAnnotations/classfile/Scopes.java | 2 +- .../classfile/SyntheticParameters.java | 2 +- .../typeAnnotations/classfile/T8008762.java | 2 +- .../typeAnnotations/classfile/T8008769.java | 2 +- .../typeAnnotations/classfile/T8010015.java | 2 +- .../classfile/TestAnonInnerClasses.java | 2 +- .../classfile/TestNewCastArray.java | 2 +- .../typeAnnotations/classfile/TypeCasts.java | 2 +- .../typeAnnotations/classfile/Wildcards.java | 2 +- .../referenceinfos/ClassExtends.java | 2 +- .../referenceinfos/ClassTypeParam.java | 2 +- .../ConstructorInvocationTypeArgument.java | 2 +- .../referenceinfos/Constructors.java | 2 +- .../referenceinfos/ExceptionParameters.java | 2 +- .../referenceinfos/Fields.java | 2 +- .../referenceinfos/FromSpecification.java | 2 +- .../referenceinfos/Initializers.java | 2 +- .../referenceinfos/Lambda.java | 2 +- .../MethodInvocationTypeArgument.java | 2 +- .../referenceinfos/MethodParameters.java | 2 +- .../referenceinfos/MethodReceivers.java | 2 +- .../referenceinfos/MethodReturns.java | 2 +- .../referenceinfos/MethodThrows.java | 2 +- .../referenceinfos/MethodTypeParam.java | 2 +- .../referenceinfos/MultiCatch.java | 2 +- .../referenceinfos/NestedTypes.java | 2 +- .../referenceinfos/NewObjects.java | 2 +- .../RepeatingTypeAnnotations.java | 2 +- .../referenceinfos/ResourceVariable.java | 2 +- .../referenceinfos/TypeCasts.java | 2 +- .../referenceinfos/TypeTests.java | 2 +- .../InnerClasses/SyntheticClasses.java | 2 +- .../AnnotationDefaultTest.java | 2 +- .../EnclosingMethod/EnclosingMethodTest.java | 2 +- .../LineNumberTable/LineNumberTest.java | 2 +- .../LocalVariableTableTest.java | 2 +- .../LocalVariableTypeTableTest.java | 2 +- .../attributes/Signature/ConstructorTest.java | 2 +- .../attributes/Signature/EnumTest.java | 2 +- .../attributes/Signature/ExceptionTest.java | 2 +- .../attributes/Signature/FieldTest.java | 2 +- .../attributes/Signature/InnerClassTest.java | 2 +- .../Signature/MethodParameterTest.java | 2 +- .../Signature/MethodTypeBoundTest.java | 2 +- .../attributes/Signature/ReturnTypeTest.java | 2 +- .../SourceFile/AnonymousClassTest.java | 2 +- .../attributes/SourceFile/InnerClassTest.java | 2 +- .../attributes/SourceFile/LocalClassTest.java | 2 +- .../attributes/SourceFile/MixTest.java | 2 +- .../SourceFile/NoSourceFileAttribute.java | 2 +- .../SourceFile/SyntheticClassTest.java | 2 +- .../TopLevelClassesOneFileTest.java | 2 +- .../deprecated/DeprecatedPackageTest.java | 2 +- .../attributes/deprecated/DeprecatedTest.java | 2 +- ...InnerAnnotationsInInnerAnnotationTest.java | 2 +- .../InnerAnnotationsInInnerClassTest.java | 2 +- .../InnerAnnotationsInInnerEnumTest.java | 2 +- .../InnerAnnotationsInInnerInterfaceTest.java | 2 +- .../InnerClassesHierarchyTest.java | 2 +- .../InnerClassesInAnonymousClassTest.java | 2 +- .../InnerClassesInInnerAnnotationTest.java | 2 +- .../InnerClassesInInnerClassTest.java | 2 +- .../InnerClassesInInnerEnumTest.java | 2 +- .../InnerClassesInInnerInterfaceTest.java | 2 +- .../InnerClassesInLocalClassTest.java | 2 +- .../innerclasses/InnerClassesIndexTest.java | 2 +- .../innerclasses/InnerClassesTest.java | 2 +- .../InnerEnumInInnerAnnotationTest.java | 2 +- .../InnerEnumInInnerEnumTest.java | 2 +- .../InnerEnumInInnerInterfaceTest.java | 2 +- .../InnerEnumsInInnerClassTest.java | 2 +- .../InnerInterfacesInInnerAnnotationTest.java | 2 +- .../InnerInterfacesInInnerClassTest.java | 2 +- .../InnerInterfacesInInnerEnumTest.java | 2 +- .../InnerInterfacesInInnerInterfaceTest.java | 2 +- .../innerclasses/NoInnerClassesTest.java | 2 +- .../tools/javac/classreader/BadClass.java | 2 +- .../javac/constDebug/ConstDebugTest.java | 2 +- .../javac/defaultMethods/BadClassfile.java | 2 +- ...heckACC_STRICTFlagOnDefaultMethodTest.java | 2 +- .../javac/defaultMethods/TestDefaultBody.java | 2 +- .../TestNoBridgeOnDefaults.java | 2 +- .../super/TestDirectSuperInterfaceInvoke.java | 2 +- .../tools/javac/diags/CheckResourceKeys.java | 2 +- .../_super/NonDirectSuper/NonDirectSuper.java | 2 +- .../test/tools/javac/flow/LVTHarness.java | 2 +- .../javac/generics/bridges/BridgeHarness.java | 2 +- .../jvm/ClassRefDupInConstantPoolTest.java | 2 +- .../test/tools/javac/lambda/ByteCodeTest.java | 2 +- .../javac/lambda/LambdaTestStrictFPFlag.java | 2 +- .../javac/lambda/LocalVariableTable.java | 2 +- .../tools/javac/lambda/TestInvokeDynamic.java | 2 +- .../lambda/bytecode/TestLambdaBytecode.java | 2 +- ...estNonSerializableLambdaNameStability.java | 2 +- .../ConditionalLineNumberTest.java | 2 +- .../linenumbers/NestedLineNumberTest.java | 2 +- langtools/test/tools/javac/meth/TestCP.java | 2 +- .../javac/multicatch/7005371/T7005371.java | 2 +- .../test/tools/javac/multicatch/Pos05.java | 2 +- .../tools/javac/varargs/6199075/T6199075.java | 2 +- .../tools/javac/varargs/7042566/T7042566.java | 2 +- .../test/tools/javadoc/CheckResourceKeys.java | 2 +- .../test/tools/javap/4111861/T4111861.java | 2 +- .../test/tools/javap/4870651/T4870651.java | 2 +- .../test/tools/javap/6937244/T6937244.java | 2 +- .../test/tools/javap/6937244/T6937244A.java | 2 +- .../8006334/JavapTaskCtorFailWithNPE.java | 2 +- .../JavapReturns0AfterClassNotFoundTest.java | 2 +- .../test/tools/javap/AccessModifiers.java | 2 +- .../test/tools/javap/BadAttributeLength.java | 2 +- .../tools/javap/BoundsTypeVariableTest.java | 2 +- .../test/tools/javap/DescriptorTest.java | 2 +- langtools/test/tools/javap/ExtPath.java | 2 +- .../test/tools/javap/InvalidOptions.java | 2 +- .../test/tools/javap/MethodParameters.java | 2 +- .../test/tools/javap/StackMapTableTest.java | 2 +- langtools/test/tools/javap/T4075403.java | 2 +- langtools/test/tools/javap/T4459541.java | 2 +- langtools/test/tools/javap/T4501660.java | 2 +- langtools/test/tools/javap/T4501661.java | 2 +- langtools/test/tools/javap/T4777949.java | 2 +- langtools/test/tools/javap/T4876942.java | 2 +- langtools/test/tools/javap/T4880663.java | 2 +- langtools/test/tools/javap/T4880672.java | 2 +- langtools/test/tools/javap/T4884240.java | 2 +- langtools/test/tools/javap/T4975569.java | 2 +- langtools/test/tools/javap/T6271787.java | 2 +- langtools/test/tools/javap/T6474890.java | 2 +- langtools/test/tools/javap/T6587786.java | 2 +- langtools/test/tools/javap/T6622216.java | 2 +- langtools/test/tools/javap/T6622232.java | 2 +- langtools/test/tools/javap/T6622260.java | 2 +- langtools/test/tools/javap/T6715251.java | 2 +- langtools/test/tools/javap/T6715753.java | 2 +- langtools/test/tools/javap/T6715767.java | 2 +- langtools/test/tools/javap/T6716452.java | 2 +- langtools/test/tools/javap/T6824493.java | 2 +- langtools/test/tools/javap/T6863746.java | 2 +- langtools/test/tools/javap/T6866657.java | 2 +- langtools/test/tools/javap/T6868539.java | 2 +- langtools/test/tools/javap/T6879371.java | 2 +- langtools/test/tools/javap/T7004698.java | 2 +- langtools/test/tools/javap/T7186925.java | 2 +- langtools/test/tools/javap/T7190862.java | 2 +- langtools/test/tools/javap/T8032814.java | 2 +- langtools/test/tools/javap/T8032819.java | 2 +- langtools/test/tools/javap/T8033180.java | 2 +- langtools/test/tools/javap/T8033711.java | 2 +- langtools/test/tools/javap/T8035104.java | 2 +- langtools/test/tools/javap/T8038414.java | 2 +- .../test/tools/javap/TestSuperclass.java | 2 +- .../test/tools/javap/WhitespaceTest.java | 2 +- .../test/tools/javap/classfile/T6887895.java | 2 +- .../tools/javap/classfile/deps/T6907575.java | 2 +- .../typeAnnotations/JSR175Annotations.java | 2 +- .../tools/javap/typeAnnotations/NewArray.java | 2 +- .../tools/javap/typeAnnotations/Presence.java | 2 +- .../javap/typeAnnotations/PresenceInner.java | 2 +- .../tools/javap/typeAnnotations/T6855990.java | 2 +- .../javap/typeAnnotations/TypeCasts.java | 2 +- .../javap/typeAnnotations/Visibility.java | 2 +- .../javap/typeAnnotations/Wildcards.java | 2 +- langtools/test/tools/jdeps/APIDeps.java | 4 +-- langtools/test/tools/jdeps/Basic.java | 2 +- langtools/test/tools/jdeps/DotFileTest.java | 2 +- .../VerboseFormat/JdepsDependencyClosure.java | 2 +- 310 files changed, 242 insertions(+), 241 deletions(-) rename langtools/make/gensrc/{Gensrc-jdk.dev.gmk => Gensrc-jdk.jdeps.gmk} (86%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/AccessFlags.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/Annotation.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/AnnotationDefault_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/Attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/AttributeException.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/Attributes.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/BootstrapMethods_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/CharacterRangeTable_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/ClassFile.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/ClassReader.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/ClassTranslator.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/ClassWriter.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/Code_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/CompilationID_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/ConstantPool.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/ConstantPoolException.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/ConstantValue_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/DefaultAttribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/Dependencies.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/Dependency.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/Deprecated_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/Descriptor.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/DescriptorException.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/EnclosingMethod_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/Exceptions_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/Field.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/InnerClasses_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/Instruction.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/LineNumberTable_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/LocalVariableTable_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/LocalVariableTypeTable_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/Method.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/MethodParameters_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/Opcode.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/ReferenceFinder.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/RuntimeAnnotations_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/RuntimeInvisibleAnnotations_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/RuntimeInvisibleParameterAnnotations_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/RuntimeInvisibleTypeAnnotations_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/RuntimeParameterAnnotations_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/RuntimeTypeAnnotations_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/RuntimeVisibleAnnotations_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/RuntimeVisibleParameterAnnotations_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/RuntimeVisibleTypeAnnotations_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/Signature.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/Signature_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/SourceDebugExtension_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/SourceFile_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/SourceID_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/StackMapTable_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/StackMap_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/Synthetic_attribute.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/Type.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/TypeAnnotation.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/classfile/package-info.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/AnnotationWriter.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/AttributeWriter.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/BasicWriter.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/ClassWriter.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/CodeWriter.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/ConstantWriter.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/Context.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/DisassemblerTool.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/InstructionDetailWriter.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/InternalError.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/JavapFileManager.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/JavapTask.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/LocalVariableTableWriter.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/LocalVariableTypeTableWriter.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/Main.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/Messages.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/Options.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/SourceWriter.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/StackMapWriter.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/TryBlockWriter.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/TypeAnnotationWriter.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/overview.html (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/package-info.java (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/resources/javap.properties (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/resources/javap_ja.properties (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/resources/javap_zh_CN.properties (100%) rename langtools/src/{jdk.compiler => jdk.jdeps}/share/classes/com/sun/tools/javap/resources/version.properties-template (100%) rename langtools/src/{jdk.dev => jdk.jdeps}/share/classes/com/sun/tools/jdeps/Analyzer.java (100%) rename langtools/src/{jdk.dev => jdk.jdeps}/share/classes/com/sun/tools/jdeps/Archive.java (100%) rename langtools/src/{jdk.dev => jdk.jdeps}/share/classes/com/sun/tools/jdeps/ClassFileReader.java (100%) rename langtools/src/{jdk.dev => jdk.jdeps}/share/classes/com/sun/tools/jdeps/JdepsTask.java (100%) rename langtools/src/{jdk.dev => jdk.jdeps}/share/classes/com/sun/tools/jdeps/Main.java (100%) rename langtools/src/{jdk.dev => jdk.jdeps}/share/classes/com/sun/tools/jdeps/Module.java (100%) rename langtools/src/{jdk.dev => jdk.jdeps}/share/classes/com/sun/tools/jdeps/ModulesXmlReader.java (100%) rename langtools/src/{jdk.dev => jdk.jdeps}/share/classes/com/sun/tools/jdeps/PlatformClassPath.java (100%) rename langtools/src/{jdk.dev => jdk.jdeps}/share/classes/com/sun/tools/jdeps/Profile.java (100%) rename langtools/src/{jdk.dev => jdk.jdeps}/share/classes/com/sun/tools/jdeps/resources/jdeps.properties (100%) rename langtools/src/{jdk.dev => jdk.jdeps}/share/classes/com/sun/tools/jdeps/resources/jdeps_ja.properties (100%) rename langtools/src/{jdk.dev => jdk.jdeps}/share/classes/com/sun/tools/jdeps/resources/jdeps_zh_CN.properties (100%) rename langtools/src/{jdk.dev => jdk.jdeps}/share/classes/com/sun/tools/jdeps/resources/jdkinternals.properties (100%) rename langtools/src/{jdk.dev => jdk.jdeps}/share/classes/com/sun/tools/jdeps/resources/version.properties-template (100%) diff --git a/langtools/make/CompileInterim.gmk b/langtools/make/CompileInterim.gmk index c957a904978..a0e1e144ef1 100644 --- a/langtools/make/CompileInterim.gmk +++ b/langtools/make/CompileInterim.gmk @@ -41,11 +41,11 @@ $(eval $(call SetupJavaCompilation,BUILD_INTERIM_LANGTOOLS, \ DISABLE_SJAVAC := true, \ SRC := $(LANGTOOLS_TOPDIR)/src/java.compiler/share/classes \ $(LANGTOOLS_TOPDIR)/src/jdk.compiler/share/classes \ - $(LANGTOOLS_TOPDIR)/src/jdk.dev/share/classes \ $(LANGTOOLS_TOPDIR)/src/jdk.javadoc/share/classes \ + $(LANGTOOLS_TOPDIR)/src/jdk.jdeps/share/classes \ $(SUPPORT_OUTPUTDIR)/gensrc/jdk.compiler \ - $(SUPPORT_OUTPUTDIR)/gensrc/jdk.dev \ - $(SUPPORT_OUTPUTDIR)/gensrc/jdk.javadoc, \ + $(SUPPORT_OUTPUTDIR)/gensrc/jdk.javadoc \ + $(SUPPORT_OUTPUTDIR)/gensrc/jdk.jdeps, \ EXCLUDES := sun jdk, \ COPY := .gif .xml .css .js javax.tools.JavaCompilerTool, \ BIN := $(BUILDTOOLS_OUTPUTDIR)/langtools_interim_classes, \ diff --git a/langtools/make/build.properties b/langtools/make/build.properties index dd902e0ad9e..9bb5f5095d4 100644 --- a/langtools/make/build.properties +++ b/langtools/make/build.properties @@ -47,11 +47,11 @@ boot.javac.source = 8 boot.javac.target = 8 #configuration of submodules (share by both the bootstrap and normal compilation): -langtools.modules=java.compiler:jdk.compiler:jdk.dev:jdk.javadoc +langtools.modules=java.compiler:jdk.compiler:jdk.jdeps:jdk.javadoc java.compiler.dependencies= jdk.compiler.dependencies=java.compiler jdk.javadoc.dependencies=java.compiler:jdk.compiler -jdk.dev.dependencies=java.compiler:jdk.compiler +jdk.jdeps.dependencies=java.compiler:jdk.compiler javac.resource.includes = \ com/sun/tools/javac/resources/compiler.properties diff --git a/langtools/make/build.xml b/langtools/make/build.xml index e88cf9e76c4..1876100101c 100644 --- a/langtools/make/build.xml +++ b/langtools/make/build.xml @@ -257,7 +257,7 @@ - + @@ -463,7 +463,7 @@ - + @@ -527,7 +527,7 @@ resource.includes="${javac.resource.includes}" /> - diff --git a/langtools/make/gensrc/Gensrc-jdk.compiler.gmk b/langtools/make/gensrc/Gensrc-jdk.compiler.gmk index 0caef1da1ae..2f8f8633ffd 100644 --- a/langtools/make/gensrc/Gensrc-jdk.compiler.gmk +++ b/langtools/make/gensrc/Gensrc-jdk.compiler.gmk @@ -31,11 +31,8 @@ $(eval $(call SetupVersionProperties,JAVAC_VERSION, \ $(eval $(call SetupVersionProperties,JAVAH_VERSION, \ com/sun/tools/javah/resources/version.properties)) -$(eval $(call SetupVersionProperties,JAVAP_VERSION, \ - com/sun/tools/javap/resources/version.properties)) - $(eval $(call SetupCompileProperties,COMPILE_PROPERTIES, \ - $(JAVAC_VERSION) $(JAVAH_VERSION) $(JAVAP_VERSION))) + $(JAVAC_VERSION) $(JAVAH_VERSION))) $(eval $(call SetupParseProperties,PARSE_PROPERTIES, \ com/sun/tools/javac/resources/compiler.properties)) diff --git a/langtools/make/gensrc/Gensrc-jdk.dev.gmk b/langtools/make/gensrc/Gensrc-jdk.jdeps.gmk similarity index 86% rename from langtools/make/gensrc/Gensrc-jdk.dev.gmk rename to langtools/make/gensrc/Gensrc-jdk.jdeps.gmk index bf35d05b0d0..91095437aff 100644 --- a/langtools/make/gensrc/Gensrc-jdk.dev.gmk +++ b/langtools/make/gensrc/Gensrc-jdk.jdeps.gmk @@ -25,9 +25,13 @@ include GensrcCommon.gmk +$(eval $(call SetupVersionProperties,JAVAP_VERSION, \ + com/sun/tools/javap/resources/version.properties)) + $(eval $(call SetupVersionProperties,JDEPS_VERSION,\ com/sun/tools/jdeps/resources/version.properties)) -$(eval $(call SetupCompileProperties,COMPILE_PROPERTIES, $(JDEPS_VERSION))) +$(eval $(call SetupCompileProperties,COMPILE_PROPERTIES,\ + $(JDEPS_VERSION) $(JAVAP_VERSION))) all: $(COMPILE_PROPERTIES) diff --git a/langtools/make/intellij/langtools.iml b/langtools/make/intellij/langtools.iml index 9619571d758..319eb7e188a 100644 --- a/langtools/make/intellij/langtools.iml +++ b/langtools/make/intellij/langtools.iml @@ -6,13 +6,13 @@ - + - + diff --git a/langtools/make/intellij/workspace.xml b/langtools/make/intellij/workspace.xml index 135f05a0fd3..8f453eabb05 100644 --- a/langtools/make/intellij/workspace.xml +++ b/langtools/make/intellij/workspace.xml @@ -10,7 +10,7 @@