首页 > 其他 > 详细

面试整理问答题

时间:2020-12-24 17:22:27      阅读:41      评论:0      收藏:0      [点我收藏+]

一、垃圾回收

一:垃圾回收机制的意义
    垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存;
    内存泄漏:是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。
    内存溢出:指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出。 
    内存泄露量大到一定程度会导致内存溢出。但是内存溢出不一定是内存泄露引起的。
    内存溢出原因: 
           1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据; 
           2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收; 
           3.代码中存在死循环或循环产生过多重复的对象实体; 
           4.使用的第三方软件中的BUG; 
           5.启动参数内存值设定的过小
    内存溢出的解决方案:
           第一步,修改JVM启动参数,直接增加内存。(-Xms,-Xmx参数 
 一定不要忘记加。)
           第二步,检查错误日志,查看“OutOfMemory”错误前是否有其 它异常或错误。
           第三步,对代码进行走查和分析,找出可能发生内存溢出的位置。

二:垃圾回收机制的工作原理

      创建的对象存储在堆里面,把堆比喻为院子中的土地,把对象比喻为土地的管理者,院子比喻为java虚拟机,当创建一个对象时,java虚拟机将给对象分配土地,当对象不再使用时,JVM进行释放。

引用计数:每个对象都包含一个计数器,当对象被引用时,计数器技术+1,当不被引用时-1,即为null;垃圾回收机制对其循环,当对象为null时,进行回收释放内存,虽然开销不是很大,但是在对象的整个生命周期垃圾回收机制进行循环工作,发现为null进行收回,但是有个缺陷,当对象出现循环引用时,本该回收的对象而计数器不显示0,所以垃圾回收机制也不回进行回收。

自适应技术:

停止—复制:暂停程序的运行,循环所有的对象找到“存活的”对象,将其复制到另一个堆里面,再将没有复制的进行回收,为了不占用存,引入在同一个堆里面,将没有占用的内存堆用来存放复制的“存活对象”,重新进行整理分配空间。为了防止出现没被引用的对象少,而花费开销复制了很多“存活对象”引入标记清扫,对对象进行循环标记引用的对象,复制到另一片堆里面,而不被引用的进行释放空间。最后JVM提供了自动检测监视,如果对象都很稳定,垃圾回收器效率低则使用“标记—清扫”,否则使用“停止—复制”,进行回收。

二、java堆和栈的区别

技术分享图片

技术分享图片

技术分享图片

 

面试整理问答题

原文:https://www.cnblogs.com/chenghening/p/14183401.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!