java内存区域

1.说说java运行时数据区域?

JVM在执行Java程序的时候,会将管理的内存区域划分成若干个数据区域,这些数据区域各自有各自的用途,也有自己的创建和销毁时间。有的跟着JVM的启动而创建,有的区域则依赖用户线程的创建和销毁。

其中包括,方法区、堆、程序计数器、方法区、虚拟机栈、本地方法栈。

2.说说关于程序计数器?

程序计数器是java管理的内存区域其中很小的一部分,它可以看做是当前线程执行字节码文件的行号指示器。

在虚拟机的概念内存模型里,字节码解释器的工作是,根据当前记录的数值,来选取下一次需要执行的字节码指令。循环,跳转,分支,异常处理,线程恢复,等基础功能都需要这个计数器来完成。

此外,程序计数器无,OuOfMemoryError

2.1 为什么程序计数器是线程隔离的?

​ Java虚拟机的多线程是通过线程切换,分配处理器执行时间,来实现的。一个处理器(单核)只会执行其中一个线程中的指令。因此为了需要线程切换后可以恢复到原来的状态,每一个线程都需要一个独立的程序计数器,相互独立,互不干扰,把这块内存区域称为线程私有。

2.2程序计数器中记录的是什么?

​ 如果线程执行的是java方法,那么程序计数器中记录的就是正在执的虚拟机字节码文件指令的地址。

​ 如果线程执行的是native方法,那么程序计数器中记录的是空值。

3.说说关于java虚拟机栈?

​ Java虚拟机栈也是线程私有的,生命周期也同线程一样。

​ java虚拟机栈的本质,描述的是java方法执行的内存模型。

​ 每当执行一个方法的时候,会创建响应的一个栈帧,这个栈帧用于存储局部变量表,操作数栈,动态链接,方法接口等等。一个方法,从调用到完成,对应的就是,一个栈帧,从入栈到出栈。

3.1 说说关于局部变量表?

​ 局部变量表存放了在编译期间就可知的基本数据类型,对象引用,和returnAddress类型。

​ 其中对象应用包括

​ a.对象地址的引用指针

​ b.一个代表的对象的句柄

​ c.其他能表示对象的位置

3.2 说说关于java虚拟机栈的两种异常?

​ 在Java虚拟机规范中,对这个区域规定了两种异常。

​ 1.StackOverFlowError异常

​ 当线程请求的栈的深度大于虚拟机栈允许的深度,就会报此异常

​ 2.OutOfMemoryError异常

​ 大部分的虚拟机都可以动态扩展,如果扩展的时候申请不到足够的内存,就会报此异常。

4.说说关于本地方法栈?

本地方法栈与虚拟机栈类似,也有StackOverFlowError异常和OutOfMemoryError异常。

虚拟机栈是 为虚拟机执行java方法服务。

本地方法栈 为虚拟机执行native方法服务。

有的虚拟机会将虚拟机栈和本地方法栈合二为一。

5.说说java堆?

​ java堆,是Java内存管理最大的一块区域,它是被所有的线程的共享的。在虚拟机启动的时候创建,唯一的目的就是存放对象实例,基本上所有的对象实例都在这里存放。

​ 是垃圾收集器管理的主要区域,所以也被称为GC堆,garbage collected heap。

​ 可以细分为,老年代,新生代。

​ 也可以分为,Eden空间,from survior 空间,to survior 空间。

​ 无论怎么样划分,目的是为了提高效率,更快的回收内存,更快的分配内存。

​ 堆无法扩展时,会抛出OutOfMemory异常。

6.说说方法区?

​ 方法区同java堆一样,是各个线程的共享区域。

​ 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器后编译的代码。

​ java虚拟机规范把它描述成堆的一个逻辑部分,但是有一个别名叫做non-heap,非堆,目的应该是把java堆区分开来。

6.1说说运行时常量池?

​ 运行时常量池是方法区的一部分。

​ class文件,不仅包含,版本、字段、方法、接口等信息,还包括了,常量池。

​ 常量池存放,在编译期间产生的一些,字面量和符号引用。这部分内容在类加载后进入方法区的运行时常量池存放。

​ 运行时常量池对于Class文件常量池的另外一个重要特征是动态性,在运行期间也可以将新的常量放入常量池,比如string类的intern方法。

​ 当常量池无法再申请到内存时,会调用OutOfMemoryError异常。

7.什么是jvm虚拟机?

​ java virtual machine ,一个虚拟计算机。作用是加载java程序,把字节码翻译成机器码交给cpu来执行。

8.JVM主要组成部分有哪些?

​ a.类加载器

​ b.运行时数据区

​ c.执行引擎

​ d.本地接口库

Last modification:November 5th, 2019 at 06:29 pm
如果觉得我的文章对你有用,请随意赞赏