blob: de246da99c0715bdd554533ad2e0fad2efdcd8e6 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ignite.internal.benchmarks.jol;
import org.apache.ignite.internal.processors.metric.MetricRegistry;
import org.apache.ignite.internal.processors.metric.impl.AtomicLongMetric;
import org.apache.ignite.internal.processors.metric.impl.BooleanMetricImpl;
import org.apache.ignite.internal.processors.metric.impl.DoubleMetricImpl;
import org.apache.ignite.internal.processors.metric.impl.IntMetricImpl;
import org.apache.ignite.internal.processors.metric.impl.LongAdderMetric;
import org.openjdk.jol.info.GraphLayout;
/**
* Benchmark to measure heap space for metrics.
*/
public class GridMetricsJolBenchmark {
/** */
private static final int BOOLEAN_CNT = 100;
/** */
private static final int DOUBLE_CNT = 100;
/** */
private static final int INT_CNT = 100;
/** */
private static final int LONG_CNT = 100;
/** */
private static final int LONG_ADDER_CNT = 100;
/** */
private static final int TOTAL = BOOLEAN_CNT + DOUBLE_CNT + INT_CNT + LONG_CNT + LONG_ADDER_CNT;
/** */
public static final String BOOLEAN_METRIC = "boolean.metric.";
/** */
public static final String DOUBLE_METRIC = "double.metric.";
/** */
public static final String INT_METRIC = "int.metric.";
/** */
public static final String LONG_METRIC = "long.metric.";
/** */
public static final String LONG_ADDER_METRIC = "long.adder.metric.";
/** */
public static void main(String[] args) {
measureMetricRegistry();
measureArray();
}
/**
* Calculates and prints the size of metrics array of {@code TOTAL} size;
*/
private static void measureArray() {
Object[] metrics = new Object[TOTAL];
int start = 0;
for (int i = 0; i < BOOLEAN_CNT; i++)
metrics[start + i] = new BooleanMetricImpl(BOOLEAN_METRIC + i, null);
start += BOOLEAN_CNT;
for (int i = 0; i < DOUBLE_CNT; i++)
metrics[start + i] = new DoubleMetricImpl(DOUBLE_METRIC + i, null);
start += DOUBLE_CNT;
for (int i = 0; i < INT_CNT; i++)
metrics[start + i] = new IntMetricImpl(INT_METRIC + i, null);
start += INT_CNT;
for (int i = 0; i < LONG_CNT; i++)
metrics[start + i] = new AtomicLongMetric(LONG_METRIC + i, null);
start += LONG_CNT;
for (int i = 0; i < LONG_ADDER_CNT; i++)
metrics[start + i] = new LongAdderMetric(LONG_ADDER_METRIC + i, null);
start += LONG_ADDER_CNT;
long sz = GraphLayout.parseInstance(metrics).totalSize();
System.out.println("Total size of " + TOTAL + " metric array is " + (sz / 1024) + "KiB, " + sz + " bytes.");
}
/**
* Calculates and prints the size of metric registry of {@code TOTAL} size;
*/
private static void measureMetricRegistry() {
MetricRegistry mreg = new MetricRegistry("test", name -> null, name -> null, null);
for (int i = 0; i < BOOLEAN_CNT; i++)
mreg.booleanMetric(BOOLEAN_METRIC + i, null);
for (int i = 0; i < DOUBLE_CNT; i++)
mreg.doubleMetric(DOUBLE_METRIC + i, null);
for (int i = 0; i < INT_CNT; i++)
mreg.doubleMetric(INT_METRIC + i, null);
for (int i = 0; i < LONG_CNT; i++)
mreg.longMetric(LONG_METRIC + i, null);
for (int i = 0; i < LONG_ADDER_CNT; i++)
mreg.longMetric(LONG_ADDER_METRIC + i, null);
long sz = GraphLayout.parseInstance(mreg).totalSize();
System.out.println("Total size of " + TOTAL + " metric registry is " + (sz / 1024) + "KiB, " + sz + " bytes.");
}
}