0%

java内存结构

java内存结构

​ 了解java的内存结构,能够更好地理解程序的调用,内存结构主要有: 栈、堆、方法区、程序计数器。可以看图。比较简陋,看懂就行

java

##### 虚拟机栈

​ 虚拟机栈,存放方法中的局部变量、方法的出口和入口等,我们程序从主方法进入会开辟一个栈,里面存放程序的局部变量等等,当主方法又调用另外一个方法时,会重新在栈空间中开辟一块新的栈。。。

​ 当调用一个方法时,叫做入栈,而当方法调用完之后,会出栈,从而开辟的那块栈空间会被销毁。

​ 例如下面这个程序

1
2
3
4
5
6
7
8
9
10
11
12
public class Test {
public static void main(String[] args) {
int a = 1;
int b = 2;
Test t = new Test();
int sum = t.add(a,b);
}

public int add(int a, int b) {
return a + b;
}
}

当启动程序时,会开辟一块主方法的栈,而当执行到add方法时,会在开辟一块区域。而执行完毕之后会销毁,最后直至程序结束

stack

在栈空间,会出现栈溢出(StackOverflowError),即栈空间被耗尽,会出现异常。当写一个递归程序没有规定出口,就会不停的开辟新栈,最后就会导致栈溢出。

本地方法栈

​ 是java调用native方法所开辟的栈空间。为native所服务。

程序计数器

​ 程序计数器是每个线程私有的,程序计数器保证程序的执行流程,当线程切换时,程序计数器可以保证程序能恢复到正确的执行位置。

​ 堆是整个内存结构中,分配空间最大的一部分,堆空间主要是存放对象实例,几乎所有的对象实例、数组都在堆中分配内存。堆也是垃圾回收的主要区域。当堆内存满了以后,会出现OutOfMemoryError异常。表示堆内存满了。

方法区

​ 方法区,主要是用来存储类的加载信息,静态方法,字符串常量池也属于方法区,方法区好像在元空间中,这个概念一直都很模糊。

-------------本文结束感谢您的阅读-------------