java面试:可以讲一讲jvm的内存结构吗?
在java当中,jvm作为java的虚拟机,负责加载、验证、解释/编译并执行 Java 字节码,为了能完成java当中的许多指定功能,因此jvm将自己的内存结构分为了许多块,在面试当中也会常考这一部分的知识,今天我们就着重的对这个知识点进行详细的解析。
jvm虚拟机在拿到自己能支配的内存,就将内存进行了分割,将内存分割成了五部分,分别是Java 虚拟机栈区(存储函数运行过程中的临时变量,存储的是地址),堆区(存储对象),本地方法栈(c++的native方法),程序计数器(指向程序运行位置),方法区(静态方法变量,类加载器等):
本地方法栈:用于管理本地方法的调用,里面并没有我们写的代码逻辑,其由native修饰,由 C 语言实现。
程序计数器:它是一块很小的内存空间,主要用来记录各个线程执行的字节码的地址,例如,分支、循环、线程恢复等都依赖于计数器。
方法区(Java8叫元空间):用于存放已被虚拟机加载的类信息,常量,静态变量等数据,通过运行时常量池来查找数据。
Java 虚拟机栈:用于存储局部变量表、操作数栈、动态链接、方法出口等信息。(栈里面存的是地址,实际指向的是堆里面的对象)
堆:Java 虚拟机中内存最大的一块,是被所有线程共享的,几乎所有的对象实例都在这里分配内存,主要由新生代和老年代组成,GC的实现地址 。
同时本地方法栈,jvm虚拟机栈是线程私有的区域,而堆区和方法区是线程之间共享的
今天的分享就到这里了,希望这篇博客能给你一些帮助,让你对关于jvm的内存结构的问题得到进一步的提升,在面试的时候能从容面对面试官。