This metric can affect overall performance of the underlying OS, if the JVM consumes all available memory.
Heap memory usageis the amount of memory that the JVM allocates for objects used by the running Java system.
Unused objects are regularly removed from the heap by the garbage collector.

Non-Heap memory usageis the amount of memory allocated to the method area and the code cache.
The method area is used to store references to loaded classes.
It can also indicate a thread-creation leak.

This can give you an idea of how much memory your utility consumes without the JVM overhead.
Threadsis the number of active threads in the JVM.
Classesis the number of loaded classes.
Introduction
Java Virtual Machine (JVM) is an execution environment for Java applications.
It can also refer to the runtime instance of the software implementation.
The primary reference implementation of the JVM is HotSpot.
The JVM specification ensures that any implementation is able to interpret bytecode in exactly the same way.
The architecture of the JVM enables detailed control over the actions that a Java app performs.
In case of remote execution, code should be signed with a certificate.
Machine code is the native language of the CPU and can be executed much faster than interpreting bytecode.
You do not need to understand how the JVM works to develop or run Java applications.
However, you might avoid many performance problems that are in fact straightforward if you do have some understanding.
Architecture
The JVM specification defines the subsystems and their external behavior.
If the parent fails to load the class, then the child attempts to load the class itself.
To make the bytecode commands readable to the machine, the execution engine uses two methods.
Memory Model
The Java memory model is built on the concept of automatic memory management.
This is different from many other programming languages, where you have to manually unload the object from memory.
The JVM allocates memory from the underlying OS and separates it into the following areas.
When a Java system creates an object, it is stored in theeden poolof the heap.
Once it is full, a minor garbage collection is triggered at the eden pool.
Eventually, the tenured pool fills up and a major garbage collection is triggered to clean it up.
When a garbage collection is performed, all app threads are stopped, causing a pause.
Major garbage collections are much slower because they involve mostly live objects.
The heap size is dynamic.
Memory is allocated to the heap only if it is required.
When the heap fills up, the JVM reallocates more memory, until the maximum is reached.
Memory reallocation also causes the program to stop briefly.
This is an essential part of Java.
All threads share the memory and other resources available to the JVM process.
Each JVM process starts a main thread at the entry point (the main() method).
Other threads are started from it and present an independent path of execution.
Threads can run in parallel on separate processors, or they can share one processor.
The thread scheduler controls how threads take turns executing on a single processor.
Although memory is automatically managed using garbage collection and memory reallocation processes, you have control over their frequency.
The longer it takes for a generation of the heap to fill up, the fewer garbage collections occur.
To configure the maximum heap size, use the -Xmx option when you start the JVM.
This means that the JVM will never need to allocate more memory to the heap.
However, you will also lose the adaptive memory optimization gained from dynamic heap sizing.
The heap will be of fixed size from the moment you start your tool.
To configure the initial heap size, use the -Xms option when you start the JVM.
The following ways can be used to control the sizes of the young and old generations.
Most applications (especially servers) require concurrent execution, handling a number of tasks.
Tasks are executed in different threads.
There can be many sources of data, and many clients requesting data from the server.
Each request will briefly stop the execution of the background calculation thread to serve the request.
Each thread has a stack that holds the method calls, return addresses, and so on.
In this case, consider limiting the maximum size of the stack in threads.
To configure the thread stack size, use the -Xss option when you start the JVM.
These are the core parameters.
The JVM monitor can measure the following metrics.