扫码关注公众号

JVM虚拟机之JVM内存结构
01-22
254观看
01

如果任务很多,线程池的阻塞队列会撑爆内存(JVM)的哪个区域()

正确答案是C这道题需要知道线程池是用阻塞队列BlockingQueue来保存等待线程的,而容器对象数据是存放在堆里的所以答案选CJava中数据的存储位置分为以下5种:寄存器:最快的存储区,位于处理器内部,但是数量极其有限。所以寄存器根据需求进行自动分配,无法直接人为控制。栈内存:位于RAM当中,通过堆栈指针可以从处理器获得直接支持。堆栈指针向下移动,则分配新的内存;向上移动,则释放那些内存。这种存储方式速度仅次于寄存器。常用于存放对象引用和基本数据类型,而不用于存储对象)堆内存:堆相对于栈的好处来说:编译器不需要知道存储的数据在堆里存活多长。当需要一个对象时,使用new写一行代码,当执行这行代码时,会自动在堆里进行存储分配。同时,因为以上原因,用堆进行数据的存储分配和清理,需要花费更多的时间。常量池:常量(字符串常量和基本类型常量)通常直接存储在程序代码内部(常量池)。这样做是安全的,因为它们的值在初始化时就已经被确定,并不会被改变。常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如Strings="java"这种申明方式非RAM存储区:如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。其中两个基本的例子是:流对象和持久化对象。

来自:jvm虚拟机相关-jvm内存结构
02

关于JVM的内存结构描述不正确的是?

正确答案是CC由于程序计数器(PC寄存器)中存储的数据所占空间不会随着程序执行而发生改变。因此,程序计数器(PC寄存器)是不会发生内存溢出现象

来自:jvm虚拟机相关-jvm内存结构
03

说一下 jvm 的主要组成部分?及其作用?

JVM包括类加载子系统、堆、方法区、栈、本地方法栈、程序计数器、直接内存、垃圾回收器、执行引擎。1、类加载子系统类加载子系统负责加载class信息,加载的类信息存放于方法区中。2、直接内存直接内存是在Java堆外的、直接向系统申请的内存空间。访问直接内存的速度会由于Java堆。出于性能的考虑,读写频繁的场合可能会考虑使用直接内存。3、垃圾回收器垃圾回收器可以对堆、方法区、直接内存进行回收。4、执行引擎执行引擎负责执行虚拟机的字节码,虚拟机会使用即时编译技术将方法编译成机器码后再执行。

来自:jvm虚拟机相关-jvm内存结构
04

请问jvm垃圾回收是否涉及栈内存?

不需要。因为虚拟机栈中是由一个个栈帧组成的,在方法执行完毕后,对应的栈帧就会被弹出栈。所以无需通过垃圾回收机制去回收内存。

来自:jvm虚拟机相关-jvm内存结构
课程
专栏
java语言-jvm虚拟机相关-jvm内存结构
3专栏
1课程
4 试题