Thu, 20 Nov 2008 16:56:09 -0800
6684579: SoftReference processing can be made more efficient
Summary: For current soft-ref clearing policies, we can decide at marking time if a soft-reference will definitely not be cleared, postponing the decision of whether it will definitely be cleared to the final reference processing phase. This can be especially beneficial in the case of concurrent collectors where the marking is usually concurrent but reference processing is usually not.
Reviewed-by: jmasa
duke@435 | 1 | # |
xdono@631 | 2 | # Copyright 2006-2008 Sun Microsystems, Inc. All Rights Reserved. |
duke@435 | 3 | # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
duke@435 | 4 | # |
duke@435 | 5 | # This code is free software; you can redistribute it and/or modify it |
duke@435 | 6 | # under the terms of the GNU General Public License version 2 only, as |
duke@435 | 7 | # published by the Free Software Foundation. |
duke@435 | 8 | # |
duke@435 | 9 | # This code is distributed in the hope that it will be useful, but WITHOUT |
duke@435 | 10 | # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
duke@435 | 11 | # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
duke@435 | 12 | # version 2 for more details (a copy is included in the LICENSE file that |
duke@435 | 13 | # accompanied this code). |
duke@435 | 14 | # |
duke@435 | 15 | # You should have received a copy of the GNU General Public License version |
duke@435 | 16 | # 2 along with this work; if not, write to the Free Software Foundation, |
duke@435 | 17 | # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
duke@435 | 18 | # |
duke@435 | 19 | # Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
duke@435 | 20 | # CA 95054 USA or visit www.sun.com if you need additional information or |
duke@435 | 21 | # have any questions. |
duke@435 | 22 | # |
duke@435 | 23 | # |
duke@435 | 24 | |
duke@435 | 25 | # The common definitions for hotspot builds. |
duke@435 | 26 | |
duke@435 | 27 | # Default to verbose build logs (show all compile lines): |
duke@435 | 28 | MAKE_VERBOSE=y |
duke@435 | 29 | |
duke@435 | 30 | # Make macros for install files or preparing targets |
duke@435 | 31 | CD=cd |
duke@435 | 32 | CP=cp |
duke@435 | 33 | ECHO=echo |
duke@435 | 34 | GREP=grep |
duke@435 | 35 | MKDIR=mkdir |
duke@435 | 36 | MV=mv |
duke@435 | 37 | PWD=pwd |
duke@435 | 38 | RM=rm -f |
duke@435 | 39 | SED=sed |
duke@435 | 40 | TAR=tar |
duke@435 | 41 | ZIPEXE=zip |
duke@435 | 42 | |
duke@435 | 43 | define install-file |
duke@435 | 44 | @$(MKDIR) -p $(@D) |
duke@435 | 45 | @$(RM) $@ |
duke@435 | 46 | $(CP) $< $@ |
duke@435 | 47 | endef |
duke@435 | 48 | define prep-target |
duke@435 | 49 | @$(MKDIR) -p $(@D) |
duke@435 | 50 | @$(RM) $@ |
duke@435 | 51 | endef |
duke@435 | 52 | |
duke@435 | 53 | # Directory paths and user name |
duke@435 | 54 | # Unless GAMMADIR is set on the command line, search upward from |
duke@435 | 55 | # the current directory for a parent directory containing "src/share/vm". |
duke@435 | 56 | # If that fails, look for $GAMMADIR in the environment. |
duke@435 | 57 | # When the tree of subdirs is built, this setting is stored in each flags.make. |
duke@435 | 58 | GAMMADIR := $(shell until ([ -d dev ]&&echo $${GAMMADIR:-/GAMMADIR/}) || ([ -d src/share/vm ]&&pwd); do cd ..; done) |
duke@435 | 59 | HS_SRC_DIR=$(GAMMADIR)/src |
kamg@526 | 60 | HS_MAKE_DIR=$(GAMMADIR)/make |
duke@435 | 61 | HS_BUILD_DIR=$(GAMMADIR)/build |
duke@435 | 62 | |
duke@435 | 63 | ifeq ($(USER),) |
duke@435 | 64 | USER=$(USERNAME) |
duke@435 | 65 | endif |
duke@435 | 66 | |
duke@435 | 67 | # hotspot version definitions |
duke@435 | 68 | include $(GAMMADIR)/make/hotspot_version |
duke@435 | 69 | |
duke@435 | 70 | # Java versions needed |
duke@435 | 71 | ifeq ($(PREVIOUS_JDK_VERSION),) |
duke@435 | 72 | PREVIOUS_JDK_VERSION=$(JDK_PREVIOUS_VERSION) |
duke@435 | 73 | endif |
duke@435 | 74 | ifeq ($(JDK_MAJOR_VERSION),) |
duke@435 | 75 | JDK_MAJOR_VERSION=$(JDK_MAJOR_VER) |
duke@435 | 76 | endif |
duke@435 | 77 | ifeq ($(JDK_MINOR_VERSION),) |
duke@435 | 78 | JDK_MINOR_VERSION=$(JDK_MINOR_VER) |
duke@435 | 79 | endif |
duke@435 | 80 | ifeq ($(JDK_MICRO_VERSION),) |
duke@435 | 81 | JDK_MICRO_VERSION=$(JDK_MICRO_VER) |
duke@435 | 82 | endif |
duke@435 | 83 | ifeq ($(JDK_MKTG_VERSION),) |
duke@435 | 84 | JDK_MKTG_VERSION=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION) |
duke@435 | 85 | endif |
duke@435 | 86 | ifeq ($(JDK_VERSION),) |
duke@435 | 87 | JDK_VERSION=$(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION) |
duke@435 | 88 | endif |
duke@435 | 89 | ifeq ($(FULL_VERSION),) |
duke@435 | 90 | FULL_VERSION="$(JDK_VERSION)" |
duke@435 | 91 | endif |
duke@435 | 92 | |
duke@435 | 93 | # FULL_VERSION is only used to define JRE_RELEASE_VERSION which is used |
duke@435 | 94 | # as JRE version in VM -Xinternalversion output. |
duke@435 | 95 | ifndef JRE_RELEASE_VERSION |
duke@435 | 96 | JRE_RELEASE_VERSION=$(FULL_VERSION) |
duke@435 | 97 | endif |
duke@435 | 98 | |
duke@435 | 99 | ifndef HOTSPOT_RELEASE_VERSION |
duke@435 | 100 | HOTSPOT_RELEASE_VERSION=$(HS_MAJOR_VER).$(HS_MINOR_VER)-b$(HS_BUILD_NUMBER) |
duke@435 | 101 | endif |
duke@435 | 102 | |
duke@435 | 103 | ifdef HOTSPOT_BUILD_VERSION |
duke@435 | 104 | # specified in command line (PRT build) |
duke@435 | 105 | else |
duke@435 | 106 | ifdef JPRT_BUILD_VERSION |
duke@435 | 107 | # JPR build |
duke@435 | 108 | HOTSPOT_BUILD_VERSION=$(JPRT_BUILD_VERSION) |
duke@435 | 109 | else |
duke@435 | 110 | ifdef COOKED_BUILD_NUMBER |
duke@435 | 111 | # JRE build |
duke@435 | 112 | HOTSPOT_BUILD_VERSION= |
duke@435 | 113 | else |
duke@435 | 114 | HOTSPOT_BUILD_VERSION=internal |
duke@435 | 115 | endif |
duke@435 | 116 | endif |
duke@435 | 117 | endif |
duke@435 | 118 | |
duke@435 | 119 | # Windows should have OS predefined |
duke@435 | 120 | ifeq ($(OS),) |
duke@435 | 121 | OS := $(shell uname -s) |
duke@435 | 122 | HOST := $(shell uname -n) |
duke@435 | 123 | endif |
duke@435 | 124 | |
duke@435 | 125 | # If not SunOS and not Linux, assume Windows |
duke@435 | 126 | ifneq ($(OS), Linux) |
duke@435 | 127 | ifneq ($(OS), SunOS) |
duke@435 | 128 | OSNAME=windows |
duke@435 | 129 | else |
duke@435 | 130 | OSNAME=solaris |
duke@435 | 131 | endif |
duke@435 | 132 | else |
duke@435 | 133 | OSNAME=linux |
duke@435 | 134 | endif |
duke@435 | 135 | |
duke@435 | 136 | # Determinations of default make arguments and platform specific settings |
duke@435 | 137 | MAKE_ARGS= |
duke@435 | 138 | |
duke@435 | 139 | # ARCH_DATA_MODEL==64 is equivalent to LP64=1 |
duke@435 | 140 | ifeq ($(ARCH_DATA_MODEL), 64) |
duke@435 | 141 | ifndef LP64 |
duke@435 | 142 | LP64 := 1 |
duke@435 | 143 | endif |
duke@435 | 144 | endif |
duke@435 | 145 | |
duke@435 | 146 | # Defaults set for product build |
duke@435 | 147 | EXPORT_SUBDIR= |
duke@435 | 148 | |
duke@435 | 149 | # Change default /java path if requested |
duke@435 | 150 | ifneq ($(ALT_SLASH_JAVA),) |
duke@435 | 151 | SLASH_JAVA=$(ALT_SLASH_JAVA) |
duke@435 | 152 | endif |
duke@435 | 153 | |
duke@435 | 154 | # Default OUTPUTDIR |
duke@435 | 155 | OUTPUTDIR=$(HS_BUILD_DIR)/$(OSNAME) |
duke@435 | 156 | ifneq ($(ALT_OUTPUTDIR),) |
duke@435 | 157 | OUTPUTDIR=$(ALT_OUTPUTDIR) |
duke@435 | 158 | endif |
duke@435 | 159 | |
duke@435 | 160 | # Find latest promoted JDK area |
duke@435 | 161 | JDK_IMPORT_PATH=$(SLASH_JAVA)/re/j2se/$(JDK_VERSION)/promoted/latest/binaries/$(PLATFORM) |
duke@435 | 162 | ifneq ($(ALT_JDK_IMPORT_PATH),) |
duke@435 | 163 | JDK_IMPORT_PATH=$(ALT_JDK_IMPORT_PATH) |
duke@435 | 164 | endif |
duke@435 | 165 | |
duke@435 | 166 | # Find JDK used for javac compiles |
duke@435 | 167 | BOOTDIR=$(SLASH_JAVA)/re/j2se/$(PREVIOUS_JDK_VERSION)/latest/binaries/$(PLATFORM) |
duke@435 | 168 | ifneq ($(ALT_BOOTDIR),) |
duke@435 | 169 | BOOTDIR=$(ALT_BOOTDIR) |
duke@435 | 170 | endif |
duke@435 | 171 | |
duke@435 | 172 | # The platform dependent defs.make defines platform specific variable such |
duke@435 | 173 | # as ARCH, EXPORT_LIST etc. We must place the include here after BOOTDIR is defined. |
kamg@526 | 174 | include $(GAMMADIR)/make/$(OSNAME)/makefiles/defs.make |
duke@435 | 175 | |
duke@435 | 176 | # We are trying to put platform specific defintions |
kamg@526 | 177 | # files to make/$(OSNAME)/makefiles dictory. However |
duke@435 | 178 | # some definitions are common for both linux and solaris, |
duke@435 | 179 | # so we put them here. |
duke@435 | 180 | ifneq ($(OSNAME),windows) |
kamg@526 | 181 | ABS_OUTPUTDIR := $(shell mkdir -p $(OUTPUTDIR); $(CD) $(OUTPUTDIR); $(PWD)) |
duke@435 | 182 | ABS_BOOTDIR := $(shell $(CD) $(BOOTDIR); $(PWD)) |
duke@435 | 183 | ABS_GAMMADIR := $(shell $(CD) $(GAMMADIR); $(PWD)) |
kamg@526 | 184 | ABS_OS_MAKEFILE := $(shell $(CD) $(HS_MAKE_DIR)/$(OSNAME); $(PWD))/Makefile |
duke@435 | 185 | |
duke@435 | 186 | # uname, HotSpot source directory, build directory and JDK use different names |
duke@435 | 187 | # for CPU architectures. |
duke@435 | 188 | # ARCH - uname output |
duke@435 | 189 | # SRCARCH - where to find HotSpot cpu and os_cpu source files |
duke@435 | 190 | # BUILDARCH - build directory |
duke@435 | 191 | # LIBARCH - directory name in JDK/JRE |
duke@435 | 192 | |
duke@435 | 193 | # Use uname output for SRCARCH, but deal with platform differences. If ARCH |
duke@435 | 194 | # is not explicitly listed below, it is treated as x86. |
duke@435 | 195 | SRCARCH = $(ARCH/$(filter sparc sparc64 ia64 amd64 x86_64,$(ARCH))) |
duke@435 | 196 | ARCH/ = x86 |
duke@435 | 197 | ARCH/sparc = sparc |
duke@435 | 198 | ARCH/sparc64= sparc |
duke@435 | 199 | ARCH/ia64 = ia64 |
duke@435 | 200 | ARCH/amd64 = x86 |
duke@435 | 201 | ARCH/x86_64 = x86 |
duke@435 | 202 | |
duke@435 | 203 | # BUILDARCH is usually the same as SRCARCH, except for sparcv9 |
duke@435 | 204 | BUILDARCH = $(SRCARCH) |
duke@435 | 205 | ifeq ($(BUILDARCH), x86) |
duke@435 | 206 | ifdef LP64 |
duke@435 | 207 | BUILDARCH = amd64 |
duke@435 | 208 | else |
duke@435 | 209 | BUILDARCH = i486 |
duke@435 | 210 | endif |
duke@435 | 211 | endif |
duke@435 | 212 | ifeq ($(BUILDARCH), sparc) |
duke@435 | 213 | ifdef LP64 |
duke@435 | 214 | BUILDARCH = sparcv9 |
duke@435 | 215 | endif |
duke@435 | 216 | endif |
duke@435 | 217 | |
duke@435 | 218 | # LIBARCH is 1:1 mapping from BUILDARCH |
duke@435 | 219 | LIBARCH = $(LIBARCH/$(BUILDARCH)) |
duke@435 | 220 | LIBARCH/i486 = i386 |
duke@435 | 221 | LIBARCH/amd64 = amd64 |
duke@435 | 222 | LIBARCH/sparc = sparc |
duke@435 | 223 | LIBARCH/sparcv9 = sparcv9 |
duke@435 | 224 | LIBARCH/ia64 = ia64 |
duke@435 | 225 | |
duke@435 | 226 | LP64_ARCH = sparcv9 amd64 ia64 |
duke@435 | 227 | endif |
duke@435 | 228 | |
duke@435 | 229 | # Required make macro settings for all platforms |
duke@435 | 230 | MAKE_ARGS += JAVA_HOME=$(ABS_BOOTDIR) |
xlu@663 | 231 | MAKE_ARGS += OUTPUTDIR=$(ABS_OUTPUTDIR) |
duke@435 | 232 | MAKE_ARGS += GAMMADIR=$(ABS_GAMMADIR) |
duke@435 | 233 | MAKE_ARGS += MAKE_VERBOSE=$(MAKE_VERBOSE) |
duke@435 | 234 | MAKE_ARGS += HOTSPOT_RELEASE_VERSION=$(HOTSPOT_RELEASE_VERSION) |
duke@435 | 235 | MAKE_ARGS += JRE_RELEASE_VERSION=$(JRE_RELEASE_VERSION) |
duke@435 | 236 | |
duke@435 | 237 | # Pass HOTSPOT_BUILD_VERSION as argument to OS specific Makefile |
duke@435 | 238 | # to overwrite the default definition since OS specific Makefile also |
duke@435 | 239 | # includes this make/defs.make file. |
duke@435 | 240 | MAKE_ARGS += HOTSPOT_BUILD_VERSION=$(HOTSPOT_BUILD_VERSION) |
duke@435 | 241 | |
duke@435 | 242 | # Select name of export directory |
duke@435 | 243 | EXPORT_PATH=$(OUTPUTDIR)/export-$(PLATFORM)$(EXPORT_SUBDIR) |
duke@435 | 244 | ifneq ($(ALT_EXPORT_PATH),) |
duke@435 | 245 | EXPORT_PATH=$(ALT_EXPORT_PATH) |
duke@435 | 246 | endif |
duke@435 | 247 | |
duke@435 | 248 | # Default jdk image if one is created for you with create_jdk |
duke@435 | 249 | JDK_IMAGE_DIR=$(OUTPUTDIR)/jdk-$(PLATFORM) |
duke@435 | 250 | |
duke@435 | 251 | # Various export sub directories |
duke@435 | 252 | EXPORT_INCLUDE_DIR = $(EXPORT_PATH)/include |
duke@435 | 253 | EXPORT_DOCS_DIR = $(EXPORT_PATH)/docs |
duke@435 | 254 | EXPORT_LIB_DIR = $(EXPORT_PATH)/lib |
duke@435 | 255 | EXPORT_JRE_DIR = $(EXPORT_PATH)/jre |
duke@435 | 256 | EXPORT_JRE_BIN_DIR = $(EXPORT_JRE_DIR)/bin |
duke@435 | 257 | EXPORT_JRE_LIB_DIR = $(EXPORT_JRE_DIR)/lib |
duke@435 | 258 | EXPORT_JRE_LIB_ARCH_DIR = $(EXPORT_JRE_LIB_DIR)/$(LIBARCH) |
duke@435 | 259 | |
duke@435 | 260 | # Common export list of files |
duke@435 | 261 | EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/jvmti.h |
duke@435 | 262 | EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/jni.h |
duke@435 | 263 | EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/$(JDK_INCLUDE_SUBDIR)/jni_md.h |
duke@435 | 264 | EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/jmm.h |