<!--
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.
-->
<HTML>
<BODY>

<P>The base package of the GemFire Java product, featuring highly
concurrent distributed {@linkplain org.apache.geode.cache.Cache caching}
with {@linkplain org.apache.geode.cache.CacheEvent cache event} delivery,
<a href="{@docRoot}/org/apache/geode/cache/query/package-summary.html#package_description">OQL querying</a>, and
<a href="{@docRoot}/org/apache/geode/admin/package-summary.html#package_description">remote cache administration</a>, built using a {@linkplain
org.apache.geode.distributed.DistributedSystem} which includes a
{@linkplain org.apache.geode.distributed.DistributedLockService}.
</P>

<p>This package contains classes that are used throughout GemFire,
providing enhanced serialization performance using the {@link
org.apache.geode.DataSerializable} feature and the ability to
profile your GemFire application using a handy {@link
org.apache.geode.Statistics} infrastructure.
<p>

<!-- ------------------------------------------------------------ -->

<A NAME="statistics"><H2>GemFire Statistics</H2></A>

<P>The ability to monitor and analyze the behavior and performance of
an application can ease the job of optimization.  To aid in this
analysis, GemFire provides the ability to register and capture
application statistics.  An application statistic is simply a number
that the application is free to modify and that is monitored by
the GemFire's statistics collector.
The statistics may be
monitored at runtime using the Admin API or GemFire JMX Agent.</P>

<P>Each application statistic is described by a
{@link org.apache.geode.StatisticDescriptor} instance.
Logical groupings of application statistics are described by a
{@link org.apache.geode.StatisticsType} instance that contains the name
and description of each statistic.  Each instance of an type
is represented by an instance of
{@link org.apache.geode.Statistics}.
The {@link org.apache.geode.StatisticDescriptor descriptors},
{@link org.apache.geode.StatisticsType types}, and
{@link org.apache.geode.Statistics instances} are created using an
instance of the {@link org.apache.geode.StatisticsFactory} interface.
Each statistics instance
(there may be multiple instances of a statistics type) can be identified
by a {@link org.apache.geode.Statistics#getTextId text id}
and/or a {@link org.apache.geode.Statistics#getNumericId numeric id}.
The name, description, etc. of the statistic and its type
are available in the Admin API or GemFire JMX Agent.</P>

<P>An application can get, set, and increment the value of a statistic
using methods of the <code>Statistics</code> interface.  If statistics
sampling has been <A
href="distributed/DistributedSystem.html#statistic-sampling-enabled">enabled</A>
a thread in the application VM <A
href="distributed/DistributedSystem.html#statistic-sample-rate">periodically</A>
reads the values of application statistics allowing them to be viewed
by the Admin API and GemFire JMX Agent.  Statistics may also be archived
to a file, the <A
href="distributed/DistributedSystem.html#statistic-archive-file ">name
and location</A> of which may be configured when creating a {@link
org.apache.geode.distributed.DistributedSystem}. </P>

<P>In addition to application statistics, GemFire maintains statistics
about the distributed system, the distributed cache,
and the physical machine on which it runs.  These statistics can be
monitored, viewed, and archived just like application statistics.</P>

</BODY>
</HTML>
