内存溢出问题
|
中存在死循环或循环产生过多重复的对象实体; 4、使用的第三方软件中的BUG; 5、启动参数内存值设定的过小; 当然实际情况中内存溢出的原因就太多了。下面我们就对这些原因分类一下: 以上的图是基于java7来叙述的,从上面这张图我们能够得到如下信息:java虚拟机把内存分为5个模块。 (1)程序计数器:程序计数器是线程私有的,主要的作用是通过改变这个计数器的值来选取下一条需要执行的字节码指令。既然每个线程都有一个,那么这些线程的计数器是互不影响的。也不会抛出任何异常。 (2)虚拟机栈和本地方法栈:虚拟机栈描述的是java方法执行的内存模型,每个方法在执行的时候都会创建一个栈帧用于存储局部变量表、操作数栈、动态连接、方法出口等信息。本地方法栈与虚拟机栈的区别是,虚拟机栈为虚拟机执行java方法服务,而本地方法栈则为虚拟机提供native方法服务。 在单线程的操作中,无论是由于栈帧太大,还是虚拟机栈空间太小,当栈空间无法分配时,虚拟机抛出的都是StackOverflowError异常,而不会得到OutOfMemoryError异常。而在多线程环境下,则会抛出OutOfMemoryError异常。 (3)java堆和方法区:java堆区主要存放对象实例和数组等,方法区保存类信息、常量、静态变量等等。运行时常量池也是方法区的一部分。这两块区域是线程共享的区域,只会抛出OutOfMemoryError。
不知道各位在B站看见过那个面试经典场景没,在回答java的内存运行数据区结构时,以上的功能作用是一方面,如果回答时把内存溢出问题添加上是一个极大的加分项 (编辑:张家口站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


