# HG changeset patch # User tschatzl # Date 1459507566 -7200 # Node ID 7fe9301bf25510e92b4903d86145f41538270115 # Parent 8c40b5b4e525abf2cc68716c327f85a8c43c233d# Parent 60dfd880b6d8e2edc9747c012b628bca54fdd4c6 Merge diff -r 8c40b5b4e525 -r 7fe9301bf255 hotspot/src/share/vm/gc/g1/g1FromCardCache.cpp --- a/hotspot/src/share/vm/gc/g1/g1FromCardCache.cpp Fri Apr 01 13:51:29 2016 +0530 +++ b/hotspot/src/share/vm/gc/g1/g1FromCardCache.cpp Fri Apr 01 12:46:06 2016 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 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 @@ -37,8 +37,8 @@ guarantee(_cache == NULL, "Should not call this multiple times"); _max_regions = max_num_regions; - _cache = Padded2DArray::create_unfreeable(num_par_rem_sets, - _max_regions, + _cache = Padded2DArray::create_unfreeable(_max_regions, + num_par_rem_sets, &_static_mem_size); invalidate(0, _max_regions); diff -r 8c40b5b4e525 -r 7fe9301bf255 hotspot/src/share/vm/gc/g1/g1FromCardCache.hpp --- a/hotspot/src/share/vm/gc/g1/g1FromCardCache.hpp Fri Apr 01 13:51:29 2016 +0530 +++ b/hotspot/src/share/vm/gc/g1/g1FromCardCache.hpp Fri Apr 01 12:46:06 2016 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -32,8 +32,11 @@ // a per-region and per-thread basis. class G1FromCardCache : public AllStatic { private: - // Array of card indices. Indexed by thread X and heap region to minimize + // 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. static int** _cache; static uint _max_regions; static size_t _static_mem_size; @@ -58,11 +61,11 @@ } static int at(uint worker_id, uint region_idx) { - return _cache[worker_id][region_idx]; + return _cache[region_idx][worker_id]; } static void set(uint worker_id, uint region_idx, int val) { - _cache[worker_id][region_idx] = val; + _cache[region_idx][worker_id] = val; } static void initialize(uint num_par_rem_sets, uint max_num_regions); diff -r 8c40b5b4e525 -r 7fe9301bf255 hotspot/src/share/vm/gc/g1/heapRegionBounds.hpp --- a/hotspot/src/share/vm/gc/g1/heapRegionBounds.hpp Fri Apr 01 13:51:29 2016 +0530 +++ b/hotspot/src/share/vm/gc/g1/heapRegionBounds.hpp Fri Apr 01 12:46:06 2016 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 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 @@ -25,6 +25,8 @@ #ifndef SHARE_VM_GC_G1_HEAPREGIONBOUNDS_HPP #define SHARE_VM_GC_G1_HEAPREGIONBOUNDS_HPP +#include "memory/allocation.hpp" + class HeapRegionBounds : public AllStatic { private: // Minimum region size; we won't go lower than that. diff -r 8c40b5b4e525 -r 7fe9301bf255 hotspot/src/share/vm/logging/logPrefix.hpp --- a/hotspot/src/share/vm/logging/logPrefix.hpp Fri Apr 01 13:51:29 2016 +0530 +++ b/hotspot/src/share/vm/logging/logPrefix.hpp Fri Apr 01 12:46:06 2016 +0200 @@ -58,6 +58,7 @@ LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, heap)) \ LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, heap, region)) \ LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, freelist)) \ + LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, humongous)) \ LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, ihop)) \ LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, liveness)) \ LOG_PREFIX(GCId::print_prefix, LOG_TAGS(gc, marking)) \