栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > Java面试题

JVM内存管理面试题及深度解析

Java面试题 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

题目:给出一段虚拟机栈和本地方法栈溢出的代码:分StackOverflowError和OutOfMemoryError给出程序

JVM内存概要:




答案解析:

堆溢出:堆里放的是new出来的对象,所以这部分很简单不断的new对象就可以了,但是为了防止对象new出来之后被GC,所以把对象new出来的对象放到一个List中去即可。为了有更好的效果,可以在运行前,调整堆的参数。

针对HotSpot虚拟机中的栈溢出,如果请求的栈深度大于虚拟机所允许的最大深度,抛出StackOverflowError,如果虚拟机在扩展时无法申请到足够空间则抛出OutOfMemoryError的异常。容易想到在单线程的堆中我们不断的让一个成员变量自增,容纳这个变量的单元无法承受这个变量了,就抛出StackOverflowError了。这就是一个  请求的栈深度大于虚拟机所允许的最大深度。还有种情况,可以开尽量多的线程,并在每个线程里调用native的方法,就自然会抛出  OutOfMemoryError了。

运行时常量池溢出:运行时常量池是在方法区中的一部分,主要保存Class文件中描述的符号引用。可采用String类的intern方法。

方法区存放类的信息、常量、静态变量。这部分的溢出可采用增强Class加载的方式。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/264014.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号