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

手机网站建设必要性创建平台网站下载链接

手机网站建设必要性,创建平台网站下载链接,wordpress博客编辑器,茶山做网站垃圾回收#xff0c;顾名思义就是释放垃圾占用的空间#xff0c;从而提升程序性能#xff0c;防止内存泄露。当一个对象不再被需要时#xff0c;该对象就需要被回收并释放空间。 Java 内存运行时数据区域包括程序计数器、虚拟机栈、本地方法栈、堆等区域。其中#xff0c;… 垃圾回收顾名思义就是释放垃圾占用的空间从而提升程序性能防止内存泄露。当一个对象不再被需要时该对象就需要被回收并释放空间。 Java 内存运行时数据区域包括程序计数器、虚拟机栈、本地方法栈、堆等区域。其中程序计数器、虚拟机栈和本地方法栈都是线程私有的当线程结束时这些区域的生命周期也结束了因此不需要过多考虑回收的问题。而堆是虚拟机管理的内存中最大的一块堆中的内存的分配和回收是动态的垃圾回收主要关注的是堆空间。 虽然现在 jdk21 虚拟线程出来了jdk17 使用人数也直线上升但是面试还是jdk8 懂得都懂!!! 0. 总结 其实一套组合拳下来问的就是是什么、为什么、怎么办。 什么是垃圾回收以及什么是垃圾怎么判断对象是垃圾为什么说它是垃圾等等 文章目录 0. 总结1. 内存分配原则1. 对象优先在 Eden 区分配2. 大对象直接进入老年代3. 长期存活的对象将进入老年代 2. 内存回收原则3. 空间分配担保的目的是什么4. 与垃圾回收有关的方法4. 如何判断对象是否可回收1. 引用计数算法2. 根搜索算法也称可达性分析法 5. 引用的分类6. 对象可以被回收就代表一定会被回收吗7. 方法 finalize 在哪个类中定义以及它的默认实现是什么该方法的作用是什么8. 判断对象是否可回收有哪两种算法Java 使用的是哪一种算法另一种算法有什么不足之处9. 新生代和老年代分别适合使用哪种垃圾回收算法10. 在分配内存空间时为什么大对象直接在老年代中分配 1. 内存分配原则 主要有一下 3 条原则。 1. 对象优先在 Eden 区分配 大多数情况下对象在新生代中 Eden 区分配。当 Eden 区没有足够空间进行分配时虚拟机将发起一次 Minor GC。执行 Minor GC 后后面分配的对象如果能够存在 Eden 区的话还是会在 Eden 区分配内存。 2. 大对象直接进入老年代 大对象就是需要大量连续内存空间的对象比如字符串、数组。 大对象直接进入老年代主要是为了避免为大对象分配内存时由于分配担保机制带来的复制而降低效率。 3. 长期存活的对象将进入老年代 既然虚拟机采用了分代收集的思想来管理内存那么内存回收时就必须能识别哪些对象应放在新生代哪些对象应放在老年代中。为了做到这一点虚拟机给每个对象一个对象年龄Age计数器。 大部分情况对象都会首先在 Eden 区域分配。如果对象在 Eden 出生并经过第一次 Minor GC 后仍然能够存活并且能被 Survivor 容纳的话将被移动到 Survivor 空间s0 或者 s1中并将对象年龄设为 1(Eden 区-Survivor 区后对象的初始年龄变为 1)。 对象在 Survivor 中每熬过一次 MinorGC年龄就增加 1 岁当它的年龄增加到一定程度默认为 15 岁就会被晋升到老年代中。对象晋升到老年代的年龄阈值可以通过参数 -XX:MaxTenuringThreshold 来设置。 2. 内存回收原则 针对 HotSpot VM 的实现它里面的 GC 其实准确分类只有两大种 部分收集 (·Partial GC) ● 新生代收集Minor GC / Young GC只对新生代进行垃圾收集 ● 老年代收集Major GC / Old GC只对老年代进行垃圾收集。需要注意的是 Major GC 在有的语境中也用于指代整堆收集 ● 混合收集Mixed GC对整个新生代和部分老年代进行垃圾收集。 整堆收集 (Full GC)收集整个 Java 堆和方法区。 3. 空间分配担保的目的是什么 空间分配担保是为了确保在 Minor GC 之前老年代本身还有容纳新生代所有对象的剩余空间。 4. 与垃圾回收有关的方法 gc 调用垃圾回收器的方法是 gc该方法在 System 类和 Runtime 类中都存在。 ● 在 Runtime 类中方法 gc 是实例方法方法 System.gc 是调用该方法的一种传统而便捷的方法。 ● 在 System 类中方法 gc 是静态方法该方法会调用 Runtime 类中的 gc 方法。 其实java.lang.System.gc 等价于 java.lang.Runtime.getRuntime.gc 的简写都是调用垃圾回收器。 方法 gc 的作用是提示 Java 虚拟机进行垃圾回收该方法由系统自动调用不需要人为调用。该方法被调用之后由 Java 虚拟机决定是立即回收还是延迟回收。 jdk8 System 类的部分源码 public final class System {.../*** Runs the garbage collector.* p* Calling the codegc/code method suggests that the Java Virtual* Machine expend effort toward recycling unused objects in order to* make the memory they currently occupy available for quick reuse.* When control returns from the method call, the Java Virtual* Machine has made a best effort to reclaim space from all discarded* objects.* p* The call codeSystem.gc()/code is effectively equivalent to the* call:* blockquotepre* Runtime.getRuntime().gc()* /pre/blockquote** see java.lang.Runtime#gc()*/public static void gc() {Runtime.getRuntime().gc();} } finalize 与垃圾回收有关的另一个方法是 finalize 方法。该方法在 Object 类中被定义在释放对象占用的内存之前会调用该方法。该方法的默认实现不做任何事如果必要子类应该重写该方法一般建议在该方法中释放对象持有的资源。 4. 如何判断对象是否可回收 垃圾回收器在对堆进行回收之前首先需要确定哪些对象是可回收的。常用的算法有两种引用计数算法和根搜索算法。 1. 引用计数算法 引用计数算法给每个对象添加引用计数器用于记录对象被引用的计数引用计数为 0 的对象即为可回收的对象。 虽然引用计数算法的实现简单判定效率也很高但是引用计数算法无法解决对象之间循环引用的情况。如果多个对象之间存在循环引用则这些对象的引用计数永远不为 0无法被回收。因此 Java 语言没有使用引用计数算法。 2. 根搜索算法也称可达性分析法 主流的商用程序语言都是使用根搜索算法判断对象是否可回收。根搜索算法的思路是从若干被称为 GC Roots 的对象开始进行搜索不能到达的对象即为可回收的对象。 在 Java 中GC Roots 一般包含下面几种对象 ● 虚拟机栈中引用的对象 ● 本地方法栈中的本地方法引用的对象 ● 方法区中的类静态属性引用的对象 ● 方法区中的常量引用的对象。 5. 引用的分类 引用计数算法和根搜索算法都需要通过判断引用的方式判断对象是否可回收。 JDK1.2 之前Java 中引用的定义很传统如果 reference 类型的数据存储的数值代表的是另一块内存的起始地址就称这块内存代表一个引用。 在 JDK 1.2 之后Java 将引用分成四种按照引用强度从高到低的顺序依次是强引用、软引用、弱引用、虚引用。 ● 强引用是指在程序代码中普遍存在的引用。垃圾回收器永远不会回收被强引用关联的对象。类似于必不可少的生活用品 ● 软引用描述还有用但并非必需的对象。只有在系统将要发生内存溢出异常时被软引用关联的对象才会被回收。在 JDK 1.2 之后提供了 SoftReference 类实现软引用。类似于可有可无的生活用品 ● 弱引用描述非必需的对象其强度低于软引用。被弱引用关联的对象只能存活到下一次垃圾回收发生之前当垃圾回收器工作时被弱引用关联的对象一定会被回收。在 JDK 1.2 之后提供了 WeakReference 类实现弱引用。类似于可有可无的生活用品 ● 虚引用是最弱的引用关系。一个对象是否有虚引用的存在完全不会对其生存时间构成影响也无法通过虚引用取得一个对象实例。为一个对象设置虚引用关联的唯一目的就是能在这个对象被回收时收到一个系统通知。在 JDK 1.2 之后提供了 PhantomReference 类实现虚引用。 6. 对象可以被回收就代表一定会被回收吗 即使在可达性分析法中不可达的对象也并非是“非死不可”的这时候它们暂时处于“缓刑阶段”要真正宣告一个对象死亡至少要经历两次标记过程 可达性分析法中不可达的对象被第一次标记并且进行一次筛选筛选的条件是此对象是否有必要执行 finalize 方法。当对象没有覆盖 finalize 方法或 finalize 方法已经被虚拟机调用过时虚拟机将这两种情况视为没有必要执行。被判定为需要执行的对象将会被放在一个队列中进行第二次标记除非这个对象与引用链上的任何一个对象建立关联否则就会被真的回收。 7. 方法 finalize 在哪个类中定义以及它的默认实现是什么该方法的作用是什么 方法 finalize 在 Object 类中被定义该方法的默认实现不做任何事。在释放对象占用的内存之前会调用该方法如果必要子类应该重写该方法一般建议在该方法中释放对象持有的资源。 8. 判断对象是否可回收有哪两种算法Java 使用的是哪一种算法另一种算法有什么不足之处 判断对象是否可回收的两种算法是引用计数算法和根搜索算法Java 使用的是根搜索算法。引用计数算法虽然实现简单判定效率高但是缺点是无法解决对象之间循环引用的情况当存在循环引用时使用引用计数算法会导致无法堆循环引用的对象进行回收。 9. 新生代和老年代分别适合使用哪种垃圾回收算法 ● 在新生代中大多数对象的生命周期都很短因此选用复制算法。 ● 在老生代中对象存活率高因此选用标记—清除算法或标记—整理算法。 10. 在分配内存空间时为什么大对象直接在老年代中分配 将大对象直接在老年代中分配的目的是避免在 Eden 区和 Survivor 区之间出现大量内存复制。
http://www.huolong8.cn/news/18846/

相关文章:

  • 营销型高端网站建设滨海县网站建设
  • 右键网站 选择添加ftp站点wordpress模班之家
  • 慈溪高端网站设计国外科技类网站
  • 发卡网站搭建做企业网站的费用挂什么科目
  • 自己做网站去哪买服务器那类型网站容易做排名
  • 西安房产网站大全网站小程序app定制开发
  • 承德网站建设费用网络服务提供商是指什么
  • 网站建设的岗位叫什么wordpress二次元美化
  • 厦门装修公司网站建设北京旅游型网站建设
  • 做网站怎样投放广告用dw做一个个人网站
  • 个人网站和企业网站的区别成都logo标志设计
  • 唯品会网站建设数据安全分析阿里巴巴 商城网站怎么做
  • 杭州营销太原自动seo
  • 贵州建网站的公司firefart wordpress
  • 服务器做网站哪个系统好白云手机网站建设价格
  • 本地手机网站建设服务宝安沙井网站建设
  • 网站不公开简历做家教上虞建设局网站
  • 重庆网站建设价位网易博客 wordpress
  • 网站建设完整步骤深圳画册设计企业
  • dw做网站怎么换图片wordpress 微信接口
  • 仿制网站侵权行为做app网站的软件有哪些内容
  • 最好的网站模版上传网站主办者承诺书
  • 哈尔滨搭建网站知名的集团门户网站建设企业
  • 物流案例网站北京住房建设部官方网站
  • 东城网站设计成都网站建设公司兴田德润在哪儿
  • 软件技术学的是什么滁州seo优化
  • 北京城乡建设集团有限公司官网最优化方法
  • 网站备案号格式说明书深圳电子商务网站制作
  • 阿里巴巴国际站跨境电商平台苏州做商城网站
  • 网站开发后台做些什么域名解析过程