校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > java语言 > jvm内存结构
题目

你知道java里面的内存管理机制吗,比如创建和回收是怎么管理的?

解答

java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域存储不同类型的数据,这些区域的内存分配和销毁的时间也不同,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范(第2版)》的规定,Java虚拟机管理的内存包括五个运行时数据区域,
1、方法区
方法区(Method Area)是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息(包括类的名称、方法信息、成员变量信息)、常量、静态变量、以及编译器编译后的代码等数据
2、虚拟机栈和本地方法栈
虚拟机栈是线程私有的内存空间,每个线程都有一个线程栈,本地方法栈也是线程私有的内存空间,本地方法栈与Java栈所发挥的作用是非常相似的,它们之间的区别不过是Java栈执行Java方法,本地方法栈执行的是本地方法,有的虚拟机直接把本地方法栈和虚拟机栈合二为一。
3、堆
Java堆是Java虚拟机所管理的内存中最大的一块,在虚拟机启动时创建,此内存区域的目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。从内存分配的角度来看,线程共享的Java堆中可能划分出多个线程私有的分配缓冲区(TLAB)。Java堆可以处于物理上不连续的内存空间,只要逻辑上连续即可,在实现上,既可以实现固定大小的,也可以是扩展的。如果堆中没有足够的内存分配给实例,并且堆也无法再拓展时,将会抛出OutOfMemeryError异常。
Java内存回收:
对于栈空间,当方法调用结束后,基本类型变量,引用类型变量,形参占据的空寂会被自动释放,但引用类型指向的对象在堆中,堆中的无用内存有垃圾回收线程回收,GC线程优先级最低,只有当没有工作线程存在时GC线程才会执行,或者堆空间不足时会自动出发GC线程工作

C 2条回复 评论
银河绘日

楼主的这篇文章写得很精彩,总结的很到位,支持一个

发表于 2023-01-07 21:00:00
0 0
墨色槐

如果能冲大厂还是冲大厂吧,大厂的培养资源非常丰富,我就是211的计算机类研究生,就我个人来说,感觉如果想找工作的话读研对于你的工作技能提升不大,千万不要抱着逃避就业的心态读研

发表于 2021-09-11 16:45:00
0 0