文明网站的建设与管理几点思考,加我vx看,人力资源网站怎么做,网上平台一、堆里面的分区#xff1a;Eden、From、To、老年代各自的特点 堆是对象共享的区域#xff0c;也是垃圾回收器主要工作的地方。主要分为新生区、养老区和元空间#xff0c;而这三块地方中GC主要工作在新生区和养老区#xff0c;其中新生区占1/3、养老区占2/3#xff0c;新…一、堆里面的分区Eden、From、To、老年代各自的特点 堆是对象共享的区域也是垃圾回收器主要工作的地方。主要分为新生区、养老区和元空间而这三块地方中GC主要工作在新生区和养老区其中新生区占1/3、养老区占2/3新生区又分为伊甸区和幸存者区幸存者区又分为幸存者0区From区幸存者1区to区内存所占比例是8:1:1。垃圾回收主要有四大算法分别是1、引用计数器法 2、复制算法 3、标记清除算法 4、标记压缩算法。 1、引用计数器法 工作原理每次对对象的引用都维护一个计数器当该对象的计数器为0的时候说明没有引用指向该对象了GC可以对该对象的内存空间进行回收了。 缺点1较难处理循环引用 2每次对对象的引用都需要维护引用计数器且维护计数器本身也有一定的消耗 2、复制算法 工作原理首先当伊甸区满的时候会第一次触发GC把还活着的对象拷贝到From区当伊甸区再次满的时候第二次触发GC这时候GC会扫描伊甸区From区对这两个区域进行垃圾回收经过这次回收后还存活的对象则直接复制到To区同时把这些对象的年龄1。 备注如果有对象的年龄到达了老年的标准则复制到老年代区。 其次清空伊甸区和From区中的对象。经过这次清空之后原本的From区里边为空变为了To区 最后To区和From区互换原来的To区成为下一次GC时的From区。 优点不会产生内存碎片 缺点GC第二次扫描拷贝存活的对象时会导致内存减半 3、标记清除算法 标记清除一般发生在老年代。分为2个阶段先标记出要回收的对象然后统一回收这些对象。 同通俗的话解释一下标记清除算法是指程序运行期间若可以使用的内存即将被耗尽时GC线程将会被触发并将程序暂停随后将要清除的对象标记一遍最终统一回收这些对象完成标记清理工作接下来便让应用程序恢复运行。 两个阶段 标记从引用根节点开始标记遍历所有的GC Roots先标记出要回收的对象 清除遍历整个堆把标记的对象清除 缺点此算法需要暂停整个应用会产生内存碎片。 4、标记压缩算法 在整理压缩阶段不再对标记的对象回收而是将所有存活着的对象都向一端移动然后直接清除边界以外的内存。可以看到标记的存活对象将会被整理按照内存地址依次排列而未被标记的内存将会被整理掉。如此一来当我们需要给新对象分配内存时JVM只需要持有一个内存的起始地址即可这比维护一个空闲列表显然少了许多开销。 优点标记压缩算法不仅可以弥补标记清除算法中内存区域分散的特点也消除了复制算法当中内存减半的高额代价。 缺点比复制算法多了一个标记的阶段又比标记/清除多了一个整理内存的过程。