# HG changeset patch # User jwilhelm # Date 1424118279 -3600 # Node ID 5e7bce2712acbbccf6075b98897324957931a3ad # Parent 8d8f9907083d5b375e7cabbd5a2a7819c1e5b04c# Parent cff77cc6a869c37818ed7a76138c4a1aef99a093 Merge diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/cpu/ppc/vm/icBuffer_ppc.cpp --- a/hotspot/src/cpu/ppc/vm/icBuffer_ppc.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/cpu/ppc/vm/icBuffer_ppc.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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. * Copyright 2012, 2013 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -32,7 +32,6 @@ #include "memory/resourceArea.hpp" #include "nativeInst_ppc.hpp" #include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" #define __ masm. diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.cpp --- a/hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -29,6 +29,7 @@ #include "interp_masm_ppc_64.hpp" #include "interpreter/interpreterRuntime.hpp" #include "prims/jvmtiThreadState.hpp" +#include "runtime/sharedRuntime.hpp" #ifdef PRODUCT #define BLOCK_COMMENT(str) // nothing diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp --- a/hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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. * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -25,6 +25,7 @@ #include "precompiled.hpp" #include "asm/macroAssembler.inline.hpp" +#include "classfile/javaClasses.inline.hpp" #include "interpreter/interpreter.hpp" #include "memory/allocation.inline.hpp" #include "prims/methodHandles.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/cpu/sparc/vm/c1_MacroAssembler_sparc.cpp --- a/hotspot/src/cpu/sparc/vm/c1_MacroAssembler_sparc.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/c1_MacroAssembler_sparc.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, 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 @@ -33,6 +33,7 @@ #include "runtime/basicLock.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/os.hpp" +#include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" void C1_MacroAssembler::inline_cache_check(Register receiver, Register iCache) { diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/cpu/sparc/vm/icBuffer_sparc.cpp --- a/hotspot/src/cpu/sparc/vm/icBuffer_sparc.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/icBuffer_sparc.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -30,7 +30,6 @@ #include "memory/resourceArea.hpp" #include "nativeInst_sparc.hpp" #include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" int InlineCacheBuffer::ic_stub_code_size() { #ifdef _LP64 diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp --- a/hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. * 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,6 +24,7 @@ #include "precompiled.hpp" #include "asm/macroAssembler.hpp" +#include "classfile/javaClasses.inline.hpp" #include "interpreter/interpreter.hpp" #include "interpreter/interp_masm.hpp" #include "memory/allocation.inline.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/cpu/x86/vm/c1_MacroAssembler_x86.cpp --- a/hotspot/src/cpu/x86/vm/c1_MacroAssembler_x86.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/cpu/x86/vm/c1_MacroAssembler_x86.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, 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 @@ -33,6 +33,7 @@ #include "runtime/basicLock.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/os.hpp" +#include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" int C1_MacroAssembler::lock_object(Register hdr, Register obj, Register disp_hdr, Register scratch, Label& slow_case) { diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/cpu/x86/vm/icBuffer_x86.cpp --- a/hotspot/src/cpu/x86/vm/icBuffer_x86.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/cpu/x86/vm/icBuffer_x86.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -31,7 +31,6 @@ #include "memory/resourceArea.hpp" #include "nativeInst_x86.hpp" #include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" int InlineCacheBuffer::ic_stub_code_size() { return NativeMovConstReg::instruction_size + diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/cpu/x86/vm/methodHandles_x86.cpp --- a/hotspot/src/cpu/x86/vm/methodHandles_x86.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/cpu/x86/vm/methodHandles_x86.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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,6 +24,7 @@ #include "precompiled.hpp" #include "asm/macroAssembler.hpp" +#include "classfile/javaClasses.inline.hpp" #include "interpreter/interpreter.hpp" #include "interpreter/interpreterRuntime.hpp" #include "memory/allocation.inline.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/cpu/zero/vm/icBuffer_zero.cpp --- a/hotspot/src/cpu/zero/vm/icBuffer_zero.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/cpu/zero/vm/icBuffer_zero.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -32,7 +32,6 @@ #include "memory/resourceArea.hpp" #include "nativeInst_zero.hpp" #include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" int InlineCacheBuffer::ic_stub_code_size() { // NB set this once the functions below are implemented diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/adlc/main.cpp --- a/hotspot/src/share/vm/adlc/main.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/adlc/main.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -220,7 +220,6 @@ AD.addInclude(AD._CPP_file, "oops/markOop.hpp"); AD.addInclude(AD._CPP_file, "oops/method.hpp"); AD.addInclude(AD._CPP_file, "oops/oop.inline.hpp"); - AD.addInclude(AD._CPP_file, "oops/oop.inline2.hpp"); AD.addInclude(AD._CPP_file, "opto/cfgnode.hpp"); AD.addInclude(AD._CPP_file, "opto/locknode.hpp"); AD.addInclude(AD._CPP_file, "opto/opcodes.hpp"); diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/c1/c1_Compilation.cpp --- a/hotspot/src/share/vm/c1/c1_Compilation.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/c1/c1_Compilation.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, 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 @@ -29,12 +29,12 @@ #include "c1/c1_LIRAssembler.hpp" #include "c1/c1_LinearScan.hpp" #include "c1/c1_MacroAssembler.hpp" +#include "c1/c1_RangeCheckElimination.hpp" #include "c1/c1_ValueMap.hpp" #include "c1/c1_ValueStack.hpp" #include "code/debugInfoRec.hpp" #include "compiler/compileLog.hpp" -#include "c1/c1_RangeCheckElimination.hpp" - +#include "runtime/sharedRuntime.hpp" typedef enum { _t_compile, diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/c1/c1_GraphBuilder.cpp --- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -34,6 +34,7 @@ #include "ci/ciMemberName.hpp" #include "compiler/compileBroker.hpp" #include "interpreter/bytecode.hpp" +#include "oops/oop.inline.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/compilationPolicy.hpp" #include "runtime/vm_version.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/c1/c1_LIRGenerator.cpp --- a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -32,6 +32,7 @@ #include "ci/ciArrayKlass.hpp" #include "ci/ciInstance.hpp" #include "ci/ciObjArray.hpp" +#include "memory/cardTableModRefBS.hpp" #include "runtime/arguments.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp --- a/hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -29,6 +29,7 @@ #include "ci/ciMethodBlocks.hpp" #include "ci/ciStreams.hpp" #include "interpreter/bytecode.hpp" +#include "oops/oop.inline.hpp" #include "utilities/bitMap.inline.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/ci/ciArray.cpp --- a/hotspot/src/share/vm/ci/ciArray.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/ci/ciArray.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, 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 @@ -28,7 +28,8 @@ #include "ci/ciConstant.hpp" #include "ci/ciKlass.hpp" #include "ci/ciUtilities.hpp" -#include "oops/objArrayOop.hpp" +#include "oops/objArrayOop.inline.hpp" +#include "oops/oop.inline.hpp" #include "oops/typeArrayOop.hpp" // ciArray diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/ci/ciBaseObject.cpp --- a/hotspot/src/share/vm/ci/ciBaseObject.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/ci/ciBaseObject.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -26,7 +26,6 @@ #include "ci/ciBaseObject.hpp" #include "ci/ciUtilities.hpp" #include "gc_interface/collectedHeap.inline.hpp" -#include "oops/oop.inline2.hpp" // ------------------------------------------------------------------ // ciBaseObject::set_ident diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/ci/ciCallSite.cpp --- a/hotspot/src/share/vm/ci/ciCallSite.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/ci/ciCallSite.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved. * 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,7 @@ */ #include "precompiled.hpp" +#include "classfile/javaClasses.inline.hpp" #include "ci/ciCallSite.hpp" #include "ci/ciUtilities.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/ci/ciEnv.cpp --- a/hotspot/src/share/vm/ci/ciEnv.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/ci/ciEnv.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -46,8 +46,8 @@ #include "memory/universe.inline.hpp" #include "oops/methodData.hpp" #include "oops/objArrayKlass.hpp" +#include "oops/objArrayOop.inline.hpp" #include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" #include "prims/jvmtiExport.hpp" #include "runtime/init.hpp" #include "runtime/reflection.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/ci/ciField.cpp --- a/hotspot/src/share/vm/ci/ciField.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/ci/ciField.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, 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 @@ -31,7 +31,6 @@ #include "interpreter/linkResolver.hpp" #include "memory/universe.inline.hpp" #include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" #include "runtime/fieldDescriptor.hpp" // ciField diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/ci/ciInstance.hpp --- a/hotspot/src/share/vm/ci/ciInstance.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/ci/ciInstance.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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. * 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 @@ #include "ci/ciObject.hpp" #include "oops/instanceOop.hpp" +#include "oops/oop.hpp" // ciInstance // diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/ci/ciMetadata.cpp --- a/hotspot/src/share/vm/ci/ciMetadata.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/ci/ciMetadata.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -26,7 +26,6 @@ #include "ci/ciObject.hpp" #include "ci/ciUtilities.hpp" #include "gc_interface/collectedHeap.inline.hpp" -#include "oops/oop.inline2.hpp" // ------------------------------------------------------------------ // ciMetadata::print diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/ci/ciMethodData.hpp --- a/hotspot/src/share/vm/ci/ciMethodData.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/ci/ciMethodData.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -30,7 +30,7 @@ #include "ci/ciObject.hpp" #include "ci/ciUtilities.hpp" #include "oops/methodData.hpp" -#include "oops/oop.inline.hpp" +#include "oops/oop.hpp" #include "runtime/deoptimization.hpp" class ciBitData; diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/ci/ciObjArray.cpp --- a/hotspot/src/share/vm/ci/ciObjArray.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/ci/ciObjArray.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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. * 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 @@ #include "ci/ciNullObject.hpp" #include "ci/ciObjArray.hpp" #include "ci/ciUtilities.hpp" -#include "oops/objArrayOop.hpp" +#include "oops/objArrayOop.inline.hpp" // ciObjArray // diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/ci/ciObject.cpp --- a/hotspot/src/share/vm/ci/ciObject.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/ci/ciObject.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -26,7 +26,7 @@ #include "ci/ciObject.hpp" #include "ci/ciUtilities.hpp" #include "gc_interface/collectedHeap.inline.hpp" -#include "oops/oop.inline2.hpp" +#include "oops/oop.inline.hpp" // ciObject // diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/ci/ciObjectFactory.cpp --- a/hotspot/src/share/vm/ci/ciObjectFactory.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/ci/ciObjectFactory.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -40,11 +40,11 @@ #include "ci/ciTypeArray.hpp" #include "ci/ciTypeArrayKlass.hpp" #include "ci/ciUtilities.hpp" +#include "classfile/javaClasses.inline.hpp" #include "classfile/systemDictionary.hpp" #include "gc_interface/collectedHeap.inline.hpp" #include "memory/allocation.inline.hpp" #include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" #include "runtime/fieldType.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/ci/ciReplay.cpp --- a/hotspot/src/share/vm/ci/ciReplay.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/ci/ciReplay.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -1,4 +1,4 @@ -/* 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 @@ -31,6 +31,7 @@ #include "memory/allocation.inline.hpp" #include "memory/oopFactory.hpp" #include "memory/resourceArea.hpp" +#include "oops/oop.inline.hpp" #include "utilities/copy.hpp" #include "utilities/macros.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/ci/ciTypeFlow.cpp --- a/hotspot/src/share/vm/ci/ciTypeFlow.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/ci/ciTypeFlow.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -35,6 +35,7 @@ #include "interpreter/bytecode.hpp" #include "interpreter/bytecodes.hpp" #include "memory/allocation.inline.hpp" +#include "oops/oop.inline.hpp" #include "opto/compile.hpp" #include "opto/node.hpp" #include "runtime/deoptimization.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/classfile/classFileParser.cpp --- a/hotspot/src/share/vm/classfile/classFileParser.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/classfile/classFileParser.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -25,10 +25,9 @@ #include "precompiled.hpp" #include "classfile/classFileParser.hpp" #include "classfile/classLoader.hpp" -#include "classfile/classLoaderData.hpp" #include "classfile/classLoaderData.inline.hpp" #include "classfile/defaultMethods.hpp" -#include "classfile/javaClasses.hpp" +#include "classfile/javaClasses.inline.hpp" #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/verificationType.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/classfile/classFileParser.hpp --- a/hotspot/src/share/vm/classfile/classFileParser.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/classfile/classFileParser.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -27,9 +27,7 @@ #include "classfile/classFileStream.hpp" #include "memory/resourceArea.hpp" -#include "oops/oop.inline.hpp" #include "oops/typeArrayOop.hpp" -#include "runtime/handles.inline.hpp" #include "utilities/accessFlags.hpp" #include "classfile/symbolTable.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/classfile/classLoaderData.cpp --- a/hotspot/src/share/vm/classfile/classLoaderData.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/classfile/classLoaderData.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -57,6 +57,8 @@ #include "memory/metadataFactory.hpp" #include "memory/metaspaceShared.hpp" #include "memory/oopFactory.hpp" +#include "oops/objArrayOop.inline.hpp" +#include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/jniHandles.hpp" #include "runtime/mutex.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/classfile/classLoaderStats.cpp --- a/hotspot/src/share/vm/classfile/classLoaderStats.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/classfile/classLoaderStats.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -24,6 +24,7 @@ #include "precompiled.hpp" #include "classfile/classLoaderStats.hpp" +#include "oops/oop.inline.hpp" #include "utilities/globalDefinitions.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/classfile/dictionary.hpp --- a/hotspot/src/share/vm/classfile/dictionary.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/classfile/dictionary.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -27,7 +27,7 @@ #include "classfile/systemDictionary.hpp" #include "oops/instanceKlass.hpp" -#include "oops/oop.inline.hpp" +#include "oops/oop.hpp" #include "utilities/hashtable.hpp" class DictionaryEntry; diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/classfile/javaClasses.cpp --- a/hotspot/src/share/vm/classfile/javaClasses.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/classfile/javaClasses.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 "classfile/altHashing.hpp" -#include "classfile/javaClasses.hpp" +#include "classfile/javaClasses.inline.hpp" #include "classfile/stringTable.hpp" #include "classfile/vmSymbols.hpp" #include "code/debugInfo.hpp" @@ -39,6 +39,8 @@ #include "oops/instanceMirrorKlass.hpp" #include "oops/klass.hpp" #include "oops/method.hpp" +#include "oops/objArrayOop.inline.hpp" +#include "oops/oop.inline.hpp" #include "oops/symbol.hpp" #include "oops/typeArrayOop.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" @@ -149,6 +151,10 @@ bool java_lang_String::initialized = false; +bool java_lang_String::is_instance(oop obj) { + return is_instance_inlined(obj); +} + void java_lang_String::compute_offsets() { assert(!initialized, "offsets should be initialized only once"); @@ -2730,6 +2736,11 @@ } } +bool java_lang_invoke_LambdaForm::is_instance(oop obj) { + return obj != NULL && is_subclass(obj->klass()); +} + + oop java_lang_invoke_MethodHandle::type(oop mh) { return mh->obj_field(_type_offset); } @@ -3076,6 +3087,10 @@ return false; } +bool java_lang_ClassLoader::is_instance(oop obj) { + return obj != NULL && is_subclass(obj->klass()); +} + // For class loader classes, parallelCapable defined // based on non-null field diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/classfile/javaClasses.hpp --- a/hotspot/src/share/vm/classfile/javaClasses.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/classfile/javaClasses.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -204,9 +204,8 @@ static Symbol* as_symbol_or_null(oop java_string); // Testers - static bool is_instance(oop obj) { - return obj != NULL && obj->klass() == SystemDictionary::String_klass(); - } + static bool is_instance(oop obj); + static bool is_instance_inlined(oop obj); // Debugging static void print(oop java_string, outputStream* st); @@ -273,9 +272,8 @@ static Symbol* as_signature(oop java_class, bool intern_if_not_found, TRAPS); static void print_signature(oop java_class, outputStream *st); // Testing - static bool is_instance(oop obj) { - return obj != NULL && obj->klass() == SystemDictionary::Class_klass(); - } + static bool is_instance(oop obj); + static bool is_primitive(oop java_class); static BasicType primitive_type(oop java_class); static oop primitive_mirror(BasicType t); @@ -989,9 +987,7 @@ static bool is_subclass(Klass* klass) { return klass->is_subclass_of(SystemDictionary::MethodHandle_klass()); } - static bool is_instance(oop obj) { - return obj != NULL && is_subclass(obj->klass()); - } + static bool is_instance(oop obj); // Accessors for code generation: static int type_offset_in_bytes() { return _type_offset; } @@ -1016,9 +1012,7 @@ static bool is_subclass(Klass* klass) { return klass->is_subclass_of(SystemDictionary::DirectMethodHandle_klass()); } - static bool is_instance(oop obj) { - return obj != NULL && is_subclass(obj->klass()); - } + static bool is_instance(oop obj); // Accessors for code generation: static int member_offset_in_bytes() { return _member_offset; } @@ -1045,9 +1039,7 @@ return SystemDictionary::LambdaForm_klass() != NULL && klass->is_subclass_of(SystemDictionary::LambdaForm_klass()); } - static bool is_instance(oop obj) { - return obj != NULL && is_subclass(obj->klass()); - } + static bool is_instance(oop obj); // Accessors for code generation: static int vmentry_offset_in_bytes() { return _vmentry_offset; } @@ -1111,9 +1103,7 @@ static bool is_subclass(Klass* klass) { return klass->is_subclass_of(SystemDictionary::MemberName_klass()); } - static bool is_instance(oop obj) { - return obj != NULL && is_subclass(obj->klass()); - } + static bool is_instance(oop obj); static bool is_method(oop obj); @@ -1166,9 +1156,7 @@ static Symbol* as_signature(oop mt, bool intern_if_not_found, TRAPS); static void print_signature(oop mt, outputStream* st); - static bool is_instance(oop obj) { - return obj != NULL && obj->klass() == SystemDictionary::MethodType_klass(); - } + static bool is_instance(oop obj); static bool equals(oop mt1, oop mt2); @@ -1190,19 +1178,17 @@ public: // Accessors - static oop target( oop site) { return site->obj_field( _target_offset); } - static void set_target( oop site, oop target) { site->obj_field_put( _target_offset, target); } + static oop target( oop site); + static void set_target( oop site, oop target); - static volatile oop target_volatile(oop site) { return oop((oopDesc *)(site->obj_field_volatile(_target_offset))); } - static void set_target_volatile(oop site, oop target) { site->obj_field_put_volatile(_target_offset, target); } + static volatile oop target_volatile(oop site); + static void set_target_volatile(oop site, oop target); // Testers static bool is_subclass(Klass* klass) { return klass->is_subclass_of(SystemDictionary::CallSite_klass()); } - static bool is_instance(oop obj) { - return obj != NULL && is_subclass(obj->klass()); - } + static bool is_instance(oop obj); // Accessors for code generation: static int target_offset_in_bytes() { return _target_offset; } @@ -1268,9 +1254,7 @@ static bool is_subclass(Klass* klass) { return klass->is_subclass_of(SystemDictionary::ClassLoader_klass()); } - static bool is_instance(oop obj) { - return obj != NULL && is_subclass(obj->klass()); - } + static bool is_instance(oop obj); // Debugging friend class JavaClasses; diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/classfile/javaClasses.inline.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/src/share/vm/classfile/javaClasses.inline.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -0,0 +1,76 @@ +/* + * 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. + * + */ + +#ifndef SHARE_VM_CLASSFILE_JAVACLASSES_INLINE_HPP +#define SHARE_VM_CLASSFILE_JAVACLASSES_INLINE_HPP + +#include "classfile/javaClasses.hpp" +#include "oops/oop.inline.hpp" +#include "oops/oopsHierarchy.hpp" + +inline volatile oop java_lang_invoke_CallSite::target_volatile(oop site) { + return oop((oopDesc *)(site->obj_field_volatile(_target_offset))); +} + +inline void java_lang_invoke_CallSite::set_target_volatile(oop site, oop target) { + site->obj_field_put_volatile(_target_offset, target); +} + +inline oop java_lang_invoke_CallSite::target(oop site) { + return site->obj_field(_target_offset); +} + +inline void java_lang_invoke_CallSite::set_target(oop site, oop target) { + site->obj_field_put(_target_offset, target); +} + +inline bool java_lang_String::is_instance_inlined(oop obj) { + return obj != NULL && obj->klass() == SystemDictionary::String_klass(); +} + +inline bool java_lang_invoke_CallSite::is_instance(oop obj) { + return obj != NULL && is_subclass(obj->klass()); +} + +inline bool java_lang_invoke_MemberName::is_instance(oop obj) { + return obj != NULL && is_subclass(obj->klass()); +} + +inline bool java_lang_invoke_MethodType::is_instance(oop obj) { + return obj != NULL && obj->klass() == SystemDictionary::MethodType_klass(); +} + +inline bool java_lang_invoke_MethodHandle::is_instance(oop obj) { + return obj != NULL && is_subclass(obj->klass()); +} + +inline bool java_lang_Class::is_instance(oop obj) { + return obj != NULL && obj->klass() == SystemDictionary::Class_klass(); +} + +inline bool java_lang_invoke_DirectMethodHandle::is_instance(oop obj) { + return obj != NULL && is_subclass(obj->klass()); +} + +#endif // SHARE_VM_CLASSFILE_JAVACLASSES_INLINE_HPP diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/classfile/stringTable.cpp --- a/hotspot/src/share/vm/classfile/stringTable.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/classfile/stringTable.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -33,7 +33,6 @@ #include "memory/filemap.hpp" #include "memory/gcLocker.inline.hpp" #include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/mutexLocker.hpp" #include "utilities/hashtable.inline.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/classfile/symbolTable.cpp --- a/hotspot/src/share/vm/classfile/symbolTable.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/classfile/symbolTable.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -33,7 +33,6 @@ #include "memory/filemap.hpp" #include "memory/gcLocker.inline.hpp" #include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/mutexLocker.hpp" #include "utilities/hashtable.inline.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/classfile/systemDictionary.cpp --- a/hotspot/src/share/vm/classfile/systemDictionary.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -25,7 +25,7 @@ #include "precompiled.hpp" #include "classfile/classLoaderData.inline.hpp" #include "classfile/dictionary.hpp" -#include "classfile/javaClasses.hpp" +#include "classfile/javaClasses.inline.hpp" #include "classfile/loaderConstraints.hpp" #include "classfile/placeholders.hpp" #include "classfile/resolutionErrors.hpp" @@ -44,8 +44,8 @@ #include "oops/klass.inline.hpp" #include "oops/methodData.hpp" #include "oops/objArrayKlass.hpp" +#include "oops/objArrayOop.inline.hpp" #include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" #include "oops/typeArrayKlass.hpp" #include "prims/jvmtiEnvBase.hpp" #include "prims/methodHandles.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/classfile/verificationType.hpp --- a/hotspot/src/share/vm/classfile/verificationType.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/classfile/verificationType.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -28,7 +28,7 @@ #include "classfile/systemDictionary.hpp" #include "memory/allocation.hpp" #include "oops/instanceKlass.hpp" -#include "oops/oop.inline.hpp" +#include "oops/oop.hpp" #include "oops/symbol.hpp" #include "runtime/handles.hpp" #include "runtime/signature.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/code/dependencies.cpp --- a/hotspot/src/share/vm/code/dependencies.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/code/dependencies.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -27,6 +27,7 @@ #include "ci/ciEnv.hpp" #include "ci/ciKlass.hpp" #include "ci/ciMethod.hpp" +#include "classfile/javaClasses.inline.hpp" #include "code/dependencies.hpp" #include "compiler/compileLog.hpp" #include "oops/oop.inline.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/code/icBuffer.cpp --- a/hotspot/src/share/vm/code/icBuffer.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/code/icBuffer.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -35,7 +35,6 @@ #include "memory/universe.inline.hpp" #include "oops/method.hpp" #include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/stubRoutines.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/code/nmethod.cpp --- a/hotspot/src/share/vm/code/nmethod.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/code/nmethod.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -35,6 +35,7 @@ #include "compiler/disassembler.hpp" #include "interpreter/bytecode.hpp" #include "oops/methodData.hpp" +#include "oops/oop.inline.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" #include "prims/jvmtiImpl.hpp" #include "runtime/atomic.inline.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/compiler/disassembler.cpp --- a/hotspot/src/share/vm/compiler/disassembler.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/compiler/disassembler.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. * 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,6 +28,7 @@ #include "compiler/disassembler.hpp" #include "gc_interface/collectedHeap.hpp" #include "memory/cardTableModRefBS.hpp" +#include "oops/oop.inline.hpp" #include "runtime/fprofiler.hpp" #include "runtime/handles.inline.hpp" #include "runtime/os.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.hpp --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -129,8 +129,8 @@ // GenCollectedHeap heap. class VM_GenCollectFullConcurrent: public VM_GC_Operation { public: - VM_GenCollectFullConcurrent(unsigned int gc_count_before, - unsigned int full_gc_count_before, + VM_GenCollectFullConcurrent(uint gc_count_before, + uint full_gc_count_before, GCCause::Cause gc_cause) : VM_GC_Operation(gc_count_before, gc_cause, full_gc_count_before, true /* full */) { diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -333,7 +333,7 @@ HeapRegion* lists[] = {_head, _survivor_head}; const char* names[] = {"YOUNG", "SURVIVOR"}; - for (unsigned int list = 0; list < ARRAY_SIZE(lists); ++list) { + for (uint list = 0; list < ARRAY_SIZE(lists); ++list) { gclog_or_tty->print_cr("%s LIST CONTENTS", names[list]); HeapRegion *curr = lists[list]; if (curr == NULL) @@ -765,8 +765,8 @@ assert_heap_not_locked_and_not_at_safepoint(); assert(!is_humongous(word_size), "we do not allow humongous TLABs"); - unsigned int dummy_gc_count_before; - int dummy_gclocker_retry_count = 0; + uint dummy_gc_count_before; + uint dummy_gclocker_retry_count = 0; return attempt_allocation(word_size, &dummy_gc_count_before, &dummy_gclocker_retry_count); } @@ -776,8 +776,8 @@ assert_heap_not_locked_and_not_at_safepoint(); // Loop until the allocation is satisfied, or unsatisfied after GC. - for (int try_count = 1, gclocker_retry_count = 0; /* we'll return */; try_count += 1) { - unsigned int gc_count_before; + for (uint try_count = 1, gclocker_retry_count = 0; /* we'll return */; try_count += 1) { + uint gc_count_before; HeapWord* result = NULL; if (!is_humongous(word_size)) { @@ -829,8 +829,8 @@ HeapWord* G1CollectedHeap::attempt_allocation_slow(size_t word_size, AllocationContext_t context, - unsigned int *gc_count_before_ret, - int* gclocker_retry_count_ret) { + uint* gc_count_before_ret, + uint* gclocker_retry_count_ret) { // Make sure you read the note in attempt_allocation_humongous(). assert_heap_not_locked_and_not_at_safepoint(); @@ -847,7 +847,7 @@ HeapWord* result = NULL; for (int try_count = 1; /* we'll return */; try_count += 1) { bool should_try_gc; - unsigned int gc_count_before; + uint gc_count_before; { MutexLockerEx x(Heap_lock); @@ -891,7 +891,7 @@ if (should_try_gc) { bool succeeded; result = do_collection_pause(word_size, gc_count_before, &succeeded, - GCCause::_g1_inc_collection_pause); + GCCause::_g1_inc_collection_pause); if (result != NULL) { assert(succeeded, "only way to get back a non-NULL result"); return result; @@ -945,8 +945,8 @@ } HeapWord* G1CollectedHeap::attempt_allocation_humongous(size_t word_size, - unsigned int * gc_count_before_ret, - int* gclocker_retry_count_ret) { + uint* gc_count_before_ret, + uint* gclocker_retry_count_ret) { // The structure of this method has a lot of similarities to // attempt_allocation_slow(). The reason these two were not merged // into a single one is that such a method would require several "if @@ -979,7 +979,7 @@ HeapWord* result = NULL; for (int try_count = 1; /* we'll return */; try_count += 1) { bool should_try_gc; - unsigned int gc_count_before; + uint gc_count_before; { MutexLockerEx x(Heap_lock); @@ -1017,7 +1017,7 @@ bool succeeded; result = do_collection_pause(word_size, gc_count_before, &succeeded, - GCCause::_g1_humongous_allocation); + GCCause::_g1_humongous_allocation); if (result != NULL) { assert(succeeded, "only way to get back a non-NULL result"); return result; @@ -1815,7 +1815,7 @@ assert(n_rem_sets > 0, "Invariant."); _worker_cset_start_region = NEW_C_HEAP_ARRAY(HeapRegion*, n_queues, mtGC); - _worker_cset_start_region_time_stamp = NEW_C_HEAP_ARRAY(unsigned int, n_queues, mtGC); + _worker_cset_start_region_time_stamp = NEW_C_HEAP_ARRAY(uint, n_queues, mtGC); _evacuation_failed_info_array = NEW_C_HEAP_ARRAY(EvacuationFailedInfo, n_queues, mtGC); for (int i = 0; i < n_queues; i++) { @@ -2396,9 +2396,9 @@ void G1CollectedHeap::collect(GCCause::Cause cause) { assert_heap_not_locked(); - unsigned int gc_count_before; - unsigned int old_marking_count_before; - unsigned int full_gc_count_before; + uint gc_count_before; + uint old_marking_count_before; + uint full_gc_count_before; bool retry_gc; do { @@ -3418,7 +3418,7 @@ } HeapWord* G1CollectedHeap::do_collection_pause(size_t word_size, - unsigned int gc_count_before, + uint gc_count_before, bool* succeeded, GCCause::Cause gc_cause) { assert_heap_not_locked_and_not_at_safepoint(); diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -325,11 +325,11 @@ // Keeps track of how many "old marking cycles" (i.e., Full GCs or // concurrent cycles) we have started. - volatile unsigned int _old_marking_cycles_started; + volatile uint _old_marking_cycles_started; // Keeps track of how many "old marking cycles" (i.e., Full GCs or // concurrent cycles) we have completed. - volatile unsigned int _old_marking_cycles_completed; + volatile uint _old_marking_cycles_completed; bool _concurrent_cycle_started; bool _heap_summary_sent; @@ -497,22 +497,22 @@ // the mutator alloc region without taking the Heap_lock. This // should only be used for non-humongous allocations. inline HeapWord* attempt_allocation(size_t word_size, - unsigned int* gc_count_before_ret, - int* gclocker_retry_count_ret); + uint* gc_count_before_ret, + uint* gclocker_retry_count_ret); // Second-level mutator allocation attempt: take the Heap_lock and // retry the allocation attempt, potentially scheduling a GC // pause. This should only be used for non-humongous allocations. HeapWord* attempt_allocation_slow(size_t word_size, AllocationContext_t context, - unsigned int* gc_count_before_ret, - int* gclocker_retry_count_ret); + uint* gc_count_before_ret, + uint* gclocker_retry_count_ret); // Takes the Heap_lock and attempts a humongous allocation. It can // potentially schedule a GC pause. HeapWord* attempt_allocation_humongous(size_t word_size, - unsigned int* gc_count_before_ret, - int* gclocker_retry_count_ret); + uint* gc_count_before_ret, + uint* gclocker_retry_count_ret); // Allocation attempt that should be called during safepoints (e.g., // at the end of a successful GC). expect_null_mutator_alloc_region @@ -686,7 +686,7 @@ // +ExplicitGCInvokesConcurrent). void increment_old_marking_cycles_completed(bool concurrent); - unsigned int old_marking_cycles_completed() { + uint old_marking_cycles_completed() { return _old_marking_cycles_completed; } @@ -745,7 +745,7 @@ // methods that call do_collection_pause() release the Heap_lock // before the call, so it's easy to read gc_count_before just before. HeapWord* do_collection_pause(size_t word_size, - unsigned int gc_count_before, + uint gc_count_before, bool* succeeded, GCCause::Cause gc_cause); @@ -981,7 +981,7 @@ // The heap region entry for a given worker is valid iff // the associated time stamp value matches the current value // of G1CollectedHeap::_gc_time_stamp. - unsigned int* _worker_cset_start_region_time_stamp; + uint* _worker_cset_start_region_time_stamp; enum G1H_process_roots_tasks { G1H_PS_filter_satb_buffers, diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -131,8 +131,8 @@ } inline HeapWord* G1CollectedHeap::attempt_allocation(size_t word_size, - unsigned int* gc_count_before_ret, - int* gclocker_retry_count_ret) { + uint* gc_count_before_ret, + uint* gclocker_retry_count_ret) { assert_heap_not_locked_and_not_at_safepoint(); assert(!is_humongous(word_size), "attempt_allocation() should not " "be called for humongous allocation requests"); diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/g1/g1EvacFailure.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1EvacFailure.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -0,0 +1,239 @@ +/* + * 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 + * 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 "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" + +class UpdateRSetDeferred : public OopsInHeapRegionClosure { +private: + G1CollectedHeap* _g1; + DirtyCardQueue *_dcq; + G1SATBCardTableModRefBS* _ct_bs; + +public: + UpdateRSetDeferred(G1CollectedHeap* g1, DirtyCardQueue* dcq) : + _g1(g1), _ct_bs(_g1->g1_barrier_set()), _dcq(dcq) {} + + virtual void do_oop(narrowOop* p) { do_oop_work(p); } + virtual void do_oop( oop* p) { do_oop_work(p); } + template void do_oop_work(T* p) { + assert(_from->is_in_reserved(p), "paranoia"); + if (!_from->is_in_reserved(oopDesc::load_decode_heap_oop(p)) && + !_from->is_survivor()) { + size_t card_index = _ct_bs->index_for(p); + if (_ct_bs->mark_card_deferred(card_index)) { + _dcq->enqueue((jbyte*)_ct_bs->byte_for_index(card_index)); + } + } + } +}; + +class RemoveSelfForwardPtrObjClosure: public ObjectClosure { +private: + G1CollectedHeap* _g1; + ConcurrentMark* _cm; + HeapRegion* _hr; + size_t _marked_bytes; + OopsInHeapRegionClosure *_update_rset_cl; + bool _during_initial_mark; + bool _during_conc_mark; + uint _worker_id; + HeapWord* _end_of_last_gap; + HeapWord* _last_gap_threshold; + HeapWord* _last_obj_threshold; + +public: + RemoveSelfForwardPtrObjClosure(G1CollectedHeap* g1, ConcurrentMark* cm, + HeapRegion* hr, + OopsInHeapRegionClosure* update_rset_cl, + bool during_initial_mark, + bool during_conc_mark, + uint worker_id) : + _g1(g1), _cm(cm), _hr(hr), _marked_bytes(0), + _update_rset_cl(update_rset_cl), + _during_initial_mark(during_initial_mark), + _during_conc_mark(during_conc_mark), + _worker_id(worker_id), + _end_of_last_gap(hr->bottom()), + _last_gap_threshold(hr->bottom()), + _last_obj_threshold(hr->bottom()) { } + + size_t marked_bytes() { return _marked_bytes; } + + // + // The original idea here was to coalesce evacuated and dead objects. + // However that caused complications with the block offset table (BOT). + // In particular if there were two TLABs, one of them partially refined. + // |----- TLAB_1--------|----TLAB_2-~~~(partially refined part)~~~| + // The BOT entries of the unrefined part of TLAB_2 point to the start + // of TLAB_2. If the last object of the TLAB_1 and the first object + // of TLAB_2 are coalesced, then the cards of the unrefined part + // would point into middle of the filler object. + // The current approach is to not coalesce and leave the BOT contents intact. + // + // + // We now reset the BOT when we start the object iteration over the + // region and refine its entries for every object we come across. So + // the above comment is not really relevant and we should be able + // to coalesce dead objects if we want to. + void do_object(oop obj) { + HeapWord* obj_addr = (HeapWord*) obj; + assert(_hr->is_in(obj_addr), "sanity"); + size_t obj_size = obj->size(); + HeapWord* obj_end = obj_addr + obj_size; + + if (_end_of_last_gap != obj_addr) { + // there was a gap before obj_addr + _last_gap_threshold = _hr->cross_threshold(_end_of_last_gap, obj_addr); + } + + if (obj->is_forwarded() && obj->forwardee() == obj) { + // The object failed to move. + + // We consider all objects that we find self-forwarded to be + // live. What we'll do is that we'll update the prev marking + // info so that they are all under PTAMS and explicitly marked. + if (!_cm->isPrevMarked(obj)) { + _cm->markPrev(obj); + } + if (_during_initial_mark) { + // For the next marking info we'll only mark the + // self-forwarded objects explicitly if we are during + // initial-mark (since, normally, we only mark objects pointed + // to by roots if we succeed in copying them). By marking all + // self-forwarded objects we ensure that we mark any that are + // still pointed to be roots. During concurrent marking, and + // after initial-mark, we don't need to mark any objects + // explicitly and all objects in the CSet are considered + // (implicitly) live. So, we won't mark them explicitly and + // we'll leave them over NTAMS. + _cm->grayRoot(obj, obj_size, _worker_id, _hr); + } + _marked_bytes += (obj_size * HeapWordSize); + obj->set_mark(markOopDesc::prototype()); + + // While we were processing RSet buffers during the collection, + // we actually didn't scan any cards on the collection set, + // since we didn't want to update remembered sets with entries + // that point into the collection set, given that live objects + // from the collection set are about to move and such entries + // will be stale very soon. + // This change also dealt with a reliability issue which + // involved scanning a card in the collection set and coming + // across an array that was being chunked and looking malformed. + // The problem is that, if evacuation fails, we might have + // remembered set entries missing given that we skipped cards on + // the collection set. So, we'll recreate such entries now. + obj->oop_iterate(_update_rset_cl); + } else { + + // The object has been either evacuated or is dead. Fill it with a + // dummy object. + MemRegion mr(obj_addr, obj_size); + CollectedHeap::fill_with_object(mr); + + // must nuke all dead objects which we skipped when iterating over the region + _cm->clearRangePrevBitmap(MemRegion(_end_of_last_gap, obj_end)); + } + _end_of_last_gap = obj_end; + _last_obj_threshold = _hr->cross_threshold(obj_addr, obj_end); + } +}; + +class RemoveSelfForwardPtrHRClosure: public HeapRegionClosure { + G1CollectedHeap* _g1h; + ConcurrentMark* _cm; + uint _worker_id; + HeapRegionClaimer* _hrclaimer; + + DirtyCardQueue _dcq; + UpdateRSetDeferred _update_rset_cl; + +public: + RemoveSelfForwardPtrHRClosure(G1CollectedHeap* g1h, + uint worker_id, + HeapRegionClaimer* hrclaimer) : + _g1h(g1h), _dcq(&g1h->dirty_card_queue_set()), _update_rset_cl(g1h, &_dcq), + _worker_id(worker_id), _cm(_g1h->concurrent_mark()), _hrclaimer(hrclaimer) { + } + + bool doHeapRegion(HeapRegion *hr) { + bool during_initial_mark = _g1h->g1_policy()->during_initial_mark_pause(); + bool during_conc_mark = _g1h->mark_in_progress(); + + assert(!hr->is_humongous(), "sanity"); + assert(hr->in_collection_set(), "bad CS"); + + if (_hrclaimer->claim_region(hr->hrm_index())) { + if (hr->evacuation_failed()) { + RemoveSelfForwardPtrObjClosure rspc(_g1h, _cm, hr, &_update_rset_cl, + during_initial_mark, + during_conc_mark, + _worker_id); + + hr->note_self_forwarding_removal_start(during_initial_mark, + during_conc_mark); + _g1h->check_bitmaps("Self-Forwarding Ptr Removal", hr); + + // In the common case (i.e. when there is no evacuation + // failure) we make sure that the following is done when + // the region is freed so that it is "ready-to-go" when it's + // re-allocated. However, when evacuation failure happens, a + // region will remain in the heap and might ultimately be added + // to a CSet in the future. So we have to be careful here and + // make sure the region's RSet is ready for parallel iteration + // whenever this might be required in the future. + hr->rem_set()->reset_for_par_iteration(); + hr->reset_bot(); + _update_rset_cl.set_region(hr); + hr->object_iterate(&rspc); + + hr->rem_set()->clean_strong_code_roots(hr); + + hr->note_self_forwarding_removal_end(during_initial_mark, + during_conc_mark, + rspc.marked_bytes()); + } + } + return false; + } +}; + +G1ParRemoveSelfForwardPtrsTask::G1ParRemoveSelfForwardPtrsTask(G1CollectedHeap* g1h) : + AbstractGangTask("G1 Remove Self-forwarding Pointers"), _g1h(g1h), + _hrclaimer(g1h->workers()->active_workers()) {} + +void G1ParRemoveSelfForwardPtrsTask::work(uint worker_id) { + RemoveSelfForwardPtrHRClosure rsfp_cl(_g1h, worker_id, &_hrclaimer); + + HeapRegion* hr = _g1h->start_cset_region_for_worker(worker_id); + _g1h->collection_set_iterate_from(hr, &rsfp_cl); +} diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/g1/g1EvacFailure.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1EvacFailure.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1EvacFailure.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -25,229 +25,24 @@ #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1EVACFAILURE_HPP #define SHARE_VM_GC_IMPLEMENTATION_G1_G1EVACFAILURE_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/g1_globals.hpp" -#include "gc_implementation/g1/g1OopClosures.inline.hpp" -#include "gc_implementation/g1/heapRegion.hpp" -#include "gc_implementation/g1/heapRegionRemSet.hpp" +#include "gc_implementation/g1/g1OopClosures.hpp" +#include "gc_implementation/g1/heapRegionManager.hpp" +#include "utilities/globalDefinitions.hpp" #include "utilities/workgroup.hpp" -// Closures and tasks associated with any self-forwarding pointers -// installed as a result of an evacuation failure. - -class UpdateRSetDeferred : public OopsInHeapRegionClosure { -private: - G1CollectedHeap* _g1; - DirtyCardQueue *_dcq; - G1SATBCardTableModRefBS* _ct_bs; - -public: - UpdateRSetDeferred(G1CollectedHeap* g1, DirtyCardQueue* dcq) : - _g1(g1), _ct_bs(_g1->g1_barrier_set()), _dcq(dcq) {} - - virtual void do_oop(narrowOop* p) { do_oop_work(p); } - virtual void do_oop( oop* p) { do_oop_work(p); } - template void do_oop_work(T* p) { - assert(_from->is_in_reserved(p), "paranoia"); - if (!_from->is_in_reserved(oopDesc::load_decode_heap_oop(p)) && - !_from->is_survivor()) { - size_t card_index = _ct_bs->index_for(p); - if (_ct_bs->mark_card_deferred(card_index)) { - _dcq->enqueue((jbyte*)_ct_bs->byte_for_index(card_index)); - } - } - } -}; - -class RemoveSelfForwardPtrObjClosure: public ObjectClosure { -private: - G1CollectedHeap* _g1; - ConcurrentMark* _cm; - HeapRegion* _hr; - size_t _marked_bytes; - OopsInHeapRegionClosure *_update_rset_cl; - bool _during_initial_mark; - bool _during_conc_mark; - uint _worker_id; - HeapWord* _end_of_last_gap; - HeapWord* _last_gap_threshold; - HeapWord* _last_obj_threshold; - -public: - RemoveSelfForwardPtrObjClosure(G1CollectedHeap* g1, ConcurrentMark* cm, - HeapRegion* hr, - OopsInHeapRegionClosure* update_rset_cl, - bool during_initial_mark, - bool during_conc_mark, - uint worker_id) : - _g1(g1), _cm(cm), _hr(hr), _marked_bytes(0), - _update_rset_cl(update_rset_cl), - _during_initial_mark(during_initial_mark), - _during_conc_mark(during_conc_mark), - _worker_id(worker_id), - _end_of_last_gap(hr->bottom()), - _last_gap_threshold(hr->bottom()), - _last_obj_threshold(hr->bottom()) { } - - size_t marked_bytes() { return _marked_bytes; } - - // - // The original idea here was to coalesce evacuated and dead objects. - // However that caused complications with the block offset table (BOT). - // In particular if there were two TLABs, one of them partially refined. - // |----- TLAB_1--------|----TLAB_2-~~~(partially refined part)~~~| - // The BOT entries of the unrefined part of TLAB_2 point to the start - // of TLAB_2. If the last object of the TLAB_1 and the first object - // of TLAB_2 are coalesced, then the cards of the unrefined part - // would point into middle of the filler object. - // The current approach is to not coalesce and leave the BOT contents intact. - // - // - // We now reset the BOT when we start the object iteration over the - // region and refine its entries for every object we come across. So - // the above comment is not really relevant and we should be able - // to coalesce dead objects if we want to. - void do_object(oop obj) { - HeapWord* obj_addr = (HeapWord*) obj; - assert(_hr->is_in(obj_addr), "sanity"); - size_t obj_size = obj->size(); - HeapWord* obj_end = obj_addr + obj_size; - - if (_end_of_last_gap != obj_addr) { - // there was a gap before obj_addr - _last_gap_threshold = _hr->cross_threshold(_end_of_last_gap, obj_addr); - } - - if (obj->is_forwarded() && obj->forwardee() == obj) { - // The object failed to move. +class G1CollectedHeap; - // We consider all objects that we find self-forwarded to be - // live. What we'll do is that we'll update the prev marking - // info so that they are all under PTAMS and explicitly marked. - if (!_cm->isPrevMarked(obj)) { - _cm->markPrev(obj); - } - if (_during_initial_mark) { - // For the next marking info we'll only mark the - // self-forwarded objects explicitly if we are during - // initial-mark (since, normally, we only mark objects pointed - // to by roots if we succeed in copying them). By marking all - // self-forwarded objects we ensure that we mark any that are - // still pointed to be roots. During concurrent marking, and - // after initial-mark, we don't need to mark any objects - // explicitly and all objects in the CSet are considered - // (implicitly) live. So, we won't mark them explicitly and - // we'll leave them over NTAMS. - _cm->grayRoot(obj, obj_size, _worker_id, _hr); - } - _marked_bytes += (obj_size * HeapWordSize); - obj->set_mark(markOopDesc::prototype()); - - // While we were processing RSet buffers during the collection, - // we actually didn't scan any cards on the collection set, - // since we didn't want to update remembered sets with entries - // that point into the collection set, given that live objects - // from the collection set are about to move and such entries - // will be stale very soon. - // This change also dealt with a reliability issue which - // involved scanning a card in the collection set and coming - // across an array that was being chunked and looking malformed. - // The problem is that, if evacuation fails, we might have - // remembered set entries missing given that we skipped cards on - // the collection set. So, we'll recreate such entries now. - obj->oop_iterate(_update_rset_cl); - } else { - - // The object has been either evacuated or is dead. Fill it with a - // dummy object. - MemRegion mr(obj_addr, obj_size); - CollectedHeap::fill_with_object(mr); - - // must nuke all dead objects which we skipped when iterating over the region - _cm->clearRangePrevBitmap(MemRegion(_end_of_last_gap, obj_end)); - } - _end_of_last_gap = obj_end; - _last_obj_threshold = _hr->cross_threshold(obj_addr, obj_end); - } -}; - -class RemoveSelfForwardPtrHRClosure: public HeapRegionClosure { - G1CollectedHeap* _g1h; - ConcurrentMark* _cm; - uint _worker_id; - HeapRegionClaimer* _hrclaimer; - - DirtyCardQueue _dcq; - UpdateRSetDeferred _update_rset_cl; - -public: - RemoveSelfForwardPtrHRClosure(G1CollectedHeap* g1h, - uint worker_id, - HeapRegionClaimer* hrclaimer) : - _g1h(g1h), _dcq(&g1h->dirty_card_queue_set()), _update_rset_cl(g1h, &_dcq), - _worker_id(worker_id), _cm(_g1h->concurrent_mark()), _hrclaimer(hrclaimer) { - } - - bool doHeapRegion(HeapRegion *hr) { - bool during_initial_mark = _g1h->g1_policy()->during_initial_mark_pause(); - bool during_conc_mark = _g1h->mark_in_progress(); - - assert(!hr->is_humongous(), "sanity"); - assert(hr->in_collection_set(), "bad CS"); - - if (_hrclaimer->claim_region(hr->hrm_index())) { - if (hr->evacuation_failed()) { - RemoveSelfForwardPtrObjClosure rspc(_g1h, _cm, hr, &_update_rset_cl, - during_initial_mark, - during_conc_mark, - _worker_id); - - hr->note_self_forwarding_removal_start(during_initial_mark, - during_conc_mark); - _g1h->check_bitmaps("Self-Forwarding Ptr Removal", hr); - - // In the common case (i.e. when there is no evacuation - // failure) we make sure that the following is done when - // the region is freed so that it is "ready-to-go" when it's - // re-allocated. However, when evacuation failure happens, a - // region will remain in the heap and might ultimately be added - // to a CSet in the future. So we have to be careful here and - // make sure the region's RSet is ready for parallel iteration - // whenever this might be required in the future. - hr->rem_set()->reset_for_par_iteration(); - hr->reset_bot(); - _update_rset_cl.set_region(hr); - hr->object_iterate(&rspc); - - hr->rem_set()->clean_strong_code_roots(hr); - - hr->note_self_forwarding_removal_end(during_initial_mark, - during_conc_mark, - rspc.marked_bytes()); - } - } - return false; - } -}; - +// Task to fixup self-forwarding pointers +// installed as a result of an evacuation failure. class G1ParRemoveSelfForwardPtrsTask: public AbstractGangTask { protected: G1CollectedHeap* _g1h; HeapRegionClaimer _hrclaimer; public: - G1ParRemoveSelfForwardPtrsTask(G1CollectedHeap* g1h) : - AbstractGangTask("G1 Remove Self-forwarding Pointers"), _g1h(g1h), - _hrclaimer(g1h->workers()->active_workers()) {} + G1ParRemoveSelfForwardPtrsTask(G1CollectedHeap* g1h); - void work(uint worker_id) { - RemoveSelfForwardPtrHRClosure rsfp_cl(_g1h, worker_id, &_hrclaimer); - - HeapRegion* hr = _g1h->start_cset_region_for_worker(worker_id); - _g1h->collection_set_iterate_from(hr, &rsfp_cl); - } + void work(uint worker_id); }; #endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1EVACFAILURE_HPP diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -27,6 +27,7 @@ #include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" #include "gc_implementation/g1/heapRegion.hpp" #include "gc_implementation/g1/satbQueue.hpp" +#include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/orderAccess.inline.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -28,7 +28,7 @@ #include "gc_implementation/g1/g1RegionToSpaceMapper.hpp" #include "memory/cardTableModRefBS.hpp" #include "memory/memRegion.hpp" -#include "oops/oop.inline.hpp" +#include "oops/oop.hpp" #include "utilities/macros.hpp" class DirtyCardQueueSet; diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/g1/g1StringDedup.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedup.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1StringDedup.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 "classfile/javaClasses.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" @@ -51,7 +51,7 @@ } bool G1StringDedup::is_candidate_from_mark(oop obj) { - if (java_lang_String::is_instance(obj)) { + if (java_lang_String::is_instance_inlined(obj)) { bool from_young = G1CollectedHeap::heap()->heap_region_containing_raw(obj)->is_young(); if (from_young && obj->age() < StringDeduplicationAgeThreshold) { // Candidate found. String is being evacuated from young to old but has not @@ -73,7 +73,7 @@ } bool G1StringDedup::is_candidate_from_evacuation(bool from_young, bool to_young, oop obj) { - if (from_young && java_lang_String::is_instance(obj)) { + if (from_young && java_lang_String::is_instance_inlined(obj)) { if (to_young && obj->age() == StringDeduplicationAgeThreshold) { // Candidate found. String is being evacuated from young to young and just // reached the deduplication age threshold. diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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,9 +23,11 @@ */ #include "precompiled.hpp" -#include "classfile/javaClasses.hpp" +#include "classfile/javaClasses.inline.hpp" +#include "gc_implementation/g1/g1StringDedup.hpp" #include "gc_implementation/g1/g1StringDedupQueue.hpp" #include "memory/gcLocker.hpp" +#include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/mutexLocker.hpp" #include "utilities/stack.inline.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -24,13 +24,14 @@ #include "precompiled.hpp" #include "classfile/altHashing.hpp" -#include "classfile/javaClasses.hpp" +#include "classfile/javaClasses.inline.hpp" #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" #include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" #include "gc_implementation/g1/g1StringDedupTable.hpp" #include "memory/gcLocker.hpp" #include "memory/padded.inline.hpp" #include "oops/typeArrayOop.hpp" +#include "oops/oop.inline.hpp" #include "runtime/mutexLocker.hpp" // diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/g1/heapRegion.inline.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.inline.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.inline.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -29,6 +29,7 @@ #include "gc_implementation/g1/g1CollectedHeap.hpp" #include "gc_implementation/g1/heapRegion.hpp" #include "memory/space.hpp" +#include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" // This version requires locking. diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -34,12 +34,11 @@ #include "gc_implementation/g1/vm_operations_g1.hpp" #include "runtime/interfaceSupport.hpp" -VM_G1CollectForAllocation::VM_G1CollectForAllocation( - unsigned int gc_count_before, - size_t word_size) +VM_G1CollectForAllocation::VM_G1CollectForAllocation(uint gc_count_before, + size_t word_size) : VM_G1OperationWithAllocRequest(gc_count_before, word_size, GCCause::_allocation_failure) { - guarantee(word_size > 0, "an allocation should always be requested"); + guarantee(word_size != 0, "An allocation should always be requested with this operation."); } void VM_G1CollectForAllocation::doit() { @@ -57,12 +56,11 @@ g1h->do_full_collection(false /* clear_all_soft_refs */); } -VM_G1IncCollectionPause::VM_G1IncCollectionPause( - unsigned int gc_count_before, - size_t word_size, - bool should_initiate_conc_mark, - double target_pause_time_ms, - GCCause::Cause gc_cause) +VM_G1IncCollectionPause::VM_G1IncCollectionPause(uint gc_count_before, + size_t word_size, + bool should_initiate_conc_mark, + double target_pause_time_ms, + GCCause::Cause gc_cause) : VM_G1OperationWithAllocRequest(gc_count_before, word_size, gc_cause), _should_initiate_conc_mark(should_initiate_conc_mark), _target_pause_time_ms(target_pause_time_ms), @@ -75,7 +73,7 @@ } bool VM_G1IncCollectionPause::doit_prologue() { - bool res = VM_GC_Operation::doit_prologue(); + bool res = VM_G1OperationWithAllocRequest::doit_prologue(); if (!res) { if (_should_initiate_conc_mark) { // The prologue can fail for a couple of reasons. The first is that another GC @@ -165,7 +163,7 @@ } void VM_G1IncCollectionPause::doit_epilogue() { - VM_GC_Operation::doit_epilogue(); + VM_G1OperationWithAllocRequest::doit_epilogue(); // If the pause was initiated by a System.gc() and // +ExplicitGCInvokesConcurrent, we have to wait here for the cycle diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -36,20 +36,17 @@ // - VM_G1CollectForAllocation // - VM_G1IncCollectionPause -class VM_G1OperationWithAllocRequest: public VM_GC_Operation { +class VM_G1OperationWithAllocRequest : public VM_CollectForAllocation { protected: - size_t _word_size; - HeapWord* _result; bool _pause_succeeded; AllocationContext_t _allocation_context; public: - VM_G1OperationWithAllocRequest(unsigned int gc_count_before, - size_t word_size, + VM_G1OperationWithAllocRequest(uint gc_count_before, + size_t word_size, GCCause::Cause gc_cause) - : VM_GC_Operation(gc_count_before, gc_cause), - _word_size(word_size), _result(NULL), _pause_succeeded(false) { } - HeapWord* result() { return _result; } + : VM_CollectForAllocation(word_size, gc_count_before, gc_cause), + _pause_succeeded(false) {} bool pause_succeeded() { return _pause_succeeded; } void set_allocation_context(AllocationContext_t context) { _allocation_context = context; } AllocationContext_t allocation_context() { return _allocation_context; } @@ -57,8 +54,8 @@ class VM_G1CollectFull: public VM_GC_Operation { public: - VM_G1CollectFull(unsigned int gc_count_before, - unsigned int full_gc_count_before, + VM_G1CollectFull(uint gc_count_before, + uint full_gc_count_before, GCCause::Cause cause) : VM_GC_Operation(gc_count_before, cause, full_gc_count_before, true) { } virtual VMOp_Type type() const { return VMOp_G1CollectFull; } @@ -70,7 +67,7 @@ class VM_G1CollectForAllocation: public VM_G1OperationWithAllocRequest { public: - VM_G1CollectForAllocation(unsigned int gc_count_before, + VM_G1CollectForAllocation(uint gc_count_before, size_t word_size); virtual VMOp_Type type() const { return VMOp_G1CollectForAllocation; } virtual void doit(); @@ -84,9 +81,9 @@ bool _should_initiate_conc_mark; bool _should_retry_gc; double _target_pause_time_ms; - unsigned int _old_marking_cycles_completed_before; + uint _old_marking_cycles_completed_before; public: - VM_G1IncCollectionPause(unsigned int gc_count_before, + VM_G1IncCollectionPause(uint gc_count_before, size_t word_size, bool should_initiate_conc_mark, double target_pause_time_ms, diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -126,7 +126,9 @@ bool ObjectStartArray::object_starts_in_range(HeapWord* start_addr, HeapWord* end_addr) const { - assert(start_addr <= end_addr, "range is wrong"); + assert(start_addr <= end_addr, + err_msg("Range is wrong. start_addr (" PTR_FORMAT ") is after end_addr (" PTR_FORMAT ")", + p2i(start_addr), p2i(end_addr))); if (start_addr > end_addr) { return false; } diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.hpp --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -119,8 +119,13 @@ MemRegion covered_region() { return _covered_region; } +#define assert_covered_region_contains(addr) \ + assert(_covered_region.contains(addr), \ + err_msg(#addr " (" PTR_FORMAT ") is not in covered region [" PTR_FORMAT ", " PTR_FORMAT "]", \ + p2i(addr), p2i(_covered_region.start()), p2i(_covered_region.end()))) + void allocate_block(HeapWord* p) { - assert(_covered_region.contains(p), "Must be in covered region"); + assert_covered_region_contains(p); jbyte* block = block_for_addr(p); HeapWord* block_base = addr_for_block(block); size_t offset = pointer_delta(p, block_base, sizeof(HeapWord*)); @@ -135,7 +140,7 @@ // object in that block. Scroll backwards by one, and the first // object hit should be at the beginning of the block HeapWord* object_start(HeapWord* addr) const { - assert(_covered_region.contains(addr), "Must be in covered region"); + assert_covered_region_contains(addr); jbyte* block = block_for_addr(addr); HeapWord* scroll_forward = offset_addr_for_block(block--); while (scroll_forward > addr) { @@ -153,13 +158,14 @@ } bool is_block_allocated(HeapWord* addr) { - assert(_covered_region.contains(addr), "Must be in covered region"); + assert_covered_region_contains(addr); jbyte* block = block_for_addr(addr); if (*block == clean_block) return false; return true; } +#undef assert_covered_region_contains // Return true if an object starts in the range of heap addresses. // If an object starts at an address corresponding to diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -260,7 +260,7 @@ uint loop_count = 0; uint gc_count = 0; - int gclocker_stalled_count = 0; + uint gclocker_stalled_count = 0; while (result == NULL) { // We don't want to have multiple collections for a single filled generation. @@ -520,8 +520,8 @@ assert(!Heap_lock->owned_by_self(), "this thread should not own the Heap_lock"); - unsigned int gc_count = 0; - unsigned int full_gc_count = 0; + uint gc_count = 0; + uint full_gc_count = 0; { MutexLocker ml(Heap_lock); // This value is guarded by the Heap_lock diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.cpp --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -32,12 +32,10 @@ #include "utilities/dtrace.hpp" // The following methods are used by the parallel scavenge collector -VM_ParallelGCFailedAllocation::VM_ParallelGCFailedAllocation(size_t size, - unsigned int gc_count) : - VM_GC_Operation(gc_count, GCCause::_allocation_failure), - _size(size), - _result(NULL) -{ +VM_ParallelGCFailedAllocation::VM_ParallelGCFailedAllocation(size_t word_size, + uint gc_count) : + VM_CollectForAllocation(word_size, gc_count, GCCause::_allocation_failure) { + assert(word_size != 0, "An allocation should always be requested with this operation."); } void VM_ParallelGCFailedAllocation::doit() { @@ -47,7 +45,7 @@ assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "must be a ParallelScavengeHeap"); GCCauseSetter gccs(heap, _gc_cause); - _result = heap->failed_mem_allocate(_size); + _result = heap->failed_mem_allocate(_word_size); if (_result == NULL && GC_locker::is_active_and_needs_gc()) { set_gc_locked(); @@ -55,8 +53,8 @@ } // Only used for System.gc() calls -VM_ParallelGCSystemGC::VM_ParallelGCSystemGC(unsigned int gc_count, - unsigned int full_gc_count, +VM_ParallelGCSystemGC::VM_ParallelGCSystemGC(uint gc_count, + uint full_gc_count, GCCause::Cause gc_cause) : VM_GC_Operation(gc_count, gc_cause, full_gc_count, true /* full */) { diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.hpp --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -29,26 +29,19 @@ #include "gc_implementation/shared/vmGCOperations.hpp" #include "gc_interface/gcCause.hpp" -class VM_ParallelGCFailedAllocation: public VM_GC_Operation { - private: - size_t _size; - HeapWord* _result; - +class VM_ParallelGCFailedAllocation : public VM_CollectForAllocation { public: - VM_ParallelGCFailedAllocation(size_t size, unsigned int gc_count); + VM_ParallelGCFailedAllocation(size_t word_size, uint gc_count); virtual VMOp_Type type() const { return VMOp_ParallelGCFailedAllocation; } virtual void doit(); - - HeapWord* result() const { return _result; } }; class VM_ParallelGCSystemGC: public VM_GC_Operation { public: - VM_ParallelGCSystemGC(unsigned int gc_count, unsigned int full_gc_count, - GCCause::Cause gc_cause); + VM_ParallelGCSystemGC(uint gc_count, uint full_gc_count, GCCause::Cause gc_cause); virtual VMOp_Type type() const { return VMOp_ParallelGCSystemGC; } virtual void doit(); }; diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/shared/gcTrace.cpp --- a/hotspot/src/share/vm/gc_implementation/shared/gcTrace.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/shared/gcTrace.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -31,6 +31,7 @@ #include "gc_implementation/shared/objectCountEventSender.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" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.cpp --- a/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -41,6 +41,11 @@ #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" #endif // INCLUDE_ALL_GCS +VM_GC_Operation::~VM_GC_Operation() { + CollectedHeap* ch = Universe::heap(); + ch->collector_policy()->set_all_soft_refs_clear(false); +} + // The same dtrace probe can't be inserted in two different files, so we // have to call it here, so it's only in one file. Can't create new probes // for the other file anymore. The dtrace probes have to remain stable. @@ -179,10 +184,10 @@ GenCollectedHeap* gch = GenCollectedHeap::heap(); GCCauseSetter gccs(gch, _gc_cause); - _res = gch->satisfy_failed_allocation(_size, _tlab); - assert(gch->is_in_reserved_or_null(_res), "result not in heap"); + _result = gch->satisfy_failed_allocation(_word_size, _tlab); + assert(gch->is_in_reserved_or_null(_result), "result not in heap"); - if (_res == NULL && GC_locker::is_active_and_needs_gc()) { + if (_result == NULL && GC_locker::is_active_and_needs_gc()) { set_gc_locked(); } } diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.hpp --- a/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -25,6 +25,7 @@ #ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_VMGCOPERATIONS_HPP #define SHARE_VM_GC_IMPLEMENTATION_SHARED_VMGCOPERATIONS_HPP +#include "gc_interface/collectedHeap.hpp" #include "memory/heapInspection.hpp" #include "runtime/handles.hpp" #include "runtime/jniHandles.hpp" @@ -38,11 +39,12 @@ // VM_Operation // VM_GC_Operation // VM_GC_HeapInspection -// VM_GenCollectForAllocation // VM_GenCollectFull // VM_GenCollectFullConcurrent -// VM_ParallelGCFailedAllocation // VM_ParallelGCSystemGC +// VM_CollectForAllocation +// VM_GenCollectForAllocation +// VM_ParallelGCFailedAllocation // VM_GC_Operation // - implements methods common to all classes in the hierarchy: // prevents multiple gc requests and manages lock on heap; @@ -51,6 +53,7 @@ // - prints class histogram on SIGBREAK if PrintClassHistogram // is specified; and also the attach "inspectheap" operation // +// VM_CollectForAllocation // VM_GenCollectForAllocation // VM_ParallelGCFailedAllocation // - this operation is invoked when allocation is failed; @@ -66,13 +69,13 @@ class VM_GC_Operation: public VM_Operation { protected: - BasicLock _pending_list_basic_lock; // for refs pending list notification (PLL) - unsigned int _gc_count_before; // gc count before acquiring PLL - unsigned int _full_gc_count_before; // full gc count before acquiring PLL - bool _full; // whether a "full" collection - bool _prologue_succeeded; // whether doit_prologue succeeded + BasicLock _pending_list_basic_lock; // for refs pending list notification (PLL) + uint _gc_count_before; // gc count before acquiring PLL + uint _full_gc_count_before; // full gc count before acquiring PLL + bool _full; // whether a "full" collection + bool _prologue_succeeded; // whether doit_prologue succeeded GCCause::Cause _gc_cause; // the putative cause for this gc op - bool _gc_locked; // will be set if gc was locked + bool _gc_locked; // will be set if gc was locked virtual bool skip_operation() const; @@ -81,9 +84,9 @@ void release_and_notify_pending_list_lock(); public: - VM_GC_Operation(unsigned int gc_count_before, + VM_GC_Operation(uint gc_count_before, GCCause::Cause _cause, - unsigned int full_gc_count_before = 0, + uint full_gc_count_before = 0, bool full = false) { _full = full; _prologue_succeeded = false; @@ -104,10 +107,7 @@ // mutators have run. Soft refs will be cleared again in this // collection. } - ~VM_GC_Operation() { - CollectedHeap* ch = Universe::heap(); - ch->collector_policy()->set_all_soft_refs_clear(false); - } + ~VM_GC_Operation(); // Acquire the reference synchronization lock virtual bool doit_prologue(); @@ -160,38 +160,46 @@ bool collect(); }; +class VM_CollectForAllocation : public VM_GC_Operation { + protected: + size_t _word_size; // Size of object to be allocated (in number of words) + HeapWord* _result; // Allocation result (NULL if allocation failed) -class VM_GenCollectForAllocation: public VM_GC_Operation { + public: + VM_CollectForAllocation(size_t word_size, uint gc_count_before, GCCause::Cause cause) + : VM_GC_Operation(gc_count_before, cause), _result(NULL), _word_size(word_size) {} + + HeapWord* result() const { + return _result; + } +}; + +class VM_GenCollectForAllocation : public VM_CollectForAllocation { private: - HeapWord* _res; - size_t _size; // size of object to be allocated. bool _tlab; // alloc is of a tlab. public: - VM_GenCollectForAllocation(size_t size, + VM_GenCollectForAllocation(size_t word_size, bool tlab, - unsigned int gc_count_before) - : VM_GC_Operation(gc_count_before, GCCause::_allocation_failure), - _size(size), + uint gc_count_before) + : VM_CollectForAllocation(word_size, gc_count_before, GCCause::_allocation_failure), _tlab(tlab) { - _res = NULL; + assert(word_size != 0, "An allocation should always be requested with this operation."); } ~VM_GenCollectForAllocation() {} virtual VMOp_Type type() const { return VMOp_GenCollectForAllocation; } virtual void doit(); - HeapWord* result() const { return _res; } }; - // VM operation to invoke a collection of the heap as a // GenCollectedHeap heap. class VM_GenCollectFull: public VM_GC_Operation { private: int _max_level; public: - VM_GenCollectFull(unsigned int gc_count_before, - unsigned int full_gc_count_before, + VM_GenCollectFull(uint gc_count_before, + uint full_gc_count_before, GCCause::Cause gc_cause, - int max_level) + int max_level) : VM_GC_Operation(gc_count_before, gc_cause, full_gc_count_before, true /* full */), _max_level(max_level) { } ~VM_GenCollectFull() {} @@ -208,9 +216,9 @@ public: VM_CollectForMetadataAllocation(ClassLoaderData* loader_data, size_t size, Metaspace::MetadataType mdtype, - unsigned int gc_count_before, - unsigned int full_gc_count_before, - GCCause::Cause gc_cause) + uint gc_count_before, + uint full_gc_count_before, + GCCause::Cause gc_cause) : VM_GC_Operation(gc_count_before, gc_cause, full_gc_count_before, true), _loader_data(loader_data), _size(size), _mdtype(mdtype), _result(NULL) { } diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_interface/collectedHeap.cpp --- a/hotspot/src/share/vm/gc_interface/collectedHeap.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_interface/collectedHeap.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -32,6 +32,7 @@ #include "gc_interface/allocTracer.hpp" #include "gc_interface/collectedHeap.hpp" #include "gc_interface/collectedHeap.inline.hpp" +#include "memory/barrierSet.inline.hpp" #include "memory/metaspace.hpp" #include "oops/oop.inline.hpp" #include "oops/instanceMirrorKlass.hpp" @@ -124,6 +125,14 @@ } } +void CollectedHeap::print_on_error(outputStream* st) const { + st->print_cr("Heap:"); + print_extended_on(st); + st->cr(); + + _barrier_set->print_on(st); +} + void CollectedHeap::register_nmethod(nmethod* nm) { assert_locked_or_safepoint(CodeCache_lock); } diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/gc_interface/collectedHeap.hpp --- a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/gc_interface/collectedHeap.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -28,7 +28,6 @@ #include "gc_interface/gcCause.hpp" #include "gc_implementation/shared/gcWhen.hpp" #include "memory/allocation.hpp" -#include "memory/barrierSet.hpp" #include "runtime/handles.hpp" #include "runtime/perfData.hpp" #include "runtime/safepoint.hpp" @@ -576,13 +575,7 @@ print_on(st); } - virtual void print_on_error(outputStream* st) const { - st->print_cr("Heap:"); - print_extended_on(st); - st->cr(); - - _barrier_set->print_on(st); - } + virtual void print_on_error(outputStream* st) const; // Print all GC threads (other than the VM thread) // used by this heap. diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/interpreter/bytecodeTracer.cpp --- a/hotspot/src/share/vm/interpreter/bytecodeTracer.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/interpreter/bytecodeTracer.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/javaClasses.inline.hpp" #include "interpreter/bytecodeHistogram.hpp" #include "interpreter/bytecodeTracer.hpp" #include "interpreter/bytecodes.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/interpreter/interpreterRuntime.cpp --- a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/javaClasses.inline.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" #include "compiler/compileBroker.hpp" @@ -38,6 +39,7 @@ #include "oops/instanceKlass.hpp" #include "oops/methodData.hpp" #include "oops/objArrayKlass.hpp" +#include "oops/objArrayOop.inline.hpp" #include "oops/oop.inline.hpp" #include "oops/symbol.hpp" #include "prims/jvmtiExport.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/interpreter/linkResolver.cpp --- a/hotspot/src/share/vm/interpreter/linkResolver.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/interpreter/linkResolver.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -35,6 +35,7 @@ #include "memory/universe.inline.hpp" #include "oops/instanceKlass.hpp" #include "oops/objArrayOop.hpp" +#include "oops/oop.inline.hpp" #include "prims/methodHandles.hpp" #include "prims/nativeLookup.hpp" #include "runtime/compilationPolicy.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/memory/barrierSet.hpp --- a/hotspot/src/share/vm/memory/barrierSet.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/memory/barrierSet.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -160,7 +160,7 @@ // (For efficiency reasons, this operation is specialized for certain // barrier types. Semantically, it should be thought of as a call to the // virtual "_work" function below, which must implement the barrier.) - inline void write_region(MemRegion mr); + void write_region(MemRegion mr); protected: virtual void write_region_work(MemRegion mr) = 0; public: diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/memory/barrierSet.inline.hpp --- a/hotspot/src/share/vm/memory/barrierSet.inline.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/memory/barrierSet.inline.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -26,7 +26,7 @@ #define SHARE_VM_MEMORY_BARRIERSET_INLINE_HPP #include "memory/barrierSet.hpp" -#include "memory/cardTableModRefBS.hpp" +#include "memory/cardTableModRefBS.inline.hpp" // Inline functions of BarrierSet, which de-virtualize certain // performance-critical calls when the barrier is the most common @@ -76,7 +76,7 @@ } -void BarrierSet::write_region(MemRegion mr) { +inline void BarrierSet::write_region(MemRegion mr) { if (kind() == CardTableModRef) { ((CardTableModRefBS*)this)->inline_write_region(mr); } else { diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/memory/cardTableModRefBS.cpp --- a/hotspot/src/share/vm/memory/cardTableModRefBS.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/memory/cardTableModRefBS.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -24,7 +24,7 @@ #include "precompiled.hpp" #include "memory/allocation.inline.hpp" -#include "memory/cardTableModRefBS.hpp" +#include "memory/cardTableModRefBS.inline.hpp" #include "memory/cardTableRS.hpp" #include "memory/sharedHeap.hpp" #include "memory/space.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/memory/cardTableModRefBS.hpp --- a/hotspot/src/share/vm/memory/cardTableModRefBS.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/memory/cardTableModRefBS.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -27,7 +27,6 @@ #include "memory/modRefBarrierSet.hpp" #include "oops/oop.hpp" -#include "oops/oop.inline2.hpp" // This kind of "BarrierSet" allows a "CollectedHeap" to detect and // enumerate ref fields that have been modified (since the last @@ -45,6 +44,7 @@ class OopsInGenClosure; class DirtyCardToOopClosure; class ClearNoncleanCardWrapper; +class CardTableRS; class CardTableModRefBS: public ModRefBarrierSet { // Some classes get to look at some private stuff. @@ -333,15 +333,7 @@ template inline void inline_write_ref_field_pre(T* field, oop newVal) {} - template inline void inline_write_ref_field(T* field, oop newVal, bool release) { - jbyte* byte = byte_for((void*)field); - if (release) { - // Perform a releasing store if requested. - OrderAccess::release_store((volatile jbyte*) byte, dirty_card); - } else { - *byte = dirty_card; - } - } + template inline void inline_write_ref_field(T* field, oop newVal, bool release); // These are used by G1, when it uses the card table as a temporary data // structure for card claiming. diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/memory/cardTableModRefBS.inline.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/src/share/vm/memory/cardTableModRefBS.inline.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -0,0 +1,42 @@ +/* + * 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 + * 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_CARDTABLEMODREFBS_INLINE_HPP +#define SHARE_VM_MEMORY_CARDTABLEMODREFBS_INLINE_HPP + +#include "memory/cardTableModRefBS.hpp" +#include "oops/oopsHierarchy.hpp" +#include "runtime/orderAccess.inline.hpp" + +template inline void CardTableModRefBS::inline_write_ref_field(T* field, oop newVal, bool release) { + jbyte* byte = byte_for((void*)field); + if (release) { + // Perform a releasing store if requested. + OrderAccess::release_store((volatile jbyte*) byte, dirty_card); + } else { + *byte = dirty_card; + } +} + +#endif // SHARE_VM_MEMORY_CARDTABLEMODREFBS_INLINE_HPP diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/memory/collectorPolicy.cpp --- a/hotspot/src/share/vm/memory/collectorPolicy.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/memory/collectorPolicy.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -597,7 +597,7 @@ HeapWord* result = NULL; // Loop until the allocation is satisfied, or unsatisfied after GC. - for (int try_count = 1, gclocker_stalled_count = 0; /* return or throw */; try_count += 1) { + for (uint try_count = 1, gclocker_stalled_count = 0; /* return or throw */; try_count += 1) { HandleMark hm; // Discard any handles allocated in each iteration. // First allocation attempt is lock-free. @@ -611,7 +611,7 @@ return result; } } - unsigned int gc_count_before; // Read inside the Heap_lock locked region. + uint gc_count_before; // Read inside the Heap_lock locked region. { MutexLocker ml(Heap_lock); if (PrintGC && Verbose) { diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/memory/genCollectedHeap.cpp --- a/hotspot/src/share/vm/memory/genCollectedHeap.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/memory/genCollectedHeap.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -41,7 +41,6 @@ #include "memory/sharedHeap.hpp" #include "memory/space.hpp" #include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/fprofiler.hpp" #include "runtime/handles.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/memory/heapInspection.cpp --- a/hotspot/src/share/vm/memory/heapInspection.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/memory/heapInspection.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -28,6 +28,7 @@ #include "memory/genCollectedHeap.hpp" #include "memory/heapInspection.hpp" #include "memory/resourceArea.hpp" +#include "oops/oop.inline.hpp" #include "runtime/os.hpp" #include "utilities/globalDefinitions.hpp" #include "utilities/macros.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/memory/heapInspection.hpp --- a/hotspot/src/share/vm/memory/heapInspection.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/memory/heapInspection.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -25,8 +25,9 @@ #ifndef SHARE_VM_MEMORY_HEAPINSPECTION_HPP #define SHARE_VM_MEMORY_HEAPINSPECTION_HPP -#include "memory/allocation.inline.hpp" -#include "oops/oop.inline.hpp" +#include "memory/allocation.hpp" +#include "oops/objArrayOop.hpp" +#include "oops/oop.hpp" #include "oops/annotations.hpp" #include "utilities/macros.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/memory/space.cpp --- a/hotspot/src/share/vm/memory/space.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/memory/space.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -36,7 +36,6 @@ #include "memory/space.inline.hpp" #include "memory/universe.inline.hpp" #include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" #include "runtime/java.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/prefetch.inline.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/memory/space.inline.hpp --- a/hotspot/src/share/vm/memory/space.inline.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/memory/space.inline.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -29,6 +29,7 @@ #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 "memory/universe.hpp" #include "runtime/prefetch.inline.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/memory/universe.cpp --- a/hotspot/src/share/vm/memory/universe.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/memory/universe.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -50,6 +50,7 @@ #include "oops/instanceKlass.hpp" #include "oops/instanceMirrorKlass.hpp" #include "oops/instanceRefKlass.hpp" +#include "oops/objArrayOop.inline.hpp" #include "oops/oop.inline.hpp" #include "oops/typeArrayKlass.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/oops/compiledICHolder.cpp --- a/hotspot/src/share/vm/oops/compiledICHolder.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/oops/compiledICHolder.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -26,7 +26,6 @@ #include "oops/compiledICHolder.hpp" #include "oops/klass.hpp" #include "oops/method.hpp" -#include "oops/oop.inline2.hpp" #include "runtime/atomic.inline.hpp" volatile int CompiledICHolder::_live_count; diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/oops/constantPool.cpp --- a/hotspot/src/share/vm/oops/constantPool.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/oops/constantPool.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -24,7 +24,7 @@ #include "precompiled.hpp" #include "classfile/classLoaderData.hpp" -#include "classfile/javaClasses.hpp" +#include "classfile/javaClasses.inline.hpp" #include "classfile/metadataOnStackMark.hpp" #include "classfile/stringTable.hpp" #include "classfile/systemDictionary.hpp" @@ -36,11 +36,14 @@ #include "oops/constantPool.hpp" #include "oops/instanceKlass.hpp" #include "oops/objArrayKlass.hpp" +#include "oops/objArrayOop.inline.hpp" +#include "oops/oop.inline.hpp" #include "runtime/fieldType.hpp" #include "runtime/init.hpp" #include "runtime/javaCalls.hpp" #include "runtime/signature.hpp" #include "runtime/vframe.hpp" +#include "utilities/copy.hpp" PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/oops/cpCache.cpp --- a/hotspot/src/share/vm/oops/cpCache.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/oops/cpCache.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 "interpreter/rewriter.hpp" #include "memory/universe.inline.hpp" #include "oops/cpCache.hpp" -#include "oops/objArrayOop.hpp" +#include "oops/objArrayOop.inline.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" #include "prims/methodHandles.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/oops/klass.cpp --- a/hotspot/src/share/vm/oops/klass.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/oops/klass.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -35,7 +35,7 @@ #include "memory/resourceArea.hpp" #include "oops/instanceKlass.hpp" #include "oops/klass.inline.hpp" -#include "oops/oop.inline2.hpp" +#include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/orderAccess.inline.hpp" #include "trace/traceMacros.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/oops/methodData.cpp --- a/hotspot/src/share/vm/oops/methodData.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/oops/methodData.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -36,6 +36,7 @@ #include "runtime/deoptimization.hpp" #include "runtime/handles.inline.hpp" #include "runtime/orderAccess.inline.hpp" +#include "utilities/copy.hpp" PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/oops/objArrayKlass.cpp --- a/hotspot/src/share/vm/oops/objArrayKlass.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/oops/objArrayKlass.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -35,11 +35,9 @@ #include "memory/universe.inline.hpp" #include "oops/instanceKlass.hpp" #include "oops/klass.inline.hpp" -#include "oops/objArrayKlass.hpp" #include "oops/objArrayKlass.inline.hpp" -#include "oops/objArrayOop.hpp" +#include "oops/objArrayOop.inline.hpp" #include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" #include "oops/symbol.hpp" #include "runtime/handles.inline.hpp" #include "runtime/mutexLocker.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/oops/objArrayOop.hpp --- a/hotspot/src/share/vm/oops/objArrayOop.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/oops/objArrayOop.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -78,15 +78,7 @@ HeapWord* base() const { return (HeapWord*) arrayOopDesc::base(T_OBJECT); } // Accessing - oop obj_at(int index) const { - // With UseCompressedOops decode the narrow oop in the objArray to an - // uncompressed oop. Otherwise this is simply a "*" operator. - if (UseCompressedOops) { - return load_decode_heap_oop(obj_at_addr(index)); - } else { - return load_decode_heap_oop(obj_at_addr(index)); - } - } + oop obj_at(int index) const; void obj_at_put(int index, oop value) { if (UseCompressedOops) { diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/oops/objArrayOop.inline.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/src/share/vm/oops/objArrayOop.inline.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -0,0 +1,42 @@ +/* + * 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. + * + */ + +#ifndef SHARE_VM_OOPS_OBJARRAYOOP_INLINE_HPP +#define SHARE_VM_OOPS_OBJARRAYOOP_INLINE_HPP + +#include "oops/objArrayOop.hpp" +#include "oops/oop.inline.hpp" +#include "runtime/globals.hpp" + +inline oop objArrayOopDesc::obj_at(int index) const { + // With UseCompressedOops decode the narrow oop in the objArray to an + // uncompressed oop. Otherwise this is simply a "*" operator. + if (UseCompressedOops) { + return load_decode_heap_oop(obj_at_addr(index)); + } else { + return load_decode_heap_oop(obj_at_addr(index)); + } +} + +#endif // SHARE_VM_OOPS_OBJARRAYOOP_INLINE_HPP diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/oops/oop.cpp --- a/hotspot/src/share/vm/oops/oop.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/oops/oop.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 "classfile/altHashing.hpp" -#include "classfile/javaClasses.hpp" +#include "classfile/javaClasses.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/thread.inline.hpp" @@ -122,3 +122,17 @@ void VerifyOopClosure::do_oop(oop* p) { VerifyOopClosure::do_oop_work(p); } void VerifyOopClosure::do_oop(narrowOop* p) { VerifyOopClosure::do_oop_work(p); } + +// type test operations that doesn't require inclusion of oop.inline.hpp. +bool oopDesc::is_instance_noinline() const { return is_instance(); } +bool oopDesc::is_instanceMirror_noinline() const { return is_instanceMirror(); } +bool oopDesc::is_instanceClassLoader_noline() const { return is_instanceClassLoader(); } +bool oopDesc::is_instanceRef_noline() const { return is_instanceRef(); } +bool oopDesc::is_array_noinline() const { return is_array(); } +bool oopDesc::is_objArray_noinline() const { return is_objArray(); } +bool oopDesc::is_typeArray_noinline() const { return is_typeArray(); } + +bool oopDesc::has_klass_gap() { + // Only has a klass gap when compressed class pointers are used. + return UseCompressedClassPointers; +} diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/oops/oop.hpp --- a/hotspot/src/share/vm/oops/oop.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/oops/oop.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -108,7 +108,7 @@ // to be able to figure out the size of an object knowing its klass. int size_given_klass(Klass* klass); - // type test operations (inlined in oop.inline.h) + // type test operations (inlined in oop.inline.hpp) bool is_instance() const; bool is_instanceMirror() const; bool is_instanceClassLoader() const; @@ -117,6 +117,15 @@ bool is_objArray() const; bool is_typeArray() const; + // type test operations that don't require inclusion of oop.inline.hpp. + bool is_instance_noinline() const; + bool is_instanceMirror_noinline() const; + bool is_instanceClassLoader_noline() const; + bool is_instanceRef_noline() const; + bool is_array_noinline() const; + bool is_objArray_noinline() const; + bool is_typeArray_noinline() const; + private: // field addresses in oop void* field_base(int offset) const; @@ -370,10 +379,15 @@ markOop displaced_mark() const; void set_displaced_mark(markOop m); + static bool has_klass_gap(); + // for code generation - static int mark_offset_in_bytes() { return offset_of(oopDesc, _mark); } - static int klass_offset_in_bytes() { return offset_of(oopDesc, _metadata._klass); } - static int klass_gap_offset_in_bytes(); + static int mark_offset_in_bytes() { return offset_of(oopDesc, _mark); } + static int klass_offset_in_bytes() { return offset_of(oopDesc, _metadata._klass); } + static int klass_gap_offset_in_bytes() { + assert(has_klass_gap(), "only applicable to compressed klass pointers"); + return klass_offset_in_bytes() + sizeof(narrowKlass); + } }; #endif // SHARE_VM_OOPS_OOP_HPP diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/oops/oop.inline.hpp --- a/hotspot/src/share/vm/oops/oop.inline.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/oops/oop.inline.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -71,11 +71,6 @@ } } -inline int oopDesc::klass_gap_offset_in_bytes() { - assert(UseCompressedClassPointers, "only applicable to compressed klass pointers"); - return oopDesc::klass_offset_in_bytes() + sizeof(narrowKlass); -} - inline Klass** oopDesc::klass_addr() { // Only used internally and with CMS and will not work with // UseCompressedOops @@ -602,8 +597,11 @@ klass()->oop_follow_contents(this); } +inline bool oopDesc::is_scavengable() const { + return Universe::heap()->is_scavengable(this); +} + // Used by scavengers - inline bool oopDesc::is_forwarded() const { // The extra heap check is needed since the obj might be locked, in which case the // mark would point to a stack location and have the sentinel bit cleared diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/oops/oop.inline2.hpp --- a/hotspot/src/share/vm/oops/oop.inline2.hpp Mon Feb 16 08:47:39 2015 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2000, 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. - * - */ - -#ifndef SHARE_VM_OOPS_OOP_INLINE2_HPP -#define SHARE_VM_OOPS_OOP_INLINE2_HPP - -#include "gc_interface/collectedHeap.hpp" -#include "memory/generation.hpp" -#include "memory/universe.hpp" -#include "oops/oop.hpp" - -// Implementation of all inlined member functions defined in oop.hpp -// We need a separate file to avoid circular references - -inline bool oopDesc::is_scavengable() const { - return Universe::heap()->is_scavengable(this); -} -#endif // SHARE_VM_OOPS_OOP_INLINE2_HPP diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/opto/callGenerator.cpp --- a/hotspot/src/share/vm/opto/callGenerator.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/opto/callGenerator.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -39,7 +39,7 @@ #include "opto/rootnode.hpp" #include "opto/runtime.hpp" #include "opto/subnode.hpp" - +#include "runtime/sharedRuntime.hpp" // Utility function. const TypeFunc* CallGenerator::tf() const { diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/opto/compile.cpp --- a/hotspot/src/share/vm/opto/compile.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/opto/compile.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -64,6 +64,7 @@ #include "opto/type.hpp" #include "opto/vectornode.hpp" #include "runtime/arguments.hpp" +#include "runtime/sharedRuntime.hpp" #include "runtime/signature.hpp" #include "runtime/stubRoutines.hpp" #include "runtime/timer.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/opto/convertnode.cpp --- a/hotspot/src/share/vm/opto/convertnode.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/opto/convertnode.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -28,6 +28,7 @@ #include "opto/matcher.hpp" #include "opto/phaseX.hpp" #include "opto/subnode.hpp" +#include "runtime/sharedRuntime.hpp" //============================================================================= //------------------------------Identity--------------------------------------- diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/opto/graphKit.cpp --- a/hotspot/src/share/vm/opto/graphKit.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/opto/graphKit.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -3754,6 +3754,17 @@ sync_kit(ideal); } +Node* GraphKit::byte_map_base_node() { + // Get base of card map + CardTableModRefBS* ct = (CardTableModRefBS*)(Universe::heap()->barrier_set()); + assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust users of this code"); + if (ct->byte_map_base != NULL) { + return makecon(TypeRawPtr::make((address)ct->byte_map_base)); + } else { + return null(); + } +} + // vanilla/CMS post barrier // Insert a write-barrier store. This is to let generational GC work; we have // to flag all oop-stores before the next GC point. diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/opto/graphKit.hpp --- a/hotspot/src/share/vm/opto/graphKit.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/opto/graphKit.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -104,16 +104,7 @@ // (See also macro MakeConX in type.hpp, which uses intcon or longcon.) // Helper for byte_map_base - Node* byte_map_base_node() { - // Get base of card map - CardTableModRefBS* ct = (CardTableModRefBS*)(Universe::heap()->barrier_set()); - assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust users of this code"); - if (ct->byte_map_base != NULL) { - return makecon(TypeRawPtr::make((address)ct->byte_map_base)); - } else { - return null(); - } - } + Node* byte_map_base_node(); jint find_int_con(Node* n, jint value_if_unknown) { return _gvn.find_int_con(n, value_if_unknown); diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/opto/lcm.cpp --- a/hotspot/src/share/vm/opto/lcm.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/opto/lcm.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -31,6 +31,7 @@ #include "opto/cfgnode.hpp" #include "opto/machnode.hpp" #include "opto/runtime.hpp" +#include "runtime/sharedRuntime.hpp" // Optimization - Graph Style diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/opto/matcher.cpp --- a/hotspot/src/share/vm/opto/matcher.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/opto/matcher.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -38,6 +38,7 @@ #include "opto/type.hpp" #include "opto/vectornode.hpp" #include "runtime/os.hpp" +#include "runtime/sharedRuntime.hpp" OptoReg::Name OptoReg::c_frame_pointer; diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/opto/memnode.cpp --- a/hotspot/src/share/vm/opto/memnode.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/opto/memnode.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -40,6 +40,7 @@ #include "opto/narrowptrnode.hpp" #include "opto/phaseX.hpp" #include "opto/regmask.hpp" +#include "utilities/copy.hpp" // Portions of code courtesy of Clifford Click diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/opto/parse2.cpp --- a/hotspot/src/share/vm/opto/parse2.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/opto/parse2.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -29,6 +29,7 @@ #include "compiler/compileLog.hpp" #include "interpreter/linkResolver.hpp" #include "memory/universe.inline.hpp" +#include "oops/oop.inline.hpp" #include "opto/addnode.hpp" #include "opto/castnode.hpp" #include "opto/convertnode.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/opto/stringopts.cpp --- a/hotspot/src/share/vm/opto/stringopts.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/opto/stringopts.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved. * 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,6 +34,7 @@ #include "opto/runtime.hpp" #include "opto/stringopts.hpp" #include "opto/subnode.hpp" +#include "runtime/sharedRuntime.hpp" #define __ kit. diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/precompiled/precompiled.hpp --- a/hotspot/src/share/vm/precompiled/precompiled.hpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/precompiled/precompiled.hpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -160,8 +160,6 @@ # include "oops/objArrayKlass.hpp" # include "oops/objArrayOop.hpp" # include "oops/oop.hpp" -# include "oops/oop.inline.hpp" -# include "oops/oop.inline2.hpp" # include "oops/oopsHierarchy.hpp" # include "oops/symbol.hpp" # include "oops/typeArrayKlass.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/prims/forte.cpp --- a/hotspot/src/share/vm/prims/forte.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/prims/forte.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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 @@ -29,7 +29,6 @@ #include "memory/space.hpp" #include "memory/universe.inline.hpp" #include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" #include "prims/forte.hpp" #include "runtime/javaCalls.hpp" #include "runtime/thread.inline.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/prims/jni.cpp --- a/hotspot/src/share/vm/prims/jni.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/prims/jni.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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. * Copyright (c) 2012 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -42,7 +42,7 @@ #include "oops/markOop.hpp" #include "oops/method.hpp" #include "oops/objArrayKlass.hpp" -#include "oops/objArrayOop.hpp" +#include "oops/objArrayOop.inline.hpp" #include "oops/oop.inline.hpp" #include "oops/symbol.hpp" #include "oops/typeArrayKlass.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/prims/jniCheck.cpp --- a/hotspot/src/share/vm/prims/jniCheck.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/prims/jniCheck.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -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,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/javaClasses.inline.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" #include "memory/guardedMemory.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/prims/jvm.cpp --- a/hotspot/src/share/vm/prims/jvm.cpp Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/prims/jvm.cpp Mon Feb 16 21:24:39 2015 +0100 @@ -25,18 +25,21 @@ #include "precompiled.hpp" #include "classfile/classLoader.hpp" #include "classfile/javaAssertions.hpp" -#include "classfile/javaClasses.hpp" +#include "classfile/javaClasses.inline.hpp" #include "classfile/stringTable.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" #include "gc_interface/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/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" #include "prims/jvmtiExport.hpp" diff -r 8d8f9907083d -r 5e7bce2712ac hotspot/src/share/vm/prims/jvmtiEnter.xsl --- a/hotspot/src/share/vm/prims/jvmtiEnter.xsl Mon Feb 16 08:47:39 2015 -0800 +++ b/hotspot/src/share/vm/prims/jvmtiEnter.xsl Mon Feb 16 21:24:39 2015 +0100 @@ -1,6 +1,6 @@