引发内存溢出的缘由有很多种,罕见的有以下几种:
内存中加载的数据量过于巨大,如一次从数据库掏出过量数据;
鸠合类中有对对象的援用,运用完后未清空,使得JVM不能接纳;
代码中存在死轮回或轮回发生过量反复的对象实体;
运用的第三方软件中的BUG;
启动参数内存值设定的太小;
内存溢出的解决方案:
第一步,修正JVM启动参数,直接增添内存。(-Xms,-Xmx参数肯定不要遗忘加。)
第二步,搜检毛病日记,检察“OutOfMemory”毛病前是不是有别的非常或毛病。
第三步,对代码进行走查和剖析,找出能够发生内存溢出的位置。
重点排查以下几点:
搜检对数据库查询中,是不是有一次取得悉数数据的查询。一般来说,假如一次取十万条记录到内存,就能够引发内存溢出。这个题目比较隐藏,在上线前,数据库中数据较少,不容易出题目,上线后,数据库中数据多了,一次查询就有能够引发内存溢出。
因而关于数据库查询只管采纳分页的体式格局查询。搜检代码中是不是有死轮回或递归挪用。 搜检是不是有大轮回反复发生新对象实体。
搜检对数据库查询中,是不是有一次取得悉数数据的查询。一般来说,假如一次取十万条记录到内存,就能够引发内存溢出。
这个题目比较隐藏,在上线前,数据库中数据较少,不容易出题目,上线后,数据库中数据多了,一次查询就有能够引发内存溢出。
因而关于数据库查询只管采纳分页的体式格局查询。
搜检List、MAP等鸠合对象是不是有运用完后,未消灭的题目。List、MAP等鸠合对象会一直存有对对象的援用,使得这些对象不能被GC接纳。
第四步,运用内存检察东西动态检察内存运用情况。
以上就是java内存溢出面试题的细致内容,更多请关注ki4网别的相干文章!