Home  >  Article  >  Java  >  Detailed analysis of heap memory and stack memory in Java

Detailed analysis of heap memory and stack memory in Java

王林
王林forward
2019-12-26 17:40:252376browse

Detailed analysis of heap memory and stack memory in Java

1. Overview

In Java, there are two types of memory, one is stack memory and the other is heap memory.

2. Heap memory

1. What is heap memory?

Heap memory is a type of Java memory. Its function is to store objects and arrays in Java. When we create a new object or create an array, a section of heap memory will be opened. Give it space for storage.

2. What are the characteristics of heap memory?

The first point: The heap can actually be regarded as a pipeline, or it is similar to the situation of queuing up to buy tickets, so the characteristics of the heap memory are: first in, first out, last in, last out, that is You line up first, okay, you buy the ticket first.

Second point: The heap can dynamically allocate memory size, and the lifetime does not need to be told to the compiler in advance, because it dynamically allocates memory at runtime, but the disadvantage is that since memory must be dynamically allocated at runtime , the access speed is slower.

3. How is the new object allocated in the heap?

Managed by the automatic garbage collector of the Java virtual machine.

Free video tutorial sharing: java video tutorial

3. Stack memory

1. What is stack memory

Stack memory It is another type of memory in Java, mainly used to execute programs, such as basic type variables and object reference variables.

2. Characteristics of stack memory

The first point: stack memory is like a mineral water bottle. If you put something in it, the first thing you put in will sink to the bottom, so its characteristics are : first in last out, last in first out

Second point: The access speed is faster than the heap, second only to the register. The stack data can be shared, but the disadvantage is that the size and lifetime of the data in the stack must be It is certain and lacks flexibility

3. Stack memory allocation mechanism

Stack memory can be called a first-level cache and is automatically recycled by the garbage collector

4. Data sharing

Example:

int a = 3;
int b = 3;

The first step of processing:

1. The compiler first processes int a = 3;

2.Create a reference to variable a

3. Search the stack to see if there is a value of 3

4. If not found, store 3 and a points to 3

Second step processing:

1. Process b=3

2. Create a reference to variable b

3. Find it and assign it directly

The third step is to change:

Next

a = 4;

Same as above method

The value of a changes, a points to 4, and the value of b will not change.

PS: If there are two objects, it is different. The objects point to the same reference. If one changes, the other will also change.

4. The difference between stack and heap

JVM is a stack-based virtual machine. The JVM allocates a stack for each newly created thread. In other words, for a Java program, its operation is completed through the operation of the stack. The stack saves the thread's state in frames. The JVM only performs two operations on the stack: push and pop operations in frame units.

Differences:

1. Heap memory is used to store objects and arrays created by new.

2. Stack memory is used to store methods or local variables, etc.

3. The heap is first in, first out, last in, last out.

4. The stack is last in, first out, first in, last out.

Same points:

1. They are both a type of Java memory.

2. The system will automatically recycle it, but for heap memory, generally developers will automatically recycle it.

More related articles and tutorials to share:Java zero-based introduction

The above is the detailed content of Detailed analysis of heap memory and stack memory in Java. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:csdn.net. If there is any infringement, please contact admin@php.cn delete
Previous article:What are java constants?Next article:What are java constants?