---
title: Managing Heap and Off-heap Memory
---

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

By default, <%=vars.product_name_long%> uses the JVM heap. <%=vars.product_name_long%> also offers an option to store data off heap. This section describes how to manage heap and off-heap memory to best support your application.

-   **[Heap memory management](heap_management.html)**

    Tips to optimize your application's performance by tuning the way <%=vars.product_name_long%> uses the JVM heap.

-   **[Off-heap memory management](off_heap_management.html)**

    How to configure <%=vars.product_name%> to store region values in off-heap memory, which is memory within the JVM that is not subject to Java garbage collection.

-   **[Locking memory](lock_memory.html)**

    How to prevent the operating system from paging out heap or off-heap memory.