blob: 88ff69ebac73120298acf2b5282ac3b0b6c677e7 [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) -->
<title>LruBlockCache (Apache HBase 4.0.0-alpha-1-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="declaration: package: org.apache.hadoop.hbase.io.hfile, class: LruBlockCache">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.6.1.min.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/LruBlockCache.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li><a href="#nested-class-summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field-detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">org.apache.hadoop.hbase.io.hfile</a></div>
<h1 title="Class LruBlockCache" class="title">Class LruBlockCache</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance">org.apache.hadoop.hbase.io.hfile.LruBlockCache</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Iterable.html" title="class or interface in java.lang" class="external-link">Iterable</a>&lt;<a href="CachedBlock.html" title="interface in org.apache.hadoop.hbase.io.hfile">CachedBlock</a>&gt;</code>, <code><a href="../HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a></code>, <code><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code>, <code><a href="FirstLevelBlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">FirstLevelBlockCache</a></code>, <code><a href="ResizableBlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">ResizableBlockCache</a></code></dd>
</dl>
<dl class="notes">
<dt>Direct Known Subclasses:</dt>
<dd><code><a href="IndexOnlyLruBlockCache.html" title="class in org.apache.hadoop.hbase.io.hfile">IndexOnlyLruBlockCache</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="annotations">@Private
</span><span class="modifiers">public class </span><span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-88">LruBlockCache</a></span>
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>
implements <a href="FirstLevelBlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">FirstLevelBlockCache</a></span></div>
<div class="block">A block cache implementation that is memory-aware using <a href="../HeapSize.html" title="interface in org.apache.hadoop.hbase.io"><code>HeapSize</code></a>, memory-bound using an
LRU eviction algorithm, and concurrent: backed by a <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ConcurrentHashMap.html" title="class or interface in java.util.concurrent" class="external-link"><code>ConcurrentHashMap</code></a> and with a
non-blocking eviction thread giving constant-time <a href="#cacheBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey,org.apache.hadoop.hbase.io.hfile.Cacheable,boolean)"><code>cacheBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey, org.apache.hadoop.hbase.io.hfile.Cacheable, boolean)</code></a> and <a href="#getBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey,boolean,boolean,boolean)"><code>getBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey, boolean, boolean, boolean)</code></a>
operations.
</p>
Contains three levels of block priority to allow for scan-resistance and in-memory families
<a href="../../client/ColumnFamilyDescriptorBuilder.html#setInMemory(boolean)"><code>ColumnFamilyDescriptorBuilder.setInMemory(boolean)</code></a> (An
in-memory column family is a column family that should be served from memory if possible):
single-access, multiple-accesses, and in-memory priority. A block is added with an in-memory
priority flag if <a href="../../client/ColumnFamilyDescriptor.html#isInMemory()"><code>ColumnFamilyDescriptor.isInMemory()</code></a>,
otherwise a block becomes a single access priority the first time it is read into this block
cache. If a block is accessed again while in cache, it is marked as a multiple access priority
block. This delineation of blocks is used to prevent scans from thrashing the cache adding a
least-frequently-used element to the eviction algorithm.
<p/>
Each priority is given its own chunk of the total cache to ensure fairness during eviction. Each
priority will retain close to its maximum size, however, if any priority is not using its entire
chunk the others are able to grow beyond their chunk size.
<p/>
Instantiated at a minimum with the total size and average block size. All sizes are in bytes. The
block size is not especially important as this cache is fully dynamic in its sizing of blocks. It
is only used for pre-allocating data structures and in initial heap estimation of the map.
<p/>
The detailed constructor defines the sizes for the three priorities (they should total to the
<code>maximum size</code> defined). It also sets the levels that trigger and control the eviction
thread.
<p/>
The <code>acceptable size</code> is the cache size level which triggers the eviction process to
start. It evicts enough blocks to get the size below the minimum size specified.
<p/>
Eviction happens in a separate thread and involves a single full-scan of the map. It determines
how many bytes must be freed to reach the minimum size, and then while scanning determines the
fewest least-recently-used blocks necessary from each of the three priorities (would be 3 times
bytes to free). It then uses the priority chunk sizes to evict fairly according to the relative
sizes and usage.</div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<li>
<section class="nested-class-summary" id="nested-class-summary">
<h2>Nested Class Summary</h2>
<div class="caption"><span>Nested Classes</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private class&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="LruBlockCache.BlockBucket.html" class="type-name-link" title="class in org.apache.hadoop.hbase.io.hfile">LruBlockCache.BlockBucket</a></code></div>
<div class="col-last even-row-color">
<div class="block">Used to group blocks into priority buckets.</div>
</div>
<div class="col-first odd-row-color"><code>(package private) static class&nbsp;</code></div>
<div class="col-second odd-row-color"><code><a href="LruBlockCache.EvictionThread.html" class="type-name-link" title="class in org.apache.hadoop.hbase.io.hfile">LruBlockCache.EvictionThread</a></code></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-first even-row-color"><code>(package private) static class&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="LruBlockCache.StatisticsThread.html" class="type-name-link" title="class in org.apache.hadoop.hbase.io.hfile">LruBlockCache.StatisticsThread</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
</div>
</section>
</li>
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private float</code></div>
<div class="col-second even-row-color"><code><a href="#acceptableFactor" class="member-name-link">acceptableFactor</a></code></div>
<div class="col-last even-row-color">
<div class="block">Acceptable size of cache (no evictions if size &lt; acceptable)</div>
</div>
<div class="col-first odd-row-color"><code>private long</code></div>
<div class="col-second odd-row-color"><code><a href="#blockSize" class="member-name-link">blockSize</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Approximate block size</div>
</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/LongAdder.html" title="class or interface in java.util.concurrent.atomic" class="external-link">LongAdder</a></code></div>
<div class="col-second even-row-color"><code><a href="#bloomBlockElements" class="member-name-link">bloomBlockElements</a></code></div>
<div class="col-last even-row-color">
<div class="block">Current number of cached bloom block elements</div>
</div>
<div class="col-first odd-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/LongAdder.html" title="class or interface in java.util.concurrent.atomic" class="external-link">LongAdder</a></code></div>
<div class="col-second odd-row-color"><code><a href="#bloomBlockSize" class="member-name-link">bloomBlockSize</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Current size of bloom blocks</div>
</div>
<div class="col-first even-row-color"><code>static final long</code></div>
<div class="col-second even-row-color"><code><a href="#CACHE_FIXED_OVERHEAD" class="member-name-link">CACHE_FIXED_OVERHEAD</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/AtomicLong.html" title="class or interface in java.util.concurrent.atomic" class="external-link">AtomicLong</a></code></div>
<div class="col-second odd-row-color"><code><a href="#count" class="member-name-link">count</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Cache access count (sequential ID)</div>
</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/LongAdder.html" title="class or interface in java.util.concurrent.atomic" class="external-link">LongAdder</a></code></div>
<div class="col-second even-row-color"><code><a href="#dataBlockElements" class="member-name-link">dataBlockElements</a></code></div>
<div class="col-last even-row-color">
<div class="block">Current number of cached data block elements</div>
</div>
<div class="col-first odd-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/LongAdder.html" title="class or interface in java.util.concurrent.atomic" class="external-link">LongAdder</a></code></div>
<div class="col-second odd-row-color"><code><a href="#dataBlockSize" class="member-name-link">dataBlockSize</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Current size of data blocks</div>
</div>
<div class="col-first even-row-color"><code>(package private) static final float</code></div>
<div class="col-second even-row-color"><code><a href="#DEFAULT_ACCEPTABLE_FACTOR" class="member-name-link">DEFAULT_ACCEPTABLE_FACTOR</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>(package private) static final int</code></div>
<div class="col-second odd-row-color"><code><a href="#DEFAULT_CONCURRENCY_LEVEL" class="member-name-link">DEFAULT_CONCURRENCY_LEVEL</a></code></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-first even-row-color"><code>private static final float</code></div>
<div class="col-second even-row-color"><code><a href="#DEFAULT_HARD_CAPACITY_LIMIT_FACTOR" class="member-name-link">DEFAULT_HARD_CAPACITY_LIMIT_FACTOR</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>private static final boolean</code></div>
<div class="col-second odd-row-color"><code><a href="#DEFAULT_IN_MEMORY_FORCE_MODE" class="member-name-link">DEFAULT_IN_MEMORY_FORCE_MODE</a></code></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-first even-row-color"><code>(package private) static final float</code></div>
<div class="col-second even-row-color"><code><a href="#DEFAULT_LOAD_FACTOR" class="member-name-link">DEFAULT_LOAD_FACTOR</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>private static final long</code></div>
<div class="col-second odd-row-color"><code><a href="#DEFAULT_MAX_BLOCK_SIZE" class="member-name-link">DEFAULT_MAX_BLOCK_SIZE</a></code></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-first even-row-color"><code>private static final float</code></div>
<div class="col-second even-row-color"><code><a href="#DEFAULT_MEMORY_FACTOR" class="member-name-link">DEFAULT_MEMORY_FACTOR</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>private static final float</code></div>
<div class="col-second odd-row-color"><code><a href="#DEFAULT_MIN_FACTOR" class="member-name-link">DEFAULT_MIN_FACTOR</a></code></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-first even-row-color"><code>private static final float</code></div>
<div class="col-second even-row-color"><code><a href="#DEFAULT_MULTI_FACTOR" class="member-name-link">DEFAULT_MULTI_FACTOR</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>private static final float</code></div>
<div class="col-second odd-row-color"><code><a href="#DEFAULT_SINGLE_FACTOR" class="member-name-link">DEFAULT_SINGLE_FACTOR</a></code></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/AtomicLong.html" title="class or interface in java.util.concurrent.atomic" class="external-link">AtomicLong</a></code></div>
<div class="col-second even-row-color"><code><a href="#elements" class="member-name-link">elements</a></code></div>
<div class="col-last even-row-color">
<div class="block">Current number of cached elements</div>
</div>
<div class="col-first odd-row-color"><code>private boolean</code></div>
<div class="col-second odd-row-color"><code><a href="#evictionInProgress" class="member-name-link">evictionInProgress</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Volatile boolean to track if we are in an eviction process or not</div>
</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/locks/ReentrantLock.html" title="class or interface in java.util.concurrent.locks" class="external-link">ReentrantLock</a></code></div>
<div class="col-second even-row-color"><code><a href="#evictionLock" class="member-name-link">evictionLock</a></code></div>
<div class="col-last even-row-color">
<div class="block">Eviction lock (locked when eviction in process)</div>
</div>
<div class="col-first odd-row-color"><code>private final <a href="LruBlockCache.EvictionThread.html" title="class in org.apache.hadoop.hbase.io.hfile">LruBlockCache.EvictionThread</a></code></div>
<div class="col-second odd-row-color"><code><a href="#evictionThread" class="member-name-link">evictionThread</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Eviction thread</div>
</div>
<div class="col-first even-row-color"><code>private boolean</code></div>
<div class="col-second even-row-color"><code><a href="#forceInMemory" class="member-name-link">forceInMemory</a></code></div>
<div class="col-last even-row-color">
<div class="block">Whether in-memory hfile's data block has higher priority when evicting</div>
</div>
<div class="col-first odd-row-color"><code>private float</code></div>
<div class="col-second odd-row-color"><code><a href="#hardCapacityLimitFactor" class="member-name-link">hardCapacityLimitFactor</a></code></div>
<div class="col-last odd-row-color">
<div class="block">hard capacity limit</div>
</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/LongAdder.html" title="class or interface in java.util.concurrent.atomic" class="external-link">LongAdder</a></code></div>
<div class="col-second even-row-color"><code><a href="#indexBlockElements" class="member-name-link">indexBlockElements</a></code></div>
<div class="col-last even-row-color">
<div class="block">Current number of cached index block elements</div>
</div>
<div class="col-first odd-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/LongAdder.html" title="class or interface in java.util.concurrent.atomic" class="external-link">LongAdder</a></code></div>
<div class="col-second odd-row-color"><code><a href="#indexBlockSize" class="member-name-link">indexBlockSize</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Current size of index blocks</div>
</div>
<div class="col-first even-row-color"><code>private static final org.slf4j.Logger</code></div>
<div class="col-second even-row-color"><code><a href="#LOG" class="member-name-link">LOG</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>private static final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color"><code><a href="#LRU_ACCEPTABLE_FACTOR_CONFIG_NAME" class="member-name-link">LRU_ACCEPTABLE_FACTOR_CONFIG_NAME</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Acceptable size of cache (no evictions if size &lt; acceptable)</div>
</div>
<div class="col-first even-row-color"><code>(package private) static final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color"><code><a href="#LRU_HARD_CAPACITY_LIMIT_FACTOR_CONFIG_NAME" class="member-name-link">LRU_HARD_CAPACITY_LIMIT_FACTOR_CONFIG_NAME</a></code></div>
<div class="col-last even-row-color">
<div class="block">Hard capacity limit of cache, will reject any put if size > this * acceptable</div>
</div>
<div class="col-first odd-row-color"><code>private static final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color"><code><a href="#LRU_IN_MEMORY_FORCE_MODE_CONFIG_NAME" class="member-name-link">LRU_IN_MEMORY_FORCE_MODE_CONFIG_NAME</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Configuration key to force data-block always (except in-memory are too much) cached in memory
for in-memory hfile, unlike inMemory, which is a column-family configuration, inMemoryForceMode
is a cluster-wide configuration</div>
</div>
<div class="col-first even-row-color"><code>private static final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color"><code><a href="#LRU_MAX_BLOCK_SIZE" class="member-name-link">LRU_MAX_BLOCK_SIZE</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>private static final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color"><code><a href="#LRU_MEMORY_PERCENTAGE_CONFIG_NAME" class="member-name-link">LRU_MEMORY_PERCENTAGE_CONFIG_NAME</a></code></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-first even-row-color"><code>private static final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color"><code><a href="#LRU_MIN_FACTOR_CONFIG_NAME" class="member-name-link">LRU_MIN_FACTOR_CONFIG_NAME</a></code></div>
<div class="col-last even-row-color">
<div class="block">Percentage of total size that eviction will evict until; e.g.</div>
</div>
<div class="col-first odd-row-color"><code>private static final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color"><code><a href="#LRU_MULTI_PERCENTAGE_CONFIG_NAME" class="member-name-link">LRU_MULTI_PERCENTAGE_CONFIG_NAME</a></code></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-first even-row-color"><code>private static final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color"><code><a href="#LRU_SINGLE_PERCENTAGE_CONFIG_NAME" class="member-name-link">LRU_SINGLE_PERCENTAGE_CONFIG_NAME</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ConcurrentHashMap.html" title="class or interface in java.util.concurrent" class="external-link">ConcurrentHashMap</a>&lt;<a href="BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>,<wbr><a href="LruCachedBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">LruCachedBlock</a>&gt;</code></div>
<div class="col-second odd-row-color"><code><a href="#map" class="member-name-link">map</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Defined the cache map as <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ConcurrentHashMap.html" title="class or interface in java.util.concurrent" class="external-link"><code>ConcurrentHashMap</code></a> here, because in
<a href="#getBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey,boolean,boolean,boolean)"><code>getBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey, boolean, boolean, boolean)</code></a>, we need to guarantee the atomicity of map#k (key, func).</div>
</div>
<div class="col-first even-row-color"><code>private final long</code></div>
<div class="col-second even-row-color"><code><a href="#maxBlockSize" class="member-name-link">maxBlockSize</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>private long</code></div>
<div class="col-second odd-row-color"><code><a href="#maxSize" class="member-name-link">maxSize</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Maximum allowable size of cache (block put if size > max, evict)</div>
</div>
<div class="col-first even-row-color"><code>private float</code></div>
<div class="col-second even-row-color"><code><a href="#memoryFactor" class="member-name-link">memoryFactor</a></code></div>
<div class="col-last even-row-color">
<div class="block">In-memory bucket size</div>
</div>
<div class="col-first odd-row-color"><code>private float</code></div>
<div class="col-second odd-row-color"><code><a href="#minFactor" class="member-name-link">minFactor</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Minimum threshold of cache (when evicting, evict until size &lt; min)</div>
</div>
<div class="col-first even-row-color"><code>private float</code></div>
<div class="col-second even-row-color"><code><a href="#multiFactor" class="member-name-link">multiFactor</a></code></div>
<div class="col-last even-row-color">
<div class="block">Multiple access bucket size</div>
</div>
<div class="col-first odd-row-color"><code>private long</code></div>
<div class="col-second odd-row-color"><code><a href="#overhead" class="member-name-link">overhead</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Overhead of the structure itself</div>
</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ScheduledExecutorService.html" title="class or interface in java.util.concurrent" class="external-link">ScheduledExecutorService</a></code></div>
<div class="col-second even-row-color"><code><a href="#scheduleThreadPool" class="member-name-link">scheduleThreadPool</a></code></div>
<div class="col-last even-row-color">
<div class="block">Statistics thread schedule pool (for heavy debugging, could remove)</div>
</div>
<div class="col-first odd-row-color"><code>private float</code></div>
<div class="col-second odd-row-color"><code><a href="#singleFactor" class="member-name-link">singleFactor</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Single access bucket size</div>
</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/AtomicLong.html" title="class or interface in java.util.concurrent.atomic" class="external-link">AtomicLong</a></code></div>
<div class="col-second even-row-color"><code><a href="#size" class="member-name-link">size</a></code></div>
<div class="col-last even-row-color">
<div class="block">Current size of cache</div>
</div>
<div class="col-first odd-row-color"><code>private static final int</code></div>
<div class="col-second odd-row-color"><code><a href="#STAT_THREAD_PERIOD" class="member-name-link">STAT_THREAD_PERIOD</a></code></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-first even-row-color"><code>private final <a href="CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></div>
<div class="col-second even-row-color"><code><a href="#stats" class="member-name-link">stats</a></code></div>
<div class="col-last even-row-color">
<div class="block">Cache statistics</div>
</div>
<div class="col-first odd-row-color"><code>private <a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></div>
<div class="col-second odd-row-color"><code><a href="#victimHandler" class="member-name-link">victimHandler</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Where to send victims (blocks evicted/missing from the cache).</div>
</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(long,long)" class="member-name-link">LruBlockCache</a><wbr>(long&nbsp;maxSize,
long&nbsp;blockSize)</code></div>
<div class="col-last even-row-color">
<div class="block">Default constructor.</div>
</div>
<div class="col-constructor-name odd-row-color"><code><a href="#%3Cinit%3E(long,long,boolean)" class="member-name-link">LruBlockCache</a><wbr>(long&nbsp;maxSize,
long&nbsp;blockSize,
boolean&nbsp;evictionThread)</code></div>
<div class="col-last odd-row-color">
<div class="block">Constructor used for testing.</div>
</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(long,long,boolean,int,float,int,float,float,float,float,float,float,boolean,long)" class="member-name-link">LruBlockCache</a><wbr>(long&nbsp;maxSize,
long&nbsp;blockSize,
boolean&nbsp;evictionThread,
int&nbsp;mapInitialSize,
float&nbsp;mapLoadFactor,
int&nbsp;mapConcurrencyLevel,
float&nbsp;minFactor,
float&nbsp;acceptableFactor,
float&nbsp;singleFactor,
float&nbsp;multiFactor,
float&nbsp;memoryFactor,
float&nbsp;hardLimitFactor,
boolean&nbsp;forceInMemory,
long&nbsp;maxBlockSize)</code></div>
<div class="col-last even-row-color">
<div class="block">Configurable constructor.</div>
</div>
<div class="col-constructor-name odd-row-color"><code><a href="#%3Cinit%3E(long,long,boolean,org.apache.hadoop.conf.Configuration)" class="member-name-link">LruBlockCache</a><wbr>(long&nbsp;maxSize,
long&nbsp;blockSize,
boolean&nbsp;evictionThread,
org.apache.hadoop.conf.Configuration&nbsp;conf)</code></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(long,long,org.apache.hadoop.conf.Configuration)" class="member-name-link">LruBlockCache</a><wbr>(long&nbsp;maxSize,
long&nbsp;blockSize,
org.apache.hadoop.conf.Configuration&nbsp;conf)</code></div>
<div class="col-last even-row-color">&nbsp;</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab1" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab1', 3)" class="table-tab">Static Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>(package private) long</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#acceptableSize()" class="member-name-link">acceptableSize</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private <a href="Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#asReferencedHeapBlock(org.apache.hadoop.hbase.io.hfile.Cacheable)" class="member-name-link">asReferencedHeapBlock</a><wbr>(<a href="Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;buf)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">The block cached in LRUBlockCache will always be an heap block: on the one side, the heap
access will be more faster then off-heap, the small index block or meta block cached in
CombinedBlockCache will benefit a lot.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>private static void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#assertCounterSanity(long,long)" class="member-name-link">assertCounterSanity</a><wbr>(long&nbsp;mapSize,
long&nbsp;counterVal)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
<div class="block">Sanity-checking for parity between actual block cache content and metrics.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#cacheBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey,org.apache.hadoop.hbase.io.hfile.Cacheable)" class="member-name-link">cacheBlock</a><wbr>(<a href="BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
<a href="Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;buf)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Cache the block with the specified name and buffer.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#cacheBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey,org.apache.hadoop.hbase.io.hfile.Cacheable,boolean)" class="member-name-link">cacheBlock</a><wbr>(<a href="BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
<a href="Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;buf,
boolean&nbsp;inMemory)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Cache the block with the specified name and buffer.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>private static long</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#calculateOverhead(long,long,int)" class="member-name-link">calculateOverhead</a><wbr>(long&nbsp;maxSize,
long&nbsp;blockSize,
int&nbsp;concurrency)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">&nbsp;</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#clearCache()" class="member-name-link">clearCache</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Clears the cache.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#containsBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey)" class="member-name-link">containsBlock</a><wbr>(<a href="BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Whether the cache contains block with specified cacheKey</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>(package private) void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#evict()" class="member-name-link">evict</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Eviction method.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#evictBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey)" class="member-name-link">evictBlock</a><wbr>(<a href="BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Evict block from cache.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected long</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#evictBlock(org.apache.hadoop.hbase.io.hfile.LruCachedBlock,boolean)" class="member-name-link">evictBlock</a><wbr>(<a href="LruCachedBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">LruCachedBlock</a>&nbsp;block,
boolean&nbsp;evictedByEvictionProcess)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Evict the block, and it will be cached by the victim handler if exists &amp;&amp; block may be
read again later</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>int</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#evictBlocksByHfileName(java.lang.String)" class="member-name-link">evictBlocksByHfileName</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;hfileName)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Evicts all blocks for a specific HFile.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey,boolean,boolean,boolean)" class="member-name-link">getBlock</a><wbr>(<a href="BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
boolean&nbsp;caching,
boolean&nbsp;repeat,
boolean&nbsp;updateCacheMetrics)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Get the buffer of the block with the specified name.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>[]</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getBlockCaches()" class="member-name-link">getBlockCaches</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns The list of sub blockcaches that make up this one; returns null if no sub caches.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>long</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getBlockCount()" class="member-name-link">getBlockCount</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the number of blocks currently cached in the block cache.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>long</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getBloomBlockCount()" class="member-name-link">getBloomBlockCount</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>(package private) <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/SortedSet.html" title="class or interface in java.util" class="external-link">SortedSet</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&gt;</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getCachedFileNamesForTest()" class="member-name-link">getCachedFileNamesForTest</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Used in testing.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>long</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getCurrentBloomSize()" class="member-name-link">getCurrentBloomSize</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>long</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getCurrentDataSize()" class="member-name-link">getCurrentDataSize</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the occupied size of data blocks, in bytes.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>long</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getCurrentIndexSize()" class="member-name-link">getCurrentIndexSize</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>long</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getCurrentSize()" class="member-name-link">getCurrentSize</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the occupied size of the block cache, in bytes.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>long</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getDataBlockCount()" class="member-name-link">getDataBlockCount</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the number of data blocks currently cached in the block cache.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="../encoding/DataBlockEncoding.html" title="enum class in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html" title="class or interface in java.lang" class="external-link">Integer</a>&gt;</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getEncodingCountsForTest()" class="member-name-link">getEncodingCountsForTest</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>(package private) <a href="LruBlockCache.EvictionThread.html" title="class in org.apache.hadoop.hbase.io.hfile">LruBlockCache.EvictionThread</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getEvictionThread()" class="member-name-link">getEvictionThread</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>long</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getFreeSize()" class="member-name-link">getFreeSize</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the free size of the block cache, in bytes.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>long</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getIndexBlockCount()" class="member-name-link">getIndexBlockCount</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>(package private) <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>,<wbr><a href="LruCachedBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">LruCachedBlock</a>&gt;</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getMapForTests()" class="member-name-link">getMapForTests</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>long</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getMaxSize()" class="member-name-link">getMaxSize</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Get the maximum size of this cache.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>(package private) long</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getOverhead()" class="member-name-link">getOverhead</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getStats()" class="member-name-link">getStats</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Get counter statistics for this cache.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>long</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#heapSize()" class="member-name-link">heapSize</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Return the approximate 'exclusive deep size' of implementing object.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>(package private) boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#isEvictionInProgress()" class="member-name-link">isEvictionInProgress</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Iterator.html" title="class or interface in java.util" class="external-link">Iterator</a>&lt;<a href="CachedBlock.html" title="interface in org.apache.hadoop.hbase.io.hfile">CachedBlock</a>&gt;</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#iterator()" class="member-name-link">iterator</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns Iterator over the blocks in the cache.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#logStats()" class="member-name-link">logStats</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private long</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#memorySize()" class="member-name-link">memorySize</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private long</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#minSize()" class="member-name-link">minSize</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private long</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#multiSize()" class="member-name-link">multiSize</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#runEviction()" class="member-name-link">runEviction</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Multi-threaded call to run the eviction process.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setMaxSize(long)" class="member-name-link">setMaxSize</a><wbr>(long&nbsp;maxSize)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Sets the max heap size that can be used by the BlockCache.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setVictimCache(org.apache.hadoop.hbase.io.hfile.BlockCache)" class="member-name-link">setVictimCache</a><wbr>(<a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&nbsp;victimCache)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Specifies the secondary cache.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#shutdown()" class="member-name-link">shutdown</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Shutdown the cache.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private long</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#singleSize()" class="member-name-link">singleSize</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>long</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#size()" class="member-name-link">size</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the total size of the block cache, in bytes.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private long</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#updateSizeMetrics(org.apache.hadoop.hbase.io.hfile.LruCachedBlock,boolean)" class="member-name-link">updateSizeMetrics</a><wbr>(<a href="LruCachedBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">LruCachedBlock</a>&nbsp;cb,
boolean&nbsp;evict)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Helper function that updates the local size counter and also updates any per-cf or
per-blocktype metrics it can discern from given <a href="LruCachedBlock.html" title="class in org.apache.hadoop.hbase.io.hfile"><code>LruCachedBlock</code></a></div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.hadoop.hbase.io.hfile.BlockCache">Methods inherited from interface&nbsp;org.apache.hadoop.hbase.io.hfile.<a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></h3>
<code><a href="BlockCache.html#blockFitsIntoTheCache(org.apache.hadoop.hbase.io.hfile.HFileBlock)">blockFitsIntoTheCache</a>, <a href="BlockCache.html#cacheBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey,org.apache.hadoop.hbase.io.hfile.Cacheable,boolean,boolean)">cacheBlock</a>, <a href="BlockCache.html#evictBlocksRangeByHfileName(java.lang.String,long,long)">evictBlocksRangeByHfileName</a>, <a href="BlockCache.html#getBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey,boolean,boolean,boolean,org.apache.hadoop.hbase.io.hfile.BlockType)">getBlock</a>, <a href="BlockCache.html#getBlockSize(org.apache.hadoop.hbase.io.hfile.BlockCacheKey)">getBlockSize</a>, <a href="BlockCache.html#getFullyCachedFiles()">getFullyCachedFiles</a>, <a href="BlockCache.html#getRegionCachedInfo()">getRegionCachedInfo</a>, <a href="BlockCache.html#isAlreadyCached(org.apache.hadoop.hbase.io.hfile.BlockCacheKey)">isAlreadyCached</a>, <a href="BlockCache.html#isCacheEnabled()">isCacheEnabled</a>, <a href="BlockCache.html#isMetaBlock(org.apache.hadoop.hbase.io.hfile.BlockType)">isMetaBlock</a>, <a href="BlockCache.html#notifyFileCachingCompleted(org.apache.hadoop.fs.Path,int,int,long)">notifyFileCachingCompleted</a>, <a href="BlockCache.html#shouldCacheFile(java.lang.String)">shouldCacheFile</a>, <a href="BlockCache.html#waitForCacheInitialization(long)">waitForCacheInitialization</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Iterable">Methods inherited from interface&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Iterable.html" title="class or interface in java.lang" class="external-link">Iterable</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Iterable.html#forEach(java.util.function.Consumer)" title="class or interface in java.lang" class="external-link">forEach</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Iterable.html#spliterator()" title="class or interface in java.lang" class="external-link">spliterator</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="LOG">
<h3>LOG</h3>
<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type">org.slf4j.Logger</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-91">LOG</a></span></div>
</section>
</li>
<li>
<section class="detail" id="LRU_MIN_FACTOR_CONFIG_NAME">
<h3>LRU_MIN_FACTOR_CONFIG_NAME</h3>
<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-97">LRU_MIN_FACTOR_CONFIG_NAME</a></span></div>
<div class="block">Percentage of total size that eviction will evict until; e.g. if set to .8, then we will keep
evicting during an eviction run till the cache size is down to 80% of the total.</div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.LRU_MIN_FACTOR_CONFIG_NAME">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="LRU_ACCEPTABLE_FACTOR_CONFIG_NAME">
<h3>LRU_ACCEPTABLE_FACTOR_CONFIG_NAME</h3>
<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-102">LRU_ACCEPTABLE_FACTOR_CONFIG_NAME</a></span></div>
<div class="block">Acceptable size of cache (no evictions if size &lt; acceptable)</div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.LRU_ACCEPTABLE_FACTOR_CONFIG_NAME">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="LRU_HARD_CAPACITY_LIMIT_FACTOR_CONFIG_NAME">
<h3>LRU_HARD_CAPACITY_LIMIT_FACTOR_CONFIG_NAME</h3>
<div class="member-signature"><span class="modifiers">static final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-108">LRU_HARD_CAPACITY_LIMIT_FACTOR_CONFIG_NAME</a></span></div>
<div class="block">Hard capacity limit of cache, will reject any put if size > this * acceptable</div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.LRU_HARD_CAPACITY_LIMIT_FACTOR_CONFIG_NAME">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="LRU_SINGLE_PERCENTAGE_CONFIG_NAME">
<h3>LRU_SINGLE_PERCENTAGE_CONFIG_NAME</h3>
<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-110">LRU_SINGLE_PERCENTAGE_CONFIG_NAME</a></span></div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.LRU_SINGLE_PERCENTAGE_CONFIG_NAME">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="LRU_MULTI_PERCENTAGE_CONFIG_NAME">
<h3>LRU_MULTI_PERCENTAGE_CONFIG_NAME</h3>
<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-112">LRU_MULTI_PERCENTAGE_CONFIG_NAME</a></span></div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.LRU_MULTI_PERCENTAGE_CONFIG_NAME">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="LRU_MEMORY_PERCENTAGE_CONFIG_NAME">
<h3>LRU_MEMORY_PERCENTAGE_CONFIG_NAME</h3>
<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-114">LRU_MEMORY_PERCENTAGE_CONFIG_NAME</a></span></div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.LRU_MEMORY_PERCENTAGE_CONFIG_NAME">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="LRU_IN_MEMORY_FORCE_MODE_CONFIG_NAME">
<h3>LRU_IN_MEMORY_FORCE_MODE_CONFIG_NAME</h3>
<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-122">LRU_IN_MEMORY_FORCE_MODE_CONFIG_NAME</a></span></div>
<div class="block">Configuration key to force data-block always (except in-memory are too much) cached in memory
for in-memory hfile, unlike inMemory, which is a column-family configuration, inMemoryForceMode
is a cluster-wide configuration</div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.LRU_IN_MEMORY_FORCE_MODE_CONFIG_NAME">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="DEFAULT_LOAD_FACTOR">
<h3>DEFAULT_LOAD_FACTOR</h3>
<div class="member-signature"><span class="modifiers">static final</span>&nbsp;<span class="return-type">float</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-128">DEFAULT_LOAD_FACTOR</a></span></div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.DEFAULT_LOAD_FACTOR">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="DEFAULT_CONCURRENCY_LEVEL">
<h3>DEFAULT_CONCURRENCY_LEVEL</h3>
<div class="member-signature"><span class="modifiers">static final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-129">DEFAULT_CONCURRENCY_LEVEL</a></span></div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.DEFAULT_CONCURRENCY_LEVEL">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="DEFAULT_MIN_FACTOR">
<h3>DEFAULT_MIN_FACTOR</h3>
<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type">float</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-132">DEFAULT_MIN_FACTOR</a></span></div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.DEFAULT_MIN_FACTOR">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="DEFAULT_ACCEPTABLE_FACTOR">
<h3>DEFAULT_ACCEPTABLE_FACTOR</h3>
<div class="member-signature"><span class="modifiers">static final</span>&nbsp;<span class="return-type">float</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-133">DEFAULT_ACCEPTABLE_FACTOR</a></span></div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.DEFAULT_ACCEPTABLE_FACTOR">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="DEFAULT_SINGLE_FACTOR">
<h3>DEFAULT_SINGLE_FACTOR</h3>
<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type">float</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-136">DEFAULT_SINGLE_FACTOR</a></span></div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.DEFAULT_SINGLE_FACTOR">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="DEFAULT_MULTI_FACTOR">
<h3>DEFAULT_MULTI_FACTOR</h3>
<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type">float</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-137">DEFAULT_MULTI_FACTOR</a></span></div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.DEFAULT_MULTI_FACTOR">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="DEFAULT_MEMORY_FACTOR">
<h3>DEFAULT_MEMORY_FACTOR</h3>
<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type">float</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-138">DEFAULT_MEMORY_FACTOR</a></span></div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.DEFAULT_MEMORY_FACTOR">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="DEFAULT_HARD_CAPACITY_LIMIT_FACTOR">
<h3>DEFAULT_HARD_CAPACITY_LIMIT_FACTOR</h3>
<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type">float</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-140">DEFAULT_HARD_CAPACITY_LIMIT_FACTOR</a></span></div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.DEFAULT_HARD_CAPACITY_LIMIT_FACTOR">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="DEFAULT_IN_MEMORY_FORCE_MODE">
<h3>DEFAULT_IN_MEMORY_FORCE_MODE</h3>
<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-142">DEFAULT_IN_MEMORY_FORCE_MODE</a></span></div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.DEFAULT_IN_MEMORY_FORCE_MODE">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="STAT_THREAD_PERIOD">
<h3>STAT_THREAD_PERIOD</h3>
<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-145">STAT_THREAD_PERIOD</a></span></div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.STAT_THREAD_PERIOD">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="LRU_MAX_BLOCK_SIZE">
<h3>LRU_MAX_BLOCK_SIZE</h3>
<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-146">LRU_MAX_BLOCK_SIZE</a></span></div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.LRU_MAX_BLOCK_SIZE">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="DEFAULT_MAX_BLOCK_SIZE">
<h3>DEFAULT_MAX_BLOCK_SIZE</h3>
<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-147">DEFAULT_MAX_BLOCK_SIZE</a></span></div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.LruBlockCache.DEFAULT_MAX_BLOCK_SIZE">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="map">
<h3>map</h3>
<div class="member-signature"><span class="modifiers">private final transient</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ConcurrentHashMap.html" title="class or interface in java.util.concurrent" class="external-link">ConcurrentHashMap</a>&lt;<a href="BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>,<wbr><a href="LruCachedBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">LruCachedBlock</a>&gt;</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-158">map</a></span></div>
<div class="block">Defined the cache map as <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ConcurrentHashMap.html" title="class or interface in java.util.concurrent" class="external-link"><code>ConcurrentHashMap</code></a> here, because in
<a href="#getBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey,boolean,boolean,boolean)"><code>getBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey, boolean, boolean, boolean)</code></a>, we need to guarantee the atomicity of map#k (key, func).
Besides, the func method must execute exactly once only when the key is present and under the
lock context, otherwise the reference count will be messed up. Notice that the
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ConcurrentSkipListMap.html" title="class or interface in java.util.concurrent" class="external-link"><code>ConcurrentSkipListMap</code></a> can not guarantee that. Some code using
#computeIfPresent also expects the supplier to be executed only once. ConcurrentHashMap can
guarantee that. Other types may not.</div>
</section>
</li>
<li>
<section class="detail" id="evictionLock">
<h3>evictionLock</h3>
<div class="member-signature"><span class="modifiers">private final transient</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/locks/ReentrantLock.html" title="class or interface in java.util.concurrent.locks" class="external-link">ReentrantLock</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-161">evictionLock</a></span></div>
<div class="block">Eviction lock (locked when eviction in process)</div>
</section>
</li>
<li>
<section class="detail" id="maxBlockSize">
<h3>maxBlockSize</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-163">maxBlockSize</a></span></div>
</section>
</li>
<li>
<section class="detail" id="evictionInProgress">
<h3>evictionInProgress</h3>
<div class="member-signature"><span class="modifiers">private volatile</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-166">evictionInProgress</a></span></div>
<div class="block">Volatile boolean to track if we are in an eviction process or not</div>
</section>
</li>
<li>
<section class="detail" id="evictionThread">
<h3>evictionThread</h3>
<div class="member-signature"><span class="modifiers">private final transient</span>&nbsp;<span class="return-type"><a href="LruBlockCache.EvictionThread.html" title="class in org.apache.hadoop.hbase.io.hfile">LruBlockCache.EvictionThread</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-169">evictionThread</a></span></div>
<div class="block">Eviction thread</div>
</section>
</li>
<li>
<section class="detail" id="scheduleThreadPool">
<h3>scheduleThreadPool</h3>
<div class="member-signature"><span class="modifiers">private final transient</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ScheduledExecutorService.html" title="class or interface in java.util.concurrent" class="external-link">ScheduledExecutorService</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-172">scheduleThreadPool</a></span></div>
<div class="block">Statistics thread schedule pool (for heavy debugging, could remove)</div>
</section>
</li>
<li>
<section class="detail" id="size">
<h3>size</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/AtomicLong.html" title="class or interface in java.util.concurrent.atomic" class="external-link">AtomicLong</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-177">size</a></span></div>
<div class="block">Current size of cache</div>
</section>
</li>
<li>
<section class="detail" id="dataBlockSize">
<h3>dataBlockSize</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/LongAdder.html" title="class or interface in java.util.concurrent.atomic" class="external-link">LongAdder</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-180">dataBlockSize</a></span></div>
<div class="block">Current size of data blocks</div>
</section>
</li>
<li>
<section class="detail" id="indexBlockSize">
<h3>indexBlockSize</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/LongAdder.html" title="class or interface in java.util.concurrent.atomic" class="external-link">LongAdder</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-183">indexBlockSize</a></span></div>
<div class="block">Current size of index blocks</div>
</section>
</li>
<li>
<section class="detail" id="bloomBlockSize">
<h3>bloomBlockSize</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/LongAdder.html" title="class or interface in java.util.concurrent.atomic" class="external-link">LongAdder</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-186">bloomBlockSize</a></span></div>
<div class="block">Current size of bloom blocks</div>
</section>
</li>
<li>
<section class="detail" id="elements">
<h3>elements</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/AtomicLong.html" title="class or interface in java.util.concurrent.atomic" class="external-link">AtomicLong</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-189">elements</a></span></div>
<div class="block">Current number of cached elements</div>
</section>
</li>
<li>
<section class="detail" id="dataBlockElements">
<h3>dataBlockElements</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/LongAdder.html" title="class or interface in java.util.concurrent.atomic" class="external-link">LongAdder</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-192">dataBlockElements</a></span></div>
<div class="block">Current number of cached data block elements</div>
</section>
</li>
<li>
<section class="detail" id="indexBlockElements">
<h3>indexBlockElements</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/LongAdder.html" title="class or interface in java.util.concurrent.atomic" class="external-link">LongAdder</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-195">indexBlockElements</a></span></div>
<div class="block">Current number of cached index block elements</div>
</section>
</li>
<li>
<section class="detail" id="bloomBlockElements">
<h3>bloomBlockElements</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/LongAdder.html" title="class or interface in java.util.concurrent.atomic" class="external-link">LongAdder</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-198">bloomBlockElements</a></span></div>
<div class="block">Current number of cached bloom block elements</div>
</section>
</li>
<li>
<section class="detail" id="count">
<h3>count</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/AtomicLong.html" title="class or interface in java.util.concurrent.atomic" class="external-link">AtomicLong</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-201">count</a></span></div>
<div class="block">Cache access count (sequential ID)</div>
</section>
</li>
<li>
<section class="detail" id="hardCapacityLimitFactor">
<h3>hardCapacityLimitFactor</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">float</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-204">hardCapacityLimitFactor</a></span></div>
<div class="block">hard capacity limit</div>
</section>
</li>
<li>
<section class="detail" id="stats">
<h3>stats</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-207">stats</a></span></div>
<div class="block">Cache statistics</div>
</section>
</li>
<li>
<section class="detail" id="maxSize">
<h3>maxSize</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-210">maxSize</a></span></div>
<div class="block">Maximum allowable size of cache (block put if size > max, evict)</div>
</section>
</li>
<li>
<section class="detail" id="blockSize">
<h3>blockSize</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-213">blockSize</a></span></div>
<div class="block">Approximate block size</div>
</section>
</li>
<li>
<section class="detail" id="acceptableFactor">
<h3>acceptableFactor</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">float</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-216">acceptableFactor</a></span></div>
<div class="block">Acceptable size of cache (no evictions if size &lt; acceptable)</div>
</section>
</li>
<li>
<section class="detail" id="minFactor">
<h3>minFactor</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">float</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-219">minFactor</a></span></div>
<div class="block">Minimum threshold of cache (when evicting, evict until size &lt; min)</div>
</section>
</li>
<li>
<section class="detail" id="singleFactor">
<h3>singleFactor</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">float</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-222">singleFactor</a></span></div>
<div class="block">Single access bucket size</div>
</section>
</li>
<li>
<section class="detail" id="multiFactor">
<h3>multiFactor</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">float</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-225">multiFactor</a></span></div>
<div class="block">Multiple access bucket size</div>
</section>
</li>
<li>
<section class="detail" id="memoryFactor">
<h3>memoryFactor</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">float</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-228">memoryFactor</a></span></div>
<div class="block">In-memory bucket size</div>
</section>
</li>
<li>
<section class="detail" id="overhead">
<h3>overhead</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-231">overhead</a></span></div>
<div class="block">Overhead of the structure itself</div>
</section>
</li>
<li>
<section class="detail" id="forceInMemory">
<h3>forceInMemory</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-234">forceInMemory</a></span></div>
<div class="block">Whether in-memory hfile's data block has higher priority when evicting</div>
</section>
</li>
<li>
<section class="detail" id="victimHandler">
<h3>victimHandler</h3>
<div class="member-signature"><span class="modifiers">private transient</span>&nbsp;<span class="return-type"><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-240">victimHandler</a></span></div>
<div class="block">Where to send victims (blocks evicted/missing from the cache). This is used only when we use an
external cache as L2. Note: See org.apache.hadoop.hbase.io.hfile.MemcachedBlockCache</div>
</section>
</li>
<li>
<section class="detail" id="CACHE_FIXED_OVERHEAD">
<h3>CACHE_FIXED_OVERHEAD</h3>
<div class="member-signature"><span class="modifiers">public static final</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-1047">CACHE_FIXED_OVERHEAD</a></span></div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;(long,long)">
<h3>LruBlockCache</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-250">LruBlockCache</a></span><wbr><span class="parameters">(long&nbsp;maxSize,
long&nbsp;blockSize)</span></div>
<div class="block">Default constructor. Specify maximum size and expected average block size (approximation is
fine).
<p>
All other factors will be calculated based on defaults specified in this class.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>maxSize</code> - maximum size of cache, in bytes</dd>
<dd><code>blockSize</code> - approximate size of each block, in bytes</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="&lt;init&gt;(long,long,boolean)">
<h3>LruBlockCache</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-257">LruBlockCache</a></span><wbr><span class="parameters">(long&nbsp;maxSize,
long&nbsp;blockSize,
boolean&nbsp;evictionThread)</span></div>
<div class="block">Constructor used for testing. Allows disabling of the eviction thread.</div>
</section>
</li>
<li>
<section class="detail" id="&lt;init&gt;(long,long,boolean,org.apache.hadoop.conf.Configuration)">
<h3>LruBlockCache</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-264">LruBlockCache</a></span><wbr><span class="parameters">(long&nbsp;maxSize,
long&nbsp;blockSize,
boolean&nbsp;evictionThread,
org.apache.hadoop.conf.Configuration&nbsp;conf)</span></div>
</section>
</li>
<li>
<section class="detail" id="&lt;init&gt;(long,long,org.apache.hadoop.conf.Configuration)">
<h3>LruBlockCache</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-277">LruBlockCache</a></span><wbr><span class="parameters">(long&nbsp;maxSize,
long&nbsp;blockSize,
org.apache.hadoop.conf.Configuration&nbsp;conf)</span></div>
</section>
</li>
<li>
<section class="detail" id="&lt;init&gt;(long,long,boolean,int,float,int,float,float,float,float,float,float,boolean,long)">
<h3>LruBlockCache</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-295">LruBlockCache</a></span><wbr><span class="parameters">(long&nbsp;maxSize,
long&nbsp;blockSize,
boolean&nbsp;evictionThread,
int&nbsp;mapInitialSize,
float&nbsp;mapLoadFactor,
int&nbsp;mapConcurrencyLevel,
float&nbsp;minFactor,
float&nbsp;acceptableFactor,
float&nbsp;singleFactor,
float&nbsp;multiFactor,
float&nbsp;memoryFactor,
float&nbsp;hardLimitFactor,
boolean&nbsp;forceInMemory,
long&nbsp;maxBlockSize)</span></div>
<div class="block">Configurable constructor. Use this constructor if not using defaults.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>maxSize</code> - maximum size of this cache, in bytes</dd>
<dd><code>blockSize</code> - expected average size of blocks, in bytes</dd>
<dd><code>evictionThread</code> - whether to run evictions in a bg thread or not</dd>
<dd><code>mapInitialSize</code> - initial size of backing ConcurrentHashMap</dd>
<dd><code>mapLoadFactor</code> - initial load factor of backing ConcurrentHashMap</dd>
<dd><code>mapConcurrencyLevel</code> - initial concurrency factor for backing CHM</dd>
<dd><code>minFactor</code> - percentage of total size that eviction will evict until</dd>
<dd><code>acceptableFactor</code> - percentage of total size that triggers eviction</dd>
<dd><code>singleFactor</code> - percentage of total size for single-access blocks</dd>
<dd><code>multiFactor</code> - percentage of total size for multiple-access blocks</dd>
<dd><code>memoryFactor</code> - percentage of total size for in-memory blocks</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="setVictimCache(org.apache.hadoop.hbase.io.hfile.BlockCache)">
<h3>setVictimCache</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-340">setVictimCache</a></span><wbr><span class="parameters">(<a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&nbsp;victimCache)</span></div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="FirstLevelBlockCache.html#setVictimCache(org.apache.hadoop.hbase.io.hfile.BlockCache)">FirstLevelBlockCache</a></code></span></div>
<div class="block">Specifies the secondary cache. An entry that is evicted from this cache due to a size
constraint will be inserted into the victim cache.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="FirstLevelBlockCache.html#setVictimCache(org.apache.hadoop.hbase.io.hfile.BlockCache)">setVictimCache</a></code>&nbsp;in interface&nbsp;<code><a href="FirstLevelBlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">FirstLevelBlockCache</a></code></dd>
<dt>Parameters:</dt>
<dd><code>victimCache</code> - the second level cache</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="setMaxSize(long)">
<h3>setMaxSize</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-348">setMaxSize</a></span><wbr><span class="parameters">(long&nbsp;maxSize)</span></div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="ResizableBlockCache.html#setMaxSize(long)">ResizableBlockCache</a></code></span></div>
<div class="block">Sets the max heap size that can be used by the BlockCache.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="ResizableBlockCache.html#setMaxSize(long)">setMaxSize</a></code>&nbsp;in interface&nbsp;<code><a href="ResizableBlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">ResizableBlockCache</a></code></dd>
<dt>Parameters:</dt>
<dd><code>maxSize</code> - The max heap size.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="asReferencedHeapBlock(org.apache.hadoop.hbase.io.hfile.Cacheable)">
<h3>asReferencedHeapBlock</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type"><a href="Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-371">asReferencedHeapBlock</a></span><wbr><span class="parameters">(<a href="Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;buf)</span></div>
<div class="block">The block cached in LRUBlockCache will always be an heap block: on the one side, the heap
access will be more faster then off-heap, the small index block or meta block cached in
CombinedBlockCache will benefit a lot. on other side, the LRUBlockCache size is always
calculated based on the total heap size, if caching an off-heap block in LRUBlockCache, the
heap size will be messed up. Here we will clone the block into an heap block if it's an
off-heap block, otherwise just use the original block. The key point is maintain the refCnt of
the block (HBASE-22127): <br>
1. if cache the cloned heap block, its refCnt is an totally new one, it's easy to handle; <br>
2. if cache the original heap block, we're sure that it won't be tracked in ByteBuffAllocator's
reservoir, if both RPC and LRUBlockCache release the block, then it can be garbage collected by
JVM, so need a retain here.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>buf</code> - the original block</dd>
<dt>Returns:</dt>
<dd>an block with an heap memory backend.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="cacheBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey,org.apache.hadoop.hbase.io.hfile.Cacheable,boolean)">
<h3>cacheBlock</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-393">cacheBlock</a></span><wbr><span class="parameters">(<a href="BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
<a href="Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;buf,
boolean&nbsp;inMemory)</span></div>
<div class="block">Cache the block with the specified name and buffer.
<p>
It is assumed this will NOT be called on an already cached block. In rare cases (HBASE-8547)
this can happen, for which we compare the buffer contents.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="BlockCache.html#cacheBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey,org.apache.hadoop.hbase.io.hfile.Cacheable,boolean)">cacheBlock</a></code>&nbsp;in interface&nbsp;<code><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
<dt>Parameters:</dt>
<dd><code>cacheKey</code> - block's cache key</dd>
<dd><code>buf</code> - block buffer</dd>
<dd><code>inMemory</code> - if block is in-memory</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="assertCounterSanity(long,long)">
<h3>assertCounterSanity</h3>
<div class="member-signature"><span class="modifiers">private static</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-453">assertCounterSanity</a></span><wbr><span class="parameters">(long&nbsp;mapSize,
long&nbsp;counterVal)</span></div>
<div class="block">Sanity-checking for parity between actual block cache content and metrics. Intended only for
use with TRACE level logging and -ea JVM.</div>
</section>
</li>
<li>
<section class="detail" id="cacheBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey,org.apache.hadoop.hbase.io.hfile.Cacheable)">
<h3>cacheBlock</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-478">cacheBlock</a></span><wbr><span class="parameters">(<a href="BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
<a href="Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;buf)</span></div>
<div class="block">Cache the block with the specified name and buffer.
<p>
TODO after HBASE-22005, we may cache an block which allocated from off-heap, but our LRU cache
sizing is based on heap size, so we should handle this in HBASE-22127. It will introduce an
switch whether make the LRU on-heap or not, if so we may need copy the memory to on-heap,
otherwise the caching size is based on off-heap.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="BlockCache.html#cacheBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey,org.apache.hadoop.hbase.io.hfile.Cacheable)">cacheBlock</a></code>&nbsp;in interface&nbsp;<code><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
<dt>Parameters:</dt>
<dd><code>cacheKey</code> - block's cache key</dd>
<dd><code>buf</code> - block buffer</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="updateSizeMetrics(org.apache.hadoop.hbase.io.hfile.LruCachedBlock,boolean)">
<h3>updateSizeMetrics</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-487">updateSizeMetrics</a></span><wbr><span class="parameters">(<a href="LruCachedBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">LruCachedBlock</a>&nbsp;cb,
boolean&nbsp;evict)</span></div>
<div class="block">Helper function that updates the local size counter and also updates any per-cf or
per-blocktype metrics it can discern from given <a href="LruCachedBlock.html" title="class in org.apache.hadoop.hbase.io.hfile"><code>LruCachedBlock</code></a></div>
</section>
</li>
<li>
<section class="detail" id="getBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey,boolean,boolean,boolean)">
<h3>getBlock</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-514">getBlock</a></span><wbr><span class="parameters">(<a href="BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
boolean&nbsp;caching,
boolean&nbsp;repeat,
boolean&nbsp;updateCacheMetrics)</span></div>
<div class="block">Get the buffer of the block with the specified name.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="BlockCache.html#getBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey,boolean,boolean,boolean)">getBlock</a></code>&nbsp;in interface&nbsp;<code><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
<dt>Parameters:</dt>
<dd><code>cacheKey</code> - block's cache key</dd>
<dd><code>caching</code> - true if the caller caches blocks on cache misses</dd>
<dd><code>repeat</code> - Whether this is a repeat lookup for the same block (used to avoid
double counting cache misses when doing double-check locking)</dd>
<dd><code>updateCacheMetrics</code> - Whether to update cache metrics or not</dd>
<dt>Returns:</dt>
<dd>buffer of specified cache key, or null if not in cache</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="containsBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey)">
<h3>containsBlock</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-557">containsBlock</a></span><wbr><span class="parameters">(<a href="BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</span></div>
<div class="block">Whether the cache contains block with specified cacheKey</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="FirstLevelBlockCache.html#containsBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey)">containsBlock</a></code>&nbsp;in interface&nbsp;<code><a href="FirstLevelBlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">FirstLevelBlockCache</a></code></dd>
<dt>Parameters:</dt>
<dd><code>cacheKey</code> - cache key for the block</dd>
<dt>Returns:</dt>
<dd>true if contains the block</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="evictBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey)">
<h3>evictBlock</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-562">evictBlock</a></span><wbr><span class="parameters">(<a href="BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</span></div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="BlockCache.html#evictBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey)">BlockCache</a></code></span></div>
<div class="block">Evict block from cache.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="BlockCache.html#evictBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey)">evictBlock</a></code>&nbsp;in interface&nbsp;<code><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
<dt>Parameters:</dt>
<dd><code>cacheKey</code> - Block to evict</dd>
<dt>Returns:</dt>
<dd>true if block existed and was evicted, false if not</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="evictBlocksByHfileName(java.lang.String)">
<h3>evictBlocksByHfileName</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-576">evictBlocksByHfileName</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;hfileName)</span></div>
<div class="block">Evicts all blocks for a specific HFile. This is an expensive operation implemented as a
linear-time search through all blocks in the cache. Ideally this should be a search in a
log-access-time map.
<p>
This is used for evict-on-close to remove all blocks of a specific HFile.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="BlockCache.html#evictBlocksByHfileName(java.lang.String)">evictBlocksByHfileName</a></code>&nbsp;in interface&nbsp;<code><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
<dt>Returns:</dt>
<dd>the number of blocks evicted</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="evictBlock(org.apache.hadoop.hbase.io.hfile.LruCachedBlock,boolean)">
<h3>evictBlock</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-598">evictBlock</a></span><wbr><span class="parameters">(<a href="LruCachedBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">LruCachedBlock</a>&nbsp;block,
boolean&nbsp;evictedByEvictionProcess)</span></div>
<div class="block">Evict the block, and it will be cached by the victim handler if exists &amp;&amp; block may be
read again later</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>evictedByEvictionProcess</code> - true if the given block is evicted by EvictionThread</dd>
<dt>Returns:</dt>
<dd>the heap size of evicted block</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="runEviction()">
<h3>runEviction</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-645">runEviction</a></span>()</div>
<div class="block">Multi-threaded call to run the eviction process.</div>
</section>
</li>
<li>
<section class="detail" id="isEvictionInProgress()">
<h3>isEvictionInProgress</h3>
<div class="member-signature"><span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-653">isEvictionInProgress</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="getOverhead()">
<h3>getOverhead</h3>
<div class="member-signature"><span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-657">getOverhead</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="evict()">
<h3>evict</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-664">evict</a></span>()</div>
<div class="block">Eviction method.</div>
</section>
</li>
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-784">toString</a></span>()</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString()" title="class or interface in java.lang" class="external-link">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getMaxSize()">
<h3>getMaxSize</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-878">getMaxSize</a></span>()</div>
<div class="block">Get the maximum size of this cache.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="BlockCache.html#getMaxSize()">getMaxSize</a></code>&nbsp;in interface&nbsp;<code><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
<dt>Returns:</dt>
<dd>max size in bytes</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getCurrentSize()">
<h3>getCurrentSize</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-883">getCurrentSize</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="BlockCache.html#getCurrentSize()">BlockCache</a></code></span></div>
<div class="block">Returns the occupied size of the block cache, in bytes.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="BlockCache.html#getCurrentSize()">getCurrentSize</a></code>&nbsp;in interface&nbsp;<code><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
<dt>Returns:</dt>
<dd>occupied space in cache, in bytes</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getCurrentDataSize()">
<h3>getCurrentDataSize</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-888">getCurrentDataSize</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="BlockCache.html#getCurrentDataSize()">BlockCache</a></code></span></div>
<div class="block">Returns the occupied size of data blocks, in bytes.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="BlockCache.html#getCurrentDataSize()">getCurrentDataSize</a></code>&nbsp;in interface&nbsp;<code><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
<dt>Returns:</dt>
<dd>occupied space in cache, in bytes</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getCurrentIndexSize()">
<h3>getCurrentIndexSize</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-893">getCurrentIndexSize</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="getCurrentBloomSize()">
<h3>getCurrentBloomSize</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-897">getCurrentBloomSize</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="getFreeSize()">
<h3>getFreeSize</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-901">getFreeSize</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="BlockCache.html#getFreeSize()">BlockCache</a></code></span></div>
<div class="block">Returns the free size of the block cache, in bytes.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="BlockCache.html#getFreeSize()">getFreeSize</a></code>&nbsp;in interface&nbsp;<code><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
<dt>Returns:</dt>
<dd>free space in cache, in bytes</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="size()">
<h3>size</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-906">size</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="BlockCache.html#size()">BlockCache</a></code></span></div>
<div class="block">Returns the total size of the block cache, in bytes.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="BlockCache.html#size()">size</a></code>&nbsp;in interface&nbsp;<code><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
<dt>Returns:</dt>
<dd>size of cache, in bytes</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getBlockCount()">
<h3>getBlockCount</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-911">getBlockCount</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="BlockCache.html#getBlockCount()">BlockCache</a></code></span></div>
<div class="block">Returns the number of blocks currently cached in the block cache.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="BlockCache.html#getBlockCount()">getBlockCount</a></code>&nbsp;in interface&nbsp;<code><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
<dt>Returns:</dt>
<dd>number of blocks in the cache</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getDataBlockCount()">
<h3>getDataBlockCount</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-916">getDataBlockCount</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="BlockCache.html#getDataBlockCount()">BlockCache</a></code></span></div>
<div class="block">Returns the number of data blocks currently cached in the block cache.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="BlockCache.html#getDataBlockCount()">getDataBlockCount</a></code>&nbsp;in interface&nbsp;<code><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
<dt>Returns:</dt>
<dd>number of blocks in the cache</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getIndexBlockCount()">
<h3>getIndexBlockCount</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-921">getIndexBlockCount</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="getBloomBlockCount()">
<h3>getBloomBlockCount</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-925">getBloomBlockCount</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="getEvictionThread()">
<h3>getEvictionThread</h3>
<div class="member-signature"><span class="return-type"><a href="LruBlockCache.EvictionThread.html" title="class in org.apache.hadoop.hbase.io.hfile">LruBlockCache.EvictionThread</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-929">getEvictionThread</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="logStats()">
<h3>logStats</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-1016">logStats</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="getStats()">
<h3>getStats</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-1042">getStats</a></span>()</div>
<div class="block">Get counter statistics for this cache.
<p>
Includes: total accesses, hits, misses, evicted blocks, and runs of the eviction processes.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="BlockCache.html#getStats()">getStats</a></code>&nbsp;in interface&nbsp;<code><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="heapSize()">
<h3>heapSize</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-1050">heapSize</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="../HeapSize.html#heapSize()">HeapSize</a></code></span></div>
<div class="block">Return the approximate 'exclusive deep size' of implementing object. Includes count of payload
and hosting object sizings.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="../HeapSize.html#heapSize()">heapSize</a></code>&nbsp;in interface&nbsp;<code><a href="../HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a></code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="calculateOverhead(long,long,int)">
<h3>calculateOverhead</h3>
<div class="member-signature"><span class="modifiers">private static</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-1055">calculateOverhead</a></span><wbr><span class="parameters">(long&nbsp;maxSize,
long&nbsp;blockSize,
int&nbsp;concurrency)</span></div>
</section>
</li>
<li>
<section class="detail" id="iterator()">
<h3>iterator</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Iterator.html" title="class or interface in java.util" class="external-link">Iterator</a>&lt;<a href="CachedBlock.html" title="interface in org.apache.hadoop.hbase.io.hfile">CachedBlock</a>&gt;</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-1062">iterator</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="BlockCache.html#iterator()">BlockCache</a></code></span></div>
<div class="block">Returns Iterator over the blocks in the cache.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="BlockCache.html#iterator()">iterator</a></code>&nbsp;in interface&nbsp;<code><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Iterable.html#iterator()" title="class or interface in java.lang" class="external-link">iterator</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Iterable.html" title="class or interface in java.lang" class="external-link">Iterable</a>&lt;<a href="CachedBlock.html" title="interface in org.apache.hadoop.hbase.io.hfile">CachedBlock</a>&gt;</code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="acceptableSize()">
<h3>acceptableSize</h3>
<div class="member-signature"><span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-1155">acceptableSize</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="minSize()">
<h3>minSize</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-1159">minSize</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="singleSize()">
<h3>singleSize</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-1163">singleSize</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="multiSize()">
<h3>multiSize</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-1167">multiSize</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="memorySize()">
<h3>memorySize</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-1171">memorySize</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="shutdown()">
<h3>shutdown</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-1175">shutdown</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="BlockCache.html#shutdown()">BlockCache</a></code></span></div>
<div class="block">Shutdown the cache.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="BlockCache.html#shutdown()">shutdown</a></code>&nbsp;in interface&nbsp;<code><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="clearCache()">
<h3>clearCache</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-1201">clearCache</a></span>()</div>
<div class="block">Clears the cache. Used in tests.</div>
</section>
</li>
<li>
<section class="detail" id="getCachedFileNamesForTest()">
<h3>getCachedFileNamesForTest</h3>
<div class="member-signature"><span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/SortedSet.html" title="class or interface in java.util" class="external-link">SortedSet</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&gt;</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-1210">getCachedFileNamesForTest</a></span>()</div>
<div class="block">Used in testing. May be very inefficient.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the set of cached file names</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getEncodingCountsForTest()">
<h3>getEncodingCountsForTest</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="../encoding/DataBlockEncoding.html" title="enum class in org.apache.hadoop.hbase.io.encoding">DataBlockEncoding</a>,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html" title="class or interface in java.lang" class="external-link">Integer</a>&gt;</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-1218">getEncodingCountsForTest</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="getMapForTests()">
<h3>getMapForTests</h3>
<div class="member-signature"><span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>,<wbr><a href="LruCachedBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">LruCachedBlock</a>&gt;</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-1228">getMapForTests</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="getBlockCaches()">
<h3>getBlockCaches</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>[]</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.html#line-1232">getBlockCaches</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="BlockCache.html#getBlockCaches()">BlockCache</a></code></span></div>
<div class="block">Returns The list of sub blockcaches that make up this one; returns null if no sub caches.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="BlockCache.html#getBlockCaches()">getBlockCaches</a></code>&nbsp;in interface&nbsp;<code><a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2007&#x2013;2020 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>