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