美团秋招内推!面试被问到内存管理,赶紧背这几条!

https://www.nowcoder.com/discuss/688725?source_id=profile_create_nctrack&channel=-1
美团到店事业群-平台技术部 校招预备队qq群 821133476
入群第一时间获知校招岗位开放信息,第一时间获知补录岗位开放信息,快人一步!
内推二维码:
https://www.cnblogs.com/CATHY-MU/gallery/image/387231.html
如果后端岗位还没开放,可以先加群 821133476等第一时间通知
咨询请联系这个人   https://www.nowcoder.com/profile/8998235,我不负责咨询哦
其他文章:

面试被问到.class文件结构,赶紧背这几条!
https://www.nowcoder.com/discuss/684230?source_id=profile_create_nctrack&channel=-1
面试被问到jdk监控工具,赶紧背这几条!
https://www.nowcoder.com/discuss/685100?source_id=profile_create_nctrack&channel=-1
面试被问到操作系统,赶紧背这几条!
https://www.nowcoder.com/discuss/686243?source_id=profile_create_nctrack&channel=-1
面试被问到垃圾回收,赶紧背这几条!
面试被问到散列表,赶紧背这几条!


JVM把内存划分成了如下几个区域:

1.方法区(Method Area)
2.堆区(Heap)
3.虚拟机栈(VM Stack)
4.本地方法栈(Native Method Stack)
5.程序计数器(Program Counter Register

方法区

所有线程共享

类加载器加载完类文件就是放在这。
已被虚拟机加载的类信息(构造函数、类中的字段和方法)、
(final定义的)常量、静态变量、
即时编译器编译后的代码

运行时常量池(Runtime Constant Pool)是方法区的一部分,用于存储编译器生成的常量和引用。一般来说,常量的分配在编译时就能确定,但也不全是,比如String类维护了一个常量池,如果调用的字符已经在常量池中,则直接返回常量池中的地址,否则新建一个常量加入池中。(区分:运行时常量池和string常量池是两个)

JDK1.7及之后版本的 JVM 已经将运行时常量池从方法区中移了出来,在 Java 堆(Heap)中开辟了一块区域存放运行时常量池。

方法区超过允许大小时,会抛出OutOfMemory:PermGen Space异常。方法区对应持久带,GC条件苛刻。GC主要针对常量池的回收和已加载类的卸载。

所有线程共享

存储new出来的对象和数组

虚拟机启动时创建

gc的主要区域,分为新生代(eden s1 s2) 老生代 持久代(1.8移除,替换为使用物理内存的元空间,原因:难确定永久代应该制定多大,会增加gc复杂度)

虚拟机栈

位于操作系统内存

线程私有,生命周期和线程一样。随着线程销毁,内存自动释放,不需要GC。
每个方法被执行时产生一个栈帧,方法被调用时,栈帧入栈,方法调用结束时,栈帧出栈。

栈帧用于存储局部变量表、动态链接、操作数和方法出口等信息。
局部变量表中存储基本数据类型及对象的引用地址等,内存空间在编译期间就确定了,运行时不再改变。

如果线程调用的栈深度大于虚拟机允许的最大深度,则抛出StackOverFlowError;不过大多数虚拟机都允许动态扩展虚拟机栈的大小,所以线程可以一直申请栈,直到内存不足时,抛出OutOfMemoryError。

虚拟机栈属于线程私有是为了保证线程中的局部变量不被别的线程访问到。

本地方法栈

位于操作系统内存

线程私有,生命周期和线程一样。随着线程销毁,内存自动释放,不需要GC。线程私有是为了不被别的线程访问到局部变量。

存放内容同虚拟机栈,区别是存储的是虚拟机栈存储Java方法、本地方法栈存储native方法的执行状态。
在很多虚拟机中(如Sun的JDK默认的HotSpot虚拟机),会将虚拟机栈和本地方法栈一起使用。

程序计数器

位于CPU上

线程私有,生命周期和线程一样。随着线程销毁,内存自动释放,不需要GC。

在JVM解释字节码(.class)文件时,存储当前线程执行的字节码行号(字节码地址),只是一种概念模型,各种JVM所采用的方式不一样。
字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。
在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。
如果正在执行的是native方法,程序计数器为空。

唯一不会抛出OutOfMemoryError


#学习路径#
全部评论

相关推荐

01-08 12:01
门头沟学院 Java
冰炸橙汁_不做oj版:不接好运
点赞 评论 收藏
分享
老粉都知道小猪猪我很久没更新了,因为秋招非常非常不顺利,emo了三个月了,接下来说一下我的情况吧本人是双非本 专业是完全不着计算机边的非科班,比较有优势的是有两段大厂实习,美团和字节。秋招面了50+场泡池子泡死的:滴滴 快手 去哪儿 小鹏汽车 不知名的一两个小厂其中字节13场 两次3面挂 两次2面挂 一次一面挂其中有2场面试题没写出来,其他的都是全a,但该挂还是挂,第三次三面才面进去字节,秋招加暑期总共面了22次字节,在字节的面评可以出成书了快手面了8场,2次实习的,通过了但没去,一次2面挂 最后一次到录用评估 至今无消息滴滴三面完 没几天挂了 所有技术面找不出2个问题是我回答不上来的,三面还来说我去过字节,应该不会考虑滴滴吧,直接给我干傻了去哪儿一天速通 至今无消息小鹏汽车hr 至今无消息美团2面挂 然后不捞我了,三个志愿全部结束,估计被卡学历了虾皮二面挂 这个是我菜,面试官太牛逼了拼多多二面挂 3道题也全写了 也没问题是回答不出来的 泡一周后挂腾讯面了5次 一次2面挂 三次一面挂,我宣布腾讯是世界上最难进的互联网公司然后还有一些零零散散的中小厂,但是数量比较少,约面大多数都是大厂。整体的战况非常惨烈,面试机会少,就算面过了也需要和各路神仙横向对比,很多次我都是那个被比下去的人,不过这也正常,毕竟谁会放着一个985的硕士不招,反而去招一个双非读化学的小子感觉现在互联网对学历的要求越来越高了,不仅仅要985还要硕士了,双非几乎没啥生存空间了,我感觉未来几年双非想要进大厂开发的难度应该直线上升了,唯一的打法还是从大二刷实习,然后苟个转正,不然要是去秋招大概率是炮灰。而且就我面字节这么多次,已经开始问很多ai的东西了,你一破本科生要是没实习没科研懂什么ai啊,纯纯白给了
不知名牛友_:爸爸
秋招你被哪家公司挂了?
点赞 评论 收藏
分享
评论
2
15
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务