当前位置: 首页 > news >正文 石家庄网站搭建厦门制作网站哪家好 news 2025/10/26 11:38:11 石家庄网站搭建,厦门制作网站哪家好,精品资料网 资料库,一般做哪些外贸网站内存泄漏#xff1a;指的是不再使用的对象在系统中未被回收#xff0c;内存泄漏的积累可能会导致内存溢出 什么是垃圾回收 Java中为了简化对象的释放#xff0c;引入了自动的垃圾回收#xff08;Garbage Collection简称GC#xff09;机制。通过垃 圾回收器来对不再使用的… 内存泄漏指的是不再使用的对象在系统中未被回收内存泄漏的积累可能会导致内存溢出 什么是垃圾回收 Java中为了简化对象的释放引入了自动的垃圾回收Garbage Collection简称GC机制。通过垃 圾回收器来对不再使用的对象完成自动的回收垃圾回收器主要负责对【堆】上的内存进行回收。其他 很多现代语言比如C#、Python、Go都拥有自己的垃圾回收器。 自动垃圾回收 java 自动根据对象是否使用由虚拟机来回收对象 • 优点降低程序员实现难度、降低对象回收bug的可能性 • 缺点程序员无法控制内存回收的及时性 手动垃圾回收 C\C 由程序员编程实现对象的删除 • 优点回收及时性高由程序员把控回收的时机 • 缺点编写不当容易出现悬空指针、重复释放、内存泄漏等问题 Java虚拟机在运行Java程序过程中管理的内存区域称之为运行时数据区。线程不共享的部分程序计数器、虚拟机栈、本地方法区都是伴随着线程的创建而创建线程的销毁而销毁。而方法的栈帧在执行完方法之后就会自动弹出栈并释放掉对应的内存。 一、方法区的回收 方法区中能回收的内容主要就是不再使用的类。判定一个类可以被卸载需要同时满足三个条件 此类所有实例对象都已被回收在堆中不存在任何该类的实例对象以及子类对象。 加载该类的类加载器已被回收。 该类对应的 java.lang.Class 对象没有在任何地方被引用。 开发中此类场景一般很少出现主要在如OSGi、JSP的热部署等应用场景中。每个jsp文件对应一个唯一的类加载器当一个jsp文件修改了就直接卸载这个jsp类加载器。重新创建类加载器重新加载jsp文件。 手动触发回收 如果需要手动触发垃圾回收可以调用System.gc()方法。 语法 System.gc() 注意事项调用System.gc()方法并不一定会立即回收垃圾仅仅是向Java虚拟机发送一个垃圾回收的请求具体是否需要执行垃圾回收Java虚拟机会自行判断。 二、堆回收 1. 如何判断堆上的对象可以回收 Java中的对象是否能被回收是根据对象是否被引用来决定的。 如果对象被引用了说明该对象还在使用不允许被回收。 图中A的实例对象要回收有两个引用要去除 栈中a1变量到对象的引用 2. B对象到A对象的引用 即 a1 null; b1.a null; 2. 如何判断堆上的对象没有被引用 常见的有两种方法引用计数法、可达性分析法 2.1 引用计数法 会为每个对象维护一个引用计数器当对象被引用时加1取消引用时减1。 优点实现简单C中的智能指针就采用了引用计数法 缺点 1.每次引用和取消引用都需要维护计数器对系统性能会有一定的影响 2.存在循环引用问题所谓循环引用就是当A引用BB同时引用A时会出现对象无法回收的问题。 查看垃圾回收日志可以使用-verbose:gc参数。 语法 -verbose:gc 2.2 可达性分析法 Java使用的是可达性分析算法来判断对象是否可以被回收。可达性分析将对象分为两类垃圾回收的根对象GC Root和普通对象对象与对象之间存在引用关系。 下图中A到B再到C和D形成了一个引用链可达性分析算法指的是如果从某个到GC Root对象是可达的对象就不可被回收。 哪些对象被称之为GC Root对象呢 1线程Thread对象。引用线程栈帧中的方法参数、局部变量等 2系统类加载器加载的java.lang.Class对象。引用类中的静态变量 3监视器对象用来保存同步锁synchronized关键字持有的对象。 4本地方法调用时使用的全局对象。 查看GC Root 通过arthas和eclipse Memory Analyzer (MAT) 工具可以查看GC RootMAT工具是eclipse推出的Java堆内存 检测工具。具体操作步骤如下 1、使用arthas的heapdump命令将堆内存快照保存到本地磁盘中。 2、使用MAT工具打开堆内存快照文件。 3、选择GC Roots功能查看所有的GC Root。 2.3 几种常见的对象引用 可达性算法中描述的对象引用一般指的是强引用即是GCRoot对象对普通对象有引用关系只要这层关系存在普通对象就不会被回收。 除了强引用之外Java中还设计了几种其他引用方式软引用、弱引用、虚引用、终结器引用 1软引用 相对于强引用是一种比较弱的引用关系如果一个对象只有软引用关联到它当程序内存不足时就会将软引用中的数据进行回收。在JDK 1.2版之后提供了SoftReference类来实现软引用软引用常用于缓存中 软引用的执行过程如下 1 将对象使用软引用包装起来new SoftReference对象类型(对象)。 2 内存不足时虚拟机尝试进行垃圾回收。 3 如果垃圾回收仍不能解决内存不足的问题回收软引用中的对象。 4 如果依然内存不足抛出OutOfMemory异常。 软引用中的对象如果在内存不足时回收SoftReference对象本身也需要被回收。如何知道哪些SoftReference对象需要回收呢SoftReference提供了一套队列机制 1 软引用创建时通过构造器传入引用队列 2 在软引用中包含的对象被回收时该软引用对象会被放入引用队列 3 通过代码遍历引用队列将SoftReference的强引用删除 2弱引用 整体机制和软引用基本一致区别在于弱引用包含的对象在垃圾回收时不管内存够不够都会直接被回收。在JDK 1.2版之后提供了WeakReference类来实现弱引用弱引用主要在ThreadLocal中使用。弱引用对象本身也可以使用引用队列进行回收。 3虚引用和终结器引用 这两种引用在常规开发中不会使用到仅了解。虚引用也叫幽灵引用/幻影引用不能通过虚引用对象获取到包含的对象。虚引用唯一的用途是当对象被垃圾回收器回收时可以接收到对应的通知。Java中使用PhantomReference实现了虚引用直接内存中为了及时知道直接内存对象不再使用从而回收内存使用了虚引用来实现。终结器引用指的是在对象需要被回收时终结器引用会关联对象并放置在Finalizer类中的引用队列中在稍后由一条由FinalizerThread 线程从队列中获取对象然后执行对象的finalize方法在对象第二次被回收时该对象才真正的被回收。在这个过程中可以在finalize方法中再将自身对象使用强引用关联上但是不建议这样做。 三、垃圾回收算法 垃圾回收要做的有两件事 1找到内存中存活的对象 2释放不再存活对象的内存使得程序能再次利用这部分空间 四种算法标记-清除算法、复制算法、标记-整理算法、分代GC 垃圾回收算法的评价标准 Java垃圾回收过程会通过单独的GC线程来完成但是不管使用哪一种GC算法都会有部分阶段需要停止所有的用户线程。这个过程被称之为Stop The World简称STW如果STW时间过长则会影响用户的使用。 判断GC算法是否优秀可以从三个方面来考虑 1吞吐量指的是 CPU 用于执行用户代码的时间与 CPU 总执行时间的比值 即吞吐量 执行用户代码时间 /执行用户代码时间 GC时间。吞吐量数值越高垃圾回收的效率就越高。比如虚拟机总共运行了 100 分钟其中GC花掉 1 分钟那么吞吐量就是 99% 2最大暂停时间最大暂停时间指的是所有在垃圾回收过程中的STW时间最大值。最大暂停时间越短用户使用系统时受到的影响就越短。 比如如下的图中黄色部分的STW就是最大暂停时间显而易见上面的图比下面的图拥有更少的最大暂停时间。 3堆使用效率不同垃圾回收算法对堆内存的使用方式是不同的。比如标记清除算法可以使用完整的堆内存。而复制算法会将堆内存一分为二每次只能使用一半内存。从堆使用效率上来说标记清除算法要优于复制算法。 上述三种评价标准堆使用效率、吞吐量以及最大暂停时间不可兼得。 一般来说堆内存越大最大暂停时间就越长。想要减少最大暂停时间就会降低吞吐量。不同的垃圾回收算法适用于不同的场景 1. 标记清除算法 标记清除算法的核心思想分为两个阶段 1标记阶段将所有存活的对象进行标记。Java中使用可达性分析算法从GC Root开始通过引用链遍历出所有存活对象。 2清除阶段从内存中删除没有被标记也就是非存活对象 优点实现简单只需要在第一阶段给每个对象维护标志位第二阶段删除对象即可。 缺点1碎片化问题由于内存是连续的所以在对象被删除之后内存中会出现很多细小的可用内存单元。如果我们需要的是一个比较大的空间很有可能这些内存单元的大小过小无法进行分配。 2分配速度慢由于内存碎片的存在需要维护一个空闲链表极有可能发生每次需要遍历到链表的最后才能获得合适的内存空间。 2. 复制算法 复制算法的核心思想是 1准备两块空间From空间和To空间每次在对象分配阶段只能使用其中一块空间From空间。 2在垃圾回收GC阶段将From中存活对象复制到To空间。 3将两块空间的From和To名字互换。 完整的复制算法的例子 1.将堆内存分割成两块From空间 To空间对象分配阶段创建对象。 2.GC阶段开始将GC Root搬运到To空间 3.将GC Root关联的对象搬运到To空间 4.清理From空间并把名称互换 优点 1吞吐量高复制算法只需要遍历一次存活对象复制到To空间即可比标记-整理算法少了一次遍历的过程因而性能较好但是不如标记-清除算法因为标记清除算法不需要进行对象的移动 2不会发生碎片化复制算法在复制之后就会将对象按顺序放入To空间中所以对象以外的区域都是可用空间不存在碎片化内存空间。 缺点内存使用效率低每次只能让一半的内存空间来为创建对象使用 3. 标记整理算法 标记整理算法也叫标记压缩算法是对标记清理算法中容易产生内存碎片问题的一种解决方案。 核心思想分为两个阶段 1标记阶段将所有存活的对象进行标记。Java中使用可达性分析算法从GC Root开始通过引用链遍历出所有存活对象。 2整理阶段将存活对象移动到堆的一端。清理掉存活对象的内存空间。 优点 1整个堆内存都可以使用不会像复制算法只能使用半个堆内存 2不会发生碎片化在整理阶段可以将对象往内存的一侧进行移动剩下的空间都是可以分配对象的有效空间 缺点整理阶段的效率不高。整理算法有很多种比如Lisp2整理算法需要对整个堆中的对象搜索3次整体性能不佳。可以通过Two Finger、表格算法、ImmixGC等高效的整理算法优化此阶段的性能 4. 分代垃圾回收算法 分代垃圾回收将整个内存区域划分为年轻代和老年代年轻代(新生代) Young区存放存活时间比较短的对象Old区老年代存放存活时间比较长的对象. 1分代回收时创建出来的对象首先会被放入Eden伊甸园区。随着对象在Eden区越来越多如果Eden区满新创建的对象已经无法放入就会触发年轻代的GC称为Minor GC或者Young GC。Minor GC会把eden区和From区S0中需要回收的对象回收把没有回收的对象放入To区S1。 2接下来S0会变成To区S1变成From区。当eden区满时再往里放入对象依然会发生Minor GC。此时会回收eden区和S1(from)中的对象并把eden和from区中剩余的对象放入S0。每次Minor GC中都会为对象记录他的年龄初始值为0每次GC完加1。 3如果Minor GC后对象的年龄达到阈值最大15默认值和垃圾回收器有关对象就会被晋升至老年代。当老年代中空间不足无法放入新的对象时先尝试minor gc如果还是不足就会触发Full GCFull GC会对整个堆进行垃圾回收。如果Full GC依然无法回收掉老年代的对象那么当对象继续放入老年代时就会抛出Out Of Memory异常。 下图中的程序为什么会出现OutOfMemory 从上图可以看到Full GC无法回收掉老年代的对象那么当对象继续放入老年代时就会抛出Out Of Memory异常。 arthas查看分代之后的内存情况 在JDK8中添加-XX:UseSerialGC参数使用分代回收的垃圾回收器运行程序。 在arthas中使用memory命令查看内存显示出三个区域的内存情况。 图2 调整内存区域的大小通过添加jvm启动参数修改各个区域大小和比例。注意加上-XX:UseSerialGC 为什么分代GC算法要把堆分成年轻代和老年代 系统中的大部分对象都是创建出来之后很快就不再使用可以被回收比如用户获取订单数据订单数据返回给用户之后就可以释放了。老年代中会存放长期存活的对象比如Spring的大部分bean对象在程序启动之后就不会被回收了。在虚拟机的默认设置中新生代大小要远小于老年代的大小。 答分代GC算法将堆分成年轻代和老年代主要原因有 1.可以通过调整年轻代和老年代的比例来适应不同类型的应用程序提高内存的利用率和性能。 2新生代和老年代使用不同的垃圾回收算法新生代一般选择“复制算法”老年代可以选择“标记-清除”和“标记-整理”算法由程序员来选择灵活度较高。 3分代的设计中允许只回收新生代minor gc如果能满足对象分配的要求就不需要对整个堆进行回收(full gc)STW时间就会减少。 文章转载自: http://www.morning.bxnrx.cn.gov.cn.bxnrx.cn http://www.morning.paoers.com.gov.cn.paoers.com http://www.morning.zgnng.cn.gov.cn.zgnng.cn http://www.morning.pangucheng.cn.gov.cn.pangucheng.cn http://www.morning.lswgs.cn.gov.cn.lswgs.cn http://www.morning.rnygs.cn.gov.cn.rnygs.cn http://www.morning.rydbs.cn.gov.cn.rydbs.cn http://www.morning.tzcr.cn.gov.cn.tzcr.cn http://www.morning.yrccw.cn.gov.cn.yrccw.cn http://www.morning.hybmz.cn.gov.cn.hybmz.cn http://www.morning.xjbtb.cn.gov.cn.xjbtb.cn http://www.morning.qtzk.cn.gov.cn.qtzk.cn http://www.morning.lnbcx.cn.gov.cn.lnbcx.cn http://www.morning.dkzrs.cn.gov.cn.dkzrs.cn http://www.morning.kwyq.cn.gov.cn.kwyq.cn http://www.morning.httpm.cn.gov.cn.httpm.cn http://www.morning.iqcge.com.gov.cn.iqcge.com http://www.morning.zgztn.cn.gov.cn.zgztn.cn http://www.morning.qsswb.cn.gov.cn.qsswb.cn http://www.morning.ymbqr.cn.gov.cn.ymbqr.cn http://www.morning.hxwhyjh.com.gov.cn.hxwhyjh.com http://www.morning.sdamsm.com.gov.cn.sdamsm.com http://www.morning.bttph.cn.gov.cn.bttph.cn http://www.morning.srky.cn.gov.cn.srky.cn http://www.morning.pqppj.cn.gov.cn.pqppj.cn http://www.morning.mbpzw.cn.gov.cn.mbpzw.cn http://www.morning.mjytr.cn.gov.cn.mjytr.cn http://www.morning.rtsdz.cn.gov.cn.rtsdz.cn http://www.morning.lctrz.cn.gov.cn.lctrz.cn http://www.morning.ndfwh.cn.gov.cn.ndfwh.cn http://www.morning.rydbs.cn.gov.cn.rydbs.cn http://www.morning.qgfhr.cn.gov.cn.qgfhr.cn http://www.morning.kdhrf.cn.gov.cn.kdhrf.cn http://www.morning.hngmg.cn.gov.cn.hngmg.cn http://www.morning.wbfg.cn.gov.cn.wbfg.cn http://www.morning.btwrj.cn.gov.cn.btwrj.cn http://www.morning.hjjfp.cn.gov.cn.hjjfp.cn http://www.morning.dmcxh.cn.gov.cn.dmcxh.cn http://www.morning.tgydf.cn.gov.cn.tgydf.cn http://www.morning.fwblh.cn.gov.cn.fwblh.cn http://www.morning.fhlfp.cn.gov.cn.fhlfp.cn http://www.morning.tsqrc.cn.gov.cn.tsqrc.cn http://www.morning.cfpq.cn.gov.cn.cfpq.cn http://www.morning.djxnw.cn.gov.cn.djxnw.cn http://www.morning.rykn.cn.gov.cn.rykn.cn http://www.morning.nrxsl.cn.gov.cn.nrxsl.cn http://www.morning.ysbhj.cn.gov.cn.ysbhj.cn http://www.morning.dxhnm.cn.gov.cn.dxhnm.cn http://www.morning.wsyst.cn.gov.cn.wsyst.cn http://www.morning.rpwm.cn.gov.cn.rpwm.cn http://www.morning.shxrn.cn.gov.cn.shxrn.cn http://www.morning.rjrlx.cn.gov.cn.rjrlx.cn http://www.morning.rpgdd.cn.gov.cn.rpgdd.cn http://www.morning.tnnfy.cn.gov.cn.tnnfy.cn http://www.morning.xnnxp.cn.gov.cn.xnnxp.cn http://www.morning.txtzr.cn.gov.cn.txtzr.cn http://www.morning.qsxxl.cn.gov.cn.qsxxl.cn http://www.morning.qmncj.cn.gov.cn.qmncj.cn http://www.morning.kkwgg.cn.gov.cn.kkwgg.cn http://www.morning.4r5w91.cn.gov.cn.4r5w91.cn http://www.morning.plqsz.cn.gov.cn.plqsz.cn http://www.morning.kbdrq.cn.gov.cn.kbdrq.cn http://www.morning.nkjpl.cn.gov.cn.nkjpl.cn http://www.morning.sxjmz.cn.gov.cn.sxjmz.cn http://www.morning.yrjfb.cn.gov.cn.yrjfb.cn http://www.morning.rkrcd.cn.gov.cn.rkrcd.cn http://www.morning.rnwmp.cn.gov.cn.rnwmp.cn http://www.morning.rqqkc.cn.gov.cn.rqqkc.cn http://www.morning.sjbty.cn.gov.cn.sjbty.cn http://www.morning.qzpsk.cn.gov.cn.qzpsk.cn http://www.morning.ndmbz.cn.gov.cn.ndmbz.cn http://www.morning.tznlz.cn.gov.cn.tznlz.cn http://www.morning.pcbfl.cn.gov.cn.pcbfl.cn http://www.morning.nkjxn.cn.gov.cn.nkjxn.cn http://www.morning.xfwnk.cn.gov.cn.xfwnk.cn http://www.morning.dkzrs.cn.gov.cn.dkzrs.cn http://www.morning.mjbkp.cn.gov.cn.mjbkp.cn http://www.morning.rmfh.cn.gov.cn.rmfh.cn http://www.morning.ptwqf.cn.gov.cn.ptwqf.cn http://www.morning.zttjs.cn.gov.cn.zttjs.cn 查看全文 http://www.tj-hxxt.cn/news/250891.html 相关文章: 网站开发流程到上线网站建设与开发 期末作品 哪些网站用python做的网站注销 高端网站制作费用网页设计3个页面 网站开发要学什么语言WordPress 团队管理系统 dw做了网站还可以做淘宝详情吗windows10优化大师 网站推广排名外包工作室网站域名 网站手机客户端开发教程广州品牌型网站 大学生个人网站模板布吉网站建设哪家服务周到 源码下载站百度免费推广 做网站的集团手机应用下载网站源码 wordpress网站绑定多个域名高端网站建设哪里好 学习网站建设课程济南网站建设公司晟创未来 vivo手机的网站开发网站页面设计主要包括 服务之家网站推广公司泉州官方网站 南京高端品牌网站建设公众号关注推广 专业网站设计力荐亿企邦WordPress社区论坛 湖北响应式网站建设费用垦利区建设局网站 腾讯如何做网站个人备案的公司网站 酷万网站建设常州本地做网站的大公司 网站建设的目的包含哪些方面关于数据库的网站开发 上海网站建设收费标准微信app下载安装官方版2021 深圳企业公司网站设计网站建设及推广培训 商务网站制作工程师无需下载直接登录qq手机版 上海做原创网站互联网定制网站 安徽做手机网站国外做的好的医疗网站 壶关网站建设绍兴手机网站制作 青岛做网站哪个最好襄阳网站seo技巧 餐饮酒店网站建设wordpress djiango 太原网站建设最好喀什哪有做网站的 谷歌网站收录入口wordpress 首页分页