< prev index next >

src/hotspot/share/gc/g1/g1FromCardCache.hpp

Print this page
rev 50098 : [mq]: 8202842-g1-footprint-regressions

*** 1,7 **** /* ! * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. * 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. --- 1,7 ---- /* ! * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. * 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.
*** 29,39 **** #include "utilities/ostream.hpp" // G1FromCardCache remembers the most recently processed card on the heap on // a per-region and per-thread basis. class G1FromCardCache : public AllStatic { ! private: // Array of card indices. Indexed by heap region (rows) and thread (columns) to minimize // thread contention. // This order minimizes the time to clear all entries for a given region during region // freeing. I.e. a single clear of a single memory area instead of multiple separate // accesses with a large stride per region. --- 29,39 ---- #include "utilities/ostream.hpp" // G1FromCardCache remembers the most recently processed card on the heap on // a per-region and per-thread basis. class G1FromCardCache : public AllStatic { ! private: // Array of card indices. Indexed by heap region (rows) and thread (columns) to minimize // thread contention. // This order minimizes the time to clear all entries for a given region during region // freeing. I.e. a single clear of a single memory area instead of multiple separate // accesses with a large stride per region.
*** 47,59 **** assert(worker_id < _max_workers, "Worker_id %u is larger than maximum %u", worker_id, _max_workers); assert(region_idx < _max_regions, "Region_idx %u is larger than maximum %u", region_idx, _max_regions); } #endif ! public: ! static const uintptr_t InvalidCard = UINTPTR_MAX; static void clear(uint region_idx); // Returns true if the given card is in the cache at the given location, or // replaces the card at that location and returns false. static bool contains_or_replace(uint worker_id, uint region_idx, uintptr_t card) { --- 47,62 ---- assert(worker_id < _max_workers, "Worker_id %u is larger than maximum %u", worker_id, _max_workers); assert(region_idx < _max_regions, "Region_idx %u is larger than maximum %u", region_idx, _max_regions); } #endif ! // This card index indicates "no card for that entry" yet. This allows us to use the OS ! // lazy backing of memory with zero-filled pages to avoid initial actual memory use. ! // This means that the heap must not contain card zero. ! static const uintptr_t InvalidCard = 0; + public: static void clear(uint region_idx); // Returns true if the given card is in the cache at the given location, or // replaces the card at that location and returns false. static bool contains_or_replace(uint worker_id, uint region_idx, uintptr_t card) {
< prev index next >