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

宁波医院通网站建设广州品牌策划公司排行

宁波医院通网站建设,广州品牌策划公司排行,乔括云智能建站,怎样注册公司流程1.如何判断对象可以回收 1.1 引用计数法 什么是引用计数器法 在对象中添加一个引用计数器#xff0c;每当有一个地方引用它时#xff0c;计数器值就加一#xff1b;当引用失效时#xff0c;计数器值就减一#xff1b;任何时刻计数器为零的对象就是不可能再被使用的。 …1.如何判断对象可以回收 1.1 引用计数法 什么是引用计数器法 在对象中添加一个引用计数器每当有一个地方引用它时计数器值就加一当引用失效时计数器值就减一任何时刻计数器为零的对象就是不可能再被使用的。 缺点无法解决对象之间循环引用的问题。例如当二个对象相互引用时并且这二个对象也不可能再被访问那么这二个对象将永远存在于内存当中不会被回收。 引用计数器算法有一些比较著名的应用案例但是Java虚拟机并没有采用这种算法。 1.2 可达性分析算法 1.什么是可达性分析算法 可达性分析算法是通过一系列称为GC Roots的根对象作为起始节点集从这些节点开始根据引用关系向下搜索搜索过程所走过的路径称为引用链如果某个对象到GC Roots间没有任何引用链相连则证明此对象是不可能被使用的。 2.可以作为 GC Roots 的对象 在虚拟机栈栈帧中的本地变量表中引用的对象。例如当前正在运行的方法所用到的参数、局部变量、临时变量等。在方法区中类静态属性引用的对象例如Java类的引用类型静态变量在方法区中常量引用的对象例如字符串常量池里的引用在本地方法栈中JNI即通常所说的Native方法引用的对象Java虚拟机内部的引用如基本数据类型对应的Class对象、一些常驻的异常对象比如NullPointException、OutOfMemoryError等、系统类加载器等所有被同步锁synchronized关键字持有的对象反映Java虚拟机内部情况的JMXBean、JVMTI中注册的回调、本地代码缓存等。 除了上述这些固定的GC Roots集合以外根据用户所选用的垃圾收集器以及当前回收的内存区域不同还可以有其它对象临时性的加入共同构成完整的GC Roots集合。例如后面会提到的分代收集和局部回收如果只针对Java堆中某一块区域发起垃圾收集例如只针对新生代的垃圾收集而这个区域的对象完全有可能被位于堆中其他区域的对象所引用这时候就需要将这些关联区域的对象一并加入GC Roots集合中。 3.四种引用 强引用 强引用是程序代码中普遍存在的引用赋值即类似Object obj new Object()这种引用关系。无论任何情况下只要GC Roots与对象之间存在强引用关系那么垃圾回收器就永远不会回收这个对象。 软引用 软引用是用来描述一些还有用但非必须的对象。只被软引用关联着的对象在系统将要发出内存溢出异常前会把这个对象列进回收范围之中进行第二次回收如果第二次回收之后还没有足够的内存才会抛出内存溢出异常。JDK提供了SoftReference类来实现软引用。可以配合引用队列来释放软引用自身 弱引用 仅有弱引用引用该对象时在垃圾回收时无论内存是否充足都会回收弱引用对象。JDK提供了WeakReference类来实现弱引用。可以配合引用队列来释放弱引用自身 虚引用 虚引用是最弱的一种引用关系。一个对象是否有虚引用的存在完全不会对其生存时间造成影响也无法通过虚引用来获取一个对象实例为一个对象设置虚引用的唯一目的只是为了能在这个对象被垃圾收集器回收时收到一个系统通知。JDK提供了PhantomReference类来实现虚引用。必须配合引用队列使用主要配合 ByteBuffer 使用被引用对象回收时会将虚引用入队 由 Reference Handler 线程调用虚引用相关方法释放直接内存 注意 1.上述前四种引用的引用强度从上到下依次减弱 2.除上述四种引用外还有一种无须手动编码的引用称为终结器引用 终结器引用无需手动编码但其内部配合引用队列使用在垃圾回收时终结器引用入队被引用对象暂时没有被回收再由 Finalizer 线程通过终结器引用找到被引用对象并调用它的 finalize 方法第二次 GC 时才能回收被引用对象 2.垃圾回收算法 2.1 分代收集 1.分代收集理论 当前商业虚拟机的垃圾收集器大多数都遵循了分代收集的理论进行设计分代收集名为理论实质上是一套符合大多数程序运行实际情况的经验法则它建立在二个分代假说之上 弱分代假说绝大多数对象是朝生夕灭的 强分代假说熬过越多次垃圾收集过程的对象就越难以消亡 这二个分代假说奠定了多款常用的垃圾收集器的一致的设计原则收集器应该将Java堆划分出不同的区域然后将回收对象依据其年龄年龄即对象熬过垃圾收集过程的次数分配到不同的区域之中存储。显而易见如果一个区域中大多数对象都是朝生夕灭难以熬过垃圾收集过程的话那么把它们集中放在一起每次回收时只关注如何保留少量存活而不是去标记那些大量将要被回收的对象就能以较低代价回收到大量的空间如果剩下的都是难以消亡的对象那把它们集中放在一块虚拟机便可以使用较低的频率来回收这个区域。 把分代收集理论放到现在的商用Java虚拟机里设计者一般至少会把Java堆划分为新生代和老年代二个区域。顾名思义新生代中每次垃圾回收都有大批对象死去而每次回收后存活的少量对象将会逐步晋升到老年代中存放。针对新生代或老年代或整个堆的收集则有如下不同的名词 部分收集 新生代收集Minor GC/Young GC指目标只是新生代的垃圾收集老年代收集Major GC/Old GC指目标只是老年代的收集。目前只有CMS收集器会有单独收集老年代的行为。混合收集指目标是收集整个新生代以及部分老年代的垃圾收集。目前只有G1收集器会有这种行为。 整堆收集Full GC收集整个Java堆和方法区的垃圾收集 注意 1.但是对象之间很可能是存在跨代引用的。例如新生代中的对象有可能被老年代中的对象所引用具体解决方法见深入理解Java虚拟机 2.在HotSpot中新生代内存不足会触发Minor GC使用新生代垃圾回收器完成垃圾回收老年代内存不足会触发Full GC使用新生代垃圾回收器完成新生代的垃圾回收使用老年代垃圾回收器完成老年代的垃圾回收 2.HotSpot的分代垃圾回收 对象首先分配在伊甸园区域 新生代空间不足时触发 minor gc伊甸园和 from 存活的对象使用 copy 复制到 to 中存活的对象年龄加 1 并且将幸存区的 from 和 to 交换 minor gc 会引发 stop the world暂停其它用户的线程等垃圾回收结束用户线程才恢复运行 当对象寿命超过阈值时会晋升至老年代最大寿命是154bit 当老年代空间不足会先尝试触发 minor gc如果之后空间仍不足那么触发 full gcSTW的时 间更长 2.2 标记清除 什么是标记清除 标记清除算法分为标记和清除两个阶段首先需要标记出所有需要回收的对象在标记完成后统一回收掉所有被标记的对象也可以反过来标记存活的对象统一回收所有未被标记的对象。 优点 相比于标记整理算法速度更快 缺点 标记和清除二个过程的执行效率会随对象数量增长的效率而降低会造成内存碎片 2.3 标记整理算法 什么是标记整理算法 首先标记出所有需要回收的对象也可以反过来标记存活的对象然后让所有存活的对象向内存空间一端移动最后直接清理掉边界以外的内存 优点 不会产生内存碎片 缺点 相比于垃圾清除算法速度慢 2.4 标记复制算法 什么是标记复制算法 它将可用内存按容量划分为大小相等的二块每次只使用其中的一块。当这一块的内存用完了就将还活着的对象复制到另外一块上面然后再把已使用过的内存空间一次清理掉。 优点 不会有内存碎片 缺点 需要占用双倍内存空间 现在的商用Java虚拟机优先采用了这种收集算法去回收新生代。但是IBM曾有一项研究对新生代的朝生夕死的特点做了一个更量化的诠释新生代中的对象有98%熬不过第一轮收集。因此并不需要1:1的比例划分新生代的内存空间 2.5 JVM的相关参数 3.垃圾回收器 3.1 垃圾回收器概述 什么是垃圾回收器 垃圾收集算法是内存回收的方法论而垃圾回收器是内存回收的实践者。《Java虚拟机规范》中对垃圾收集器如何实现并没有做出任何规定因此不同厂商、不同版本的虚拟机所包含的垃圾回收器都可能会有很大差别不同的虚拟机一般也会提供各种参数供用户根据自己的应用特点和要求组合出各个内存分代所使用的收集器。 垃圾回收器的分类 1. 串行 单线程堆内存较小适合个人电脑 2. 吞吐量优先 多线程堆内存较大多核 cpu让单位时间内STW 的时间最短垃圾回收时间占比最低这样就称吞吐量高 3. 响应时间优先 多线程堆内存较大多核 cpu 尽可能让单次 STW 的时间最短 不同垃圾回收器的组合 上图展示了七种作用于不同分代的垃圾回收器如果二个回收器之间存在连线这说明它们可以搭配使用但这个关系不是一成不变的在JDK的一些版本中某些组合已经被废弃了。 直到目前还没有最好的垃圾回收器跟更加不存在万能的垃圾回收器我们应选择对具体的应用最合适的垃圾回收器。 3.2 串行的垃圾回收器 开启串行垃圾回收器的JVM参数 -XX:UseSerialGC Serial SerialOld Serial和SerialOld是二种串行的垃圾回收器。其中 Serial是一种单线程的垃圾回收器用于新生代采用标记复制算法进行垃圾回收。 SerialOld是一种单线程的垃圾回收器用于老年代采用标记整理算法进行垃圾回收。 3.3 吞吐量优先的垃圾回收器 开启吞吐量优先的垃圾回收器 -XX:UseParallelGC ~ -XX:UseParallelOldGC Parallel和ParallelOld是二种吞吐量优先的垃圾回收器。其中 Parallel是一款多线程并行收集的垃圾回收器用于新生代采用标记复制算法 ParallelOld是一款多线程并行收集的垃圾回收器用于老年代采用标记整理算法 开启其它参数 //动态调整伊甸园和幸存区的比例、整个堆的大小、晋升阈值的大小 -XX:UseAdaptiveSizePolicy //下面这二个参数开启后Parallel和ParallelOld会尝试达到对应的目标 //吞吐量的目标 -XX:GCTimeRatioratio //最大暂停毫秒数的目标默认200ms -XX:MaxGCPauseMillisms //控制线程数 -XX:ParallelGCThreadsn 3.4 响应时间优先的垃圾回收器 开启响应时间优先的垃圾回收器 -XX:UseConcMarkSweepGC ~ -XX:UseParNewGC ~ SerialOld CMS 和 ParNew 是二种响应时间优先的垃圾回收器。其中 CMS是一款多线程的垃圾回收器进行垃圾回收的过程中涉及到并行和并发用于老年代采用标记清除算法。另外CMS进行垃圾回收时可能会造成内存碎片过多当新生代垃圾回收内存不足时老年代由于内存碎片太多也内存不足这种情况下会采用SerialOld进行老年代的垃圾回收 ParNew是一款多线程并行收集的垃圾回收器用于新生代采用标记复制算法 //参数1并行的线程数默认是4、参数2并发的线程数建议设置为并行线程数的四分之一 -XX:ParallelGCThreadsn ~ -XX:ConcGCThreadsthreads //当老年代内存占比达到percent时执行CMS这么做的目的是预留一些空间给浮动垃圾用 -XX:CMSInitiatingOccupancyFractionpercent //新生代对象有可能引用老年代的对象但某些引用了老年代对象的新生代对象本身是要作为垃圾处理的 所以通过打开此开关在进行重新标记之前先针对新生代进行一次垃圾回收这样做就减少了重新标记的 压力 -XX:CMSScavengeBeforeRemark 3.5 G1垃圾回收器
http://www.yutouwan.com/news/165638/

相关文章:

  • 东莞高明网站设计外贸网站推广和建站
  • 国内知名的网站建设公司有哪些宣传片制作模板
  • 世界工厂采购网站大型网络游戏排行榜前十
  • 建站程序的选择郑州网站制作公司怎么样
  • 全国建设造价信息网站这几年做网站怎么样
  • 扁平化网站建设公司朗格手表网站
  • 甘肃省建设厅执业资格注册中心网站常德网站制作公司多少钱
  • 网站建设公司长沙网站策划论文
  • 手机自助建站系统网站降权恢复
  • 网站搭建上门多少钱移动开发专业
  • 做门户网站的公司有哪些wordpress插件的页面文件
  • 网站管理登录系统北京网站域名备案查询
  • 带数据库的网站怎么建十堰网站建设多少钱
  • 中山中小型网站国内营销策划咨询公司
  • 网站改域名个人资料库网站怎么做
  • 城阳网站建设培训兰州网站建设方案
  • 建筑工程网人才网长沙seo智优营家
  • 谷歌怎么做网站优化网站开发分析报告
  • 品牌设计公司网站钢铁网站哪家做的好
  • 网站建设是属于什么岗位网站网域名查询
  • 医院网站方案手机图片生成网页链接
  • 大型电商网站建设wordpress如何做产品页
  • 做海报创意网站珠宝网站设计文案
  • 西宁知名网站设计公司开发网站可用性监控
  • 最好的ppt模板网站培训设计软件
  • 惠城营销网站制作长沙软件开发培训机构
  • 新手要如何让网站被收录网站建设报价乱不一
  • 报名网站辽宁省建设银行一般网站字体
  • 永年县网站山东省建设节能协会网站
  • 优化什么建立生育支持政策体系降低生育养育教育成本长沙seo平台