org.elasticsearch.common.util.PageCacheRecycler Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of elasticsearch Show documentation
Show all versions of elasticsearch Show documentation
Elasticsearch subproject :server
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
package org.elasticsearch.common.util;
import org.apache.lucene.util.RamUsageEstimator;
import org.elasticsearch.common.recycler.AbstractRecyclerC;
import org.elasticsearch.common.recycler.Recycler;
import org.elasticsearch.common.settings.Setting;
import org.elasticsearch.common.settings.Setting.Property;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.ByteSizeValue;
import org.elasticsearch.common.util.concurrent.EsExecutors;
import java.util.Arrays;
import java.util.Locale;
import static org.elasticsearch.common.recycler.Recyclers.concurrent;
import static org.elasticsearch.common.recycler.Recyclers.concurrentDeque;
import static org.elasticsearch.common.recycler.Recyclers.dequeFactory;
import static org.elasticsearch.common.recycler.Recyclers.none;
/** A recycler of fixed-size pages. */
public class PageCacheRecycler {
public static final Setting TYPE_SETTING = new Setting<>(
"cache.recycler.page.type",
Type.CONCURRENT.name(),
Type::parse,
Property.NodeScope
);
public static final Setting LIMIT_HEAP_SETTING = Setting.memorySizeSetting(
"cache.recycler.page.limit.heap",
"10%",
Property.NodeScope
);
public static final Setting WEIGHT_BYTES_SETTING = Setting.doubleSetting(
"cache.recycler.page.weight.bytes",
1d,
0d,
Property.NodeScope
);
public static final Setting WEIGHT_LONG_SETTING = Setting.doubleSetting(
"cache.recycler.page.weight.longs",
1d,
0d,
Property.NodeScope,
Property.DeprecatedWarning
);
public static final Setting WEIGHT_INT_SETTING = Setting.doubleSetting(
"cache.recycler.page.weight.ints",
1d,
0d,
Property.NodeScope,
Property.DeprecatedWarning
);
// object pages are less useful to us so we give them a lower weight by default
public static final Setting WEIGHT_OBJECTS_SETTING = Setting.doubleSetting(
"cache.recycler.page.weight.objects",
0.1d,
0d,
Property.NodeScope
);
/** Page size in bytes: 16KB */
public static final int PAGE_SIZE_IN_BYTES = 1 << 14;
public static final int OBJECT_PAGE_SIZE = PAGE_SIZE_IN_BYTES / RamUsageEstimator.NUM_BYTES_OBJECT_REF;
public static final int LONG_PAGE_SIZE = PAGE_SIZE_IN_BYTES / Long.BYTES;
public static final int INT_PAGE_SIZE = PAGE_SIZE_IN_BYTES / Integer.BYTES;
public static final int FLOAT_PAGE_SIZE = PAGE_SIZE_IN_BYTES / Float.BYTES;
public static final int DOUBLE_PAGE_SIZE = PAGE_SIZE_IN_BYTES / Double.BYTES;
public static final int BYTE_PAGE_SIZE = PAGE_SIZE_IN_BYTES;
private final Recycler bytePage;
private final Recycler