当前位置: 首页 > news >正文

广告网站 源码免费微信小程序平台

广告网站 源码,免费微信小程序平台,现在手机网站设计,医疗网站备案要怎么做 需要准备什么材料垃圾回收机制概述 Java语言中一个显著的特点就是引入了垃圾回收机制#xff0c;使c程序员最头疼的内存管理的问题迎刃而解#xff0c;它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制#xff0c;Java中的对象不再有“作用域”的概念#xff0… 垃圾回收机制概述  Java语言中一个显著的特点就是引入了垃圾回收机制使c程序员最头疼的内存管理的问题迎刃而解它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制Java中的对象不再有“作用域”的概念只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露有效的使用空闲的内存。   ps:内存泄露是指该内存空间使用完毕之后未回收在不涉及复杂数据结构的一般情况下Java 的内存泄露表现为一个内存对象的生命周期超出了程序需要它的时间长度我们有时也将其称为“对象游离”。 垃圾回收简要过程   这里必须点出一个很重要的误区不可达的对象并不会马上就会被直接回收而是至少要经过两次标记的过程。          第一次被标记过的对象会检查该对象是否重写了finalize()方法。如果重写了该方法则将其放入一个F-Query队列中否则直接将对象加入“即将回收”集合。在第二次标记之前F-Query队列中的所有对象会逐个执行finalize()方法但是不保证该队列中所有对象的finalize()方法都能被执行这是因为JVM创建一个低优先级的线程去运行此队列中的方法很可能在没有遍历完之前就已经被剥夺了运行的权利。那么运行finalize()方法的意义何在呢这是对象避免自己被清理的最后手段如果在执行finalize()方法的过程中使得此对象重新与GC Roots引用链相连则会在第二次标记过程中将此对象从F-Query队列中清除避免在这次回收中被清除恢复成了一个“正常”的对象。但显然这种好事不能无限的发生对于曾经执行过一次finalize()的对象来说之后如果再被标记则不会再执行finalize()方法只能等待被清除的命运。          之后GC将对F-Queue中的对象进行第二次小规模的标记将队列中重新与GC Roots引用链恢复连接的对象清除出“即将回收”集合。所有此集合中的内容将被回收。 手动GC回收 package com.hongmoshui.sum;public class JVMDemo05 {public static void main(String[] args){JVMDemo05 jvmDemo05 new JVMDemo05();jvmDemo05 null;System.gc();}protected void finalize() throws Throwable{System.out.println(gc在回收对象...);} } finalize作用 Java技术使用finalize()方法在垃圾收集器将对象从内存中清除出去前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。 内存泄露 内存泄漏的定义对象已经没有被应用程序使用但是垃圾回收器没办法移除它们因为还在被引用着。 要想理解这个定义我们需要先了解一下对象在内存中的状态。下面的这张图就解释了什么是无用对象以及什么是未被引用对象。 上面图中可以看出里面有被引用对象和未被引用对象。未被引用对象会被垃圾回收器回收而被引用的对象却不会。未被引用的对象当然是不再被使用的对象因为没有对象再引用它。然而无用对象却不全是未被引用对象。其中还有被引用的。就是这种情况导致了内存泄漏。 如何防止内存泄露 下面是几条容易上手的建议来帮助你防止内存泄漏的发生。 特别注意一些像HashMap、ArrayList的集合对象它们经常会引发内存泄漏。当它们被声明为static时它们的生命周期就会和应用程序一样长。特别注意事件监听和回调函数。当一个监听器在使用的时候被注册但不再使用之后却未被反注册。“如果一个类自己管理内存那开发人员就得小心内存泄漏问题了。” 通常一些成员变量引用其他对象初始化的时候需要置空。垃圾回收机制算法 引用计数法 1.1概述 给对象中添加一个引用计数器每当有一个地方引用它时计数器值就加1当引用失效时计数器值就减1任何时刻计数器都为0的对象就是不再被使用的垃圾收集器将回收该对象使用的内存。 1.2优缺点 优点 引用计数收集器可以很快的执行交织在程序运行中。对程序需要不被长时间打断的实时环境比较有利。 缺点 无法检测出循环引用。如父对象有一个对子对象的引用子对象反过来引用父对象。这样他们的引用计数永远不可能为0.而且每次加减非常浪费内存。 复制算法 S0和s1将可用内存按容量分成大小相等的两块每次只使用其中一块当这块内存使用完了就将还存活的对象复制到另一块内存上去然后把使用过的内存空间一次清理掉。这样使得每次都是对其中一块内存进行回收内存分配时不用考虑内存碎片等复杂情况只需要移动堆顶指针按顺序分配内存即可实现简单运行高效。 复制算法的缺点显而易见可使用的内存降为原来一半。 复制算法用于在新生代垃圾回收   标记清除算法 标记-清除Mark-Sweep算法顾名思义主要就是两个动作一个是标记另一个就是清除。 标记就是根据特定的算法如引用计数算法可达性分析算法等标出内存中哪些对象可以回收哪些对象还要继续用。 标记指示回收那就直接收掉标记指示对象还能用那就原地不动留下。 缺点 1.  标记与清除没有连续性效率低;2.  清除之后内存会产生大量碎片所以碎片这个问题还得处理怎么处理看标记-整理算法。 标记-压缩算法 标记压缩法在标记清除基础之上做了优化把存活的对象压缩到内存一端,而后进行垃圾清理。(java中老年代使用的就是标记压缩法) 分代收集算法 根据内存中对象的存活周期不同将内存划分为几块java的虚拟机中一般把内存划分为新生代和年老代当新创建对象时一般在新生代中分配内存空间当新生代垃圾收集器回收几次之后仍然存活的对象会被移动到年老代内存中当大对象在新生代中无法找到足够的连续内存时也直接在年老代中创建。 对于新生代和老年代来说,新生代回收频率很高,但是每次回收耗时很短,而老年代回收频率较低,但是耗时会相对较长,所以应该尽量减少老年代的GC.   为什么老年代使用标记压缩、新生代使用复制算法。 垃圾回收时的停顿现象   垃圾回收的任务是识别和回收垃圾对象进行内存清理为了让垃圾回收器可以更高效的执行大部分情况下会要求系统进如一个停顿的状态。停顿的目的是为了终止所有的应用线程只有这样的系统才不会有新垃圾的产生。同时停顿保证了系统状态在某一个瞬间的一致性也有利于更好的标记垃圾对象。因此在垃圾回收时都会产生应用程序的停顿。 垃圾收集器 什么是Java垃圾回收器 Java垃圾回收器是Java虚拟机(JVM)的三个重要模块(另外两个是解释器和多线程机制)之一为应用程序提供内存的自动分配(Memory Allocation)、自动回收(Garbage Collect)功能这两个操作都发生在Java堆上(一段内存快)。某一个时点一个对象如果有一个以上的引用(Rreference)指向它那么该对象就为活着的(Live)否则死亡(Dead)视为垃圾可被垃圾回收器回收再利用。垃圾回收操作需要消耗CPU、线程、时间等资源所以容易理解的是垃圾回收操作不是实时的发生(对象死亡马上释放)当内存消耗完或者是达到某一个指标(Threshold,使用内存占总内存的比列比如0.75)时触发垃圾回收操作。有一个对象死亡的例外java.lang.Thread类型的对象即使没有引用只要线程还在运行就不会被回收。 串行回收器(Serial Collector) 单线程执行回收操作回收期间暂停所有应用线程的执行client模式下的默认回收器通过-XX:UseSerialGC命令行可选项强制指定。参数可以设置使用新生代串行和老年代串行回收器 年轻代的回收算法(Minor Collection) 把Eden区的存活对象移到To区To区装不下直接移到年老代把From区的移到To区To区装不下直接移到年老代From区里面年龄很大的升级到年老代。 回收结束之后Eden和From区都为空此时把From和To的功能互换From变ToTo变From每一轮回收之前To都是空的。设计的选型为复制。 年老代的回收算法(Full Collection) 年老代的回收分为三个步骤标记(Mark)、清除(Sweep)、合并(Compact)。标记阶段把所有存活的对象标记出来清除阶段释放所有死亡的对象合并阶段 把所有活着的对象合并到年老代的前部分把空闲的片段都留到后面。设计的选型为合并减少内存的碎片。 并行回收 并行回收器(ParNew回收器) 并行回收器在串行回收器基础上做了改进他可以使用多个线程同时进行垃 圾回收对于计算能力强的计算机而言可以有效的缩短垃圾回收所需的尖 际时间。 ParNew回收器是一个工作在新生代的垃圾收集器他只是简单的将串行回收 器多线程快他的回收策略和算法和串行回收器一样。 使用XX:UseParNewGC 新生代ParNew回收器老年代则使用市行回收器 ParNew回收器工作时的线程数量可以使用XX:ParaleiGCThreads参数指 定一般最好和计算机的CPU相当避免过多的栽程影响性能。 并行回收集器(ParallelGC) 老年代ParallelOldGC回收器也是一种多线程的回收器和新生代的 ParallelGC回收器一样也是一种关往吞吐量的回收器他使用了标记压缩 算法进行实现。 -XX:UseParallelOldGC 进行设置 -XX:ParallelCThread也可以设置垃圾收集时的线程教量。   并CMS(并发GC)收集器 CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。CMS收集器是基于“标记-清除”算法实现的整个收集过程大致分为4个步骤 ①.初始标记(CMS initial mark) ②.并发标记(CMS concurrenr mark) ③.重新标记(CMS remark) ④.并发清除(CMS concurrent sweep)      其中初始标记、重新标记这两个步骤任然需要停顿其他用户线程。初始标记仅仅只是标记出GC ROOTS能直接关联到的对象速度很快并发标记阶段是进行GC ROOTS 根搜索算法阶段会判定对象是否存活。而重新标记阶段则是为了修正并发标记期间因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录这个阶段的停顿时间会被初始标记阶段稍长但比并发标记阶段要短。      由于整个过程中耗时最长的并发标记和并发清除过程中收集器线程都可以与用户线程一起工作所以整体来说CMS收集器的内存回收过程是与用户线程一起并发执行的。 CMS收集器的优点并发收集、低停顿但是CMS还远远达不到完美器主要有三个显著缺点 CMS收集器对CPU资源非常敏感。在并发阶段虽然不会导致用户线程停顿但是会占用CPU资源而导致引用程序变慢总吞吐量下降。CMS默认启动的回收线程数是(CPU数量3) / 4。 CMS收集器无法处理浮动垃圾可能出现“Concurrent Mode Failure“失败后而导致另一次Full  GC的产生。由于CMS并发清理阶段用户线程还在运行伴随程序的运行自热会有新的垃圾不断产生这一部分垃圾出现在标记过程之后CMS无法在本次收集中处理它们只好留待下一次GC时将其清理掉。这一部分垃圾称为“浮动垃圾”。也是由于在垃圾收集阶段用户线程还需要运行 即需要预留足够的内存空间给用户线程使用因此CMS收集器不能像其他收集器那样等到老年代几乎完全被填满了再进行收集需要预留一部分内存空间提供并发收集时的程序运作使用。在默认设置下CMS收集器在老年代使用了68%的空间时就会被激活也可以通过参数-XX:CMSInitiatingOccupancyFraction的值来提供触发百分比以降低内存回收次数提高性能。要是CMS运行期间预留的内存无法满足程序其他线程需要就会出现“Concurrent Mode Failure”失败这时候虚拟机将启动后备预案临时启用Serial Old收集器来重新进行老年代的垃圾收集这样停顿时间就很长了。所以说参数-XX:CMSInitiatingOccupancyFraction设置的过高将会很容易导致“Concurrent Mode Failure”失败性能反而降低。 最后一个缺点CMS是基于“标记-清除”算法实现的收集器使用“标记-清除”算法收集后会产生大量碎片。空间碎片太多时将会给对象分配带来很多麻烦比如说大对象内存空间找不到连续的空间来分配不得不提前触发一次Full  GC。为了解决这个问题CMS收集器提供了一个-XX:UseCMSCompactAtFullCollection开关参数用于在Full  GC之后增加一个碎片整理过程还可通过-XX:CMSFullGCBeforeCompaction参数设置执行多少次不压缩的Full  GC之后跟着来一次碎片整理过程。 G1回收器 G1回收器(Garbage-First)实在]dk1.7中提出的垃圾回收器从长期目标来看是为了取 代CMS回收器G1回收器拥有独特的垃圾回收策略G1属于分代垃圾回收器区分 新生代和老年代依然有eden和from/to区,它并不要求整个eden区或者新生代、老 年代的空间都连续它使用了分区算法。 并行性: G1回收期间可多线程同时工作。 井发性G1拥有与应用程序交替执行能力部分工作可与应用程序同时执行在整个 GC期间不会完全阻塞应用程序。 分代GC:G1依然是一个分代的收集器但是它是非两新生代和老年代一杯政的杂尊。 空间基理G1在国收过程中不会微CMS那样在若千tacAy 要进行碎片整理。 G1 来用了有效复制对象的方式减少空间碎片。 利得程用于分区的原因G可以贝造取都分区城进行回收帽小了国收的格想 提升了性能。 使用.XXX:UseG1GC 应用G1收集器 Mills指定最大停顿时间 使用-XX:MaxGCPausel 设置并行回收的线程数量 使用-XX:ParallelGCThreads Tomcat配置调优测试 Jmeter压力测试工具 JMeter是一款在国外非常流行和受欢迎的开源性能测试工具像LoadRunner 一样它也提供了一个利用本地Proxy Server代理服务器来录制生成测试脚本的功能但是这个功能并不好用。所以在本文中介绍一个更为常用的方法——使用Badboy录制生成 JMeter 脚本。 简单的介绍一下Badboy。Badboy是一款不错的Web自动化测试工具如果你将它用于非商业用途或者用于商业用途但是安装Badboy 的机器数量不超过5台你是不需要为它支付任何费用的。也许是一种推广策略Badboy提供了将Web测试脚本直接导出生成JMeter 脚本的功能并且这个功能非常好用也非常简单。你可以跟着下面的试验步骤来迈出你在开源世界的第一步。 1.      通过Badboy的官方网站下载Badboy的最新版本 2.      安装Badboy。安装过程同一般的Windows 应用程序没有什么区别安装完成后你可以在桌面和Windows开始菜单中看到相应的快捷方式——如果找不到可以找一下Badboy安装目录下的Badboy.exe 文件直接双击启动Badboy 3.      启动Badboy你可以看到下面的界面。 在地址栏图中红色方框标注的部分中输入你需要录制的Web应用的URL——这里我们以http://www.yahoo.com 为例并点击GO 按钮开始录制。如果你用过LoadRunner之类的商业工具对于这个操作一定不会陌生吧 ^_^ 4.      开始录制后你可以直接在Badboy内嵌的浏览器主界面的右侧中对被测应用进行操作所有的操作都会被记录在主界面左侧的编辑窗口中——在这个试验中我们在Yahoo的搜索引擎中输入 JMeter 进行搜索。不过你将看到录制下来的脚本并不是一行行的代码而是一个个Web对象——这就有点像LoadRunner的VuGen中的Tree View视图 5.      录制完成后点击工具栏中的“停止录制”按钮完成脚本的录制 6.      选择“File - Export to JMeter”菜单填写文件名“login_mantis.jmx”将录制好脚本导出为JMeter脚本格式。也可以选择“File - Save”菜单保存为Badboy脚本 7.      启动JMeter并打开刚刚生成的测试脚本。 也许你已经急不可待的准备开始尝试着用JMeter处理你手头的工作了^_^ 在下面的几节我将继续为大家介绍如何在 JMeter 中完成一个测试场景的设置和JMeter测试结果分析入门以及如何参数化JMeter脚本。 当然如果你的动手能力很强几分钟你就可以熟悉这些内容。不过还是请允许我一点点由浅入深的来帮大家完成“JMeter从入门到精通”的过程。我相信在这个过程中你将会了解到更多有关性能测试的知识和经验甚至包括一些LoadRunner等商业测试工具所无法提供给你的经验。 测试串行吞吐量 -XX:PrintGCDetails -Xmx32M -Xms32M -XX:HeapDumpOnOutOfMemoryError -XX:UseSerialGC -XX:PermSize32M //项目启动GC回收6次 吞吐量390 扩大堆的内存 -XX:PrintGCDetails -Xmx512M –Xms32M -XX:HeapDumpOnOutOfMemoryError -XX:UseSerialGC -XX:PermSize32M GC回收6次 445 //结论 最大内存越大吞吐量越高。 调整初始堆 -XX:PrintGCDetails -Xmx512M –Xms512M -XX:HeapDumpOnOutOfMemoryError -XX:UseSerialGC -XX:PermSize32M //GC回收0次 492 并行回收UseParNewGC -XX:PrintGCDetails -Xmx512M –Xms512M -XX:HeapDumpOnOutOfMemoryError -XX:UseParNewGC -XX:PermSize32M //GC回收0次 吞吐量452 并行合并回收UseParallelGC -XX:PrintGCDetails -Xmx512M -Xms256M -XX:HeapDumpOnOutOfMemoryError -XX:UseParallelGC -XX:UseParallelOldGC -XX:ParallelGCThreads8 -XX:PermSize32M //GC回收0次 吞吐量 调优总结 初始堆值和最大堆内存内存越大吞吐量就越高。 最好使用并行收集器,因为并行手机器速度比串行吞吐量高速度快。 设置堆内存新生代的比例和老年代的比例最好为1:2或者1:3。 减少GC对老年代的回收。   转载于:https://www.cnblogs.com/hongmoshui/p/10986443.html
http://www.zqtcl.cn/news/13011/

相关文章:

  • dede大气企业网站模板(一屏展示)文化传媒建设网站
  • 上海网站建设包括哪些微博推广方式
  • 网站开发工程师的证件c 网站开发平台
  • 珠海左右创意园网站开发做自己看视频的网站
  • 怎么在电脑上自己做网站吗响应式设计
  • 中盛腾龙建设工程有限公司网站优化落实防控措施
  • 湛江专业建站联系方式高端商城网站建设
  • C2C电商网站夸克浏览器网页版入口
  • 贵阳专业做网站的公司有哪些网站在百度无法验证码怎么办啊
  • seo站长网怎么下载天津网站建设 易尔通
  • 专业定制网站建设网上做流量对网站有什么影响吗
  • 网站建设门店牌子网址的英文
  • 科学小制作 小发明 简单 手工seo公司被百度稿了能和解吗
  • 山东住房建设厅官网站首页深圳网络推广哪家
  • 两学一做 网站源码移动端网站模板怎么做的
  • wordpress 特色 外链网站建设推广优化招聘模板
  • js打开网站常州城投建设招标网站
  • dede 网站地图 模块网站开发项目方案
  • 如何自己免费制作网站邢台百姓网免费发布信息查询
  • 安徽网站建设开发岳阳网站开发培训
  • 网站怎么做qq授权登录界面郑州网站设计制作哪家好
  • 推荐系统网站开发外发加工网有哪些
  • 用微软雅黑做网站可以吗广州会议室租用
  • 执法网站建设方案网站建设打造营销型网站
  • 国外做珠宝的网站有哪些江苏省城乡建设厅建设网站
  • 在线做交互网站wordpress 文章居中
  • 网站上线倒计时页面wordpress多本小说
  • 电子商务网站建设论文课题淘宝客网站域名
  • 做企业网站 排名织梦如何将wordpress
  • 知乎免费阅读网站怎么设计wordpress首页