JVM调优总结(2):基本垃圾回收算法

转载自   JVM调优总结(2):基本垃圾回收算法

可以从不同的的角度去划分垃圾回收算法:

按照基本回收策略分

引用计数(Reference Counting):

比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。

标记-清除(Mark-Sweep):

此算法执行分两阶段。第一阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把未标记的对象清除。此算法需要暂停整个应用,同时,会产生内存碎片。

复制(Copying):

此算法把内存空间划为两个相等的区域,每次只使用其中一个区域。垃圾回收时,遍历当前使用区域,把正在使用中的对象复制到另外一个区域中。次算法每次只处理正在使用中的对象,因此复制成本比较小,同时复制过去以后还能进行相应的内存整理,不会出现“碎片”问题。当然,此算法的缺点也是很明显的,就是需要两倍内存空间。

标记-整理(Mark-Compact):

此算法结合了“标记-清除”和“复制”两个算法的优点。也是分两阶段,第一阶段从根节点开始标记所有被引用对象,第二阶段遍历整个堆,把清除未标记对象并且把存活对象“压缩”到堆的其中一块,按顺序排放。此算法避免了“标记-清除”的碎片问题,同时也避免了“复制”算法的空间问题。

按分区对待的方式分

增量收集(Incremental Collecting):实时垃圾回收算法,即:在应用进行的同时进行垃圾回收。不知道什么原因JDK5.0中的收集器没有使用这种算法的。

分代收集(Generational Collecting):基于对对象生命周期分析后得出的垃圾回收算法。把对象分为年青代、年老代、持久代,对不同生命周期的对象使用不同的算法(上述方式中的一个)进行回收。现在的垃圾回收器(从J2SE1.2开始)都是使用此算法的。

按系统线程分

串行收集:串行收集使用单线程处理所有垃圾回收工作,因为无需多线程交互,实现容易,而且效率比较高。但是,其局限性也比较明显,即无法使用多处理器的优势,所以此收集适合单处理器机器。当然,此收集器也可以用在小数据量(100M左右)情况下的多处理器机器上。

并行收集:并行收集使用多线程处理垃圾回收工作,因而速度快,效率高。而且理论上CPU数目越多,越能体现出并行收集器的优势。

并发收集:相对于串行收集和并行收集而言,前面两个在进行垃圾回收工作时,需要暂停整个运行环境,而只有垃圾回收程序在运行,因此,系统在垃圾回收时会有明显的暂停,而且暂停时间会因为堆越大而越长。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

巧妙使用信用卡N个小技巧

大家看标题也看出来了,今天的博文与之前的相差十万八千里,既不是代码,也不是黑科技,既不属于创业,也不属于赚钱,今天咱们坐下来就慢慢的谈谈信用卡吧,现在大多数白领,老板&#xff0…

ubuntu16.4下用jexus部署asp.net core rtm

今天说下ubuntu 下部署asp.net core,不需要安装.net core sdk,自带运行时方式部署,利用jexus服务器转发请求到asp.net core. 1.部署准备环境 vmware虚拟机(其他也可以) ubuntu16.04镜像 2.发布环境 win10系统 vs2015 u…

html页面会出现浏览器崩溃,大规模WebGL应用引发浏览器崩溃的几种情况及解决办法...

我们使用Javascript写WebApp的时候,一般都不会考虑对象的生命周期,不太关注内存“泄露”的问题,依赖JS引擎的垃圾回收机制就可以运行的很好,基本上很少会出现浏览器崩溃的情况。但在Web端显示大规模三维模型的时候,内存…

细说SSO单点登录

什么是SSO? 如果你已知道,请略过本节! SSO核心意义就一句话:一处登录,处处登录;一处注销,处处注销。即:在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应…

java实现字符逆序输出

package cn.jbit.array;import java.util.Arrays;public class CharsSort {/*** 字符逆序输出*/public static void main(String[] args) {char[] chars new char[]{a,c,u,b,e,p,f,z};System.out.print("原字符序列&#xff1a;");for(int i 0; i < chars.lengt…

html5页面转场,基于HTML5 SVG的页面过渡切换效果

示例中使用了CSS Flexbox和CSS变量&#xff0c;不是所有的浏览器都支持这些新的CSS属性。该HTML5 SVG的页面过渡变形切换效果的基本HTML结构如下&#xff1a;d"M -44,-50 C -52.71,28.52 15.86,8.186 184,14.69 383.3,22.39 462.5,12.58 638,14 835.5,15.6 987,6.4 1194,1…

JVM调优总结(4):分代垃圾回收

转载自 JVM调优总结&#xff08;4&#xff09;&#xff1a;分代垃圾回收为什么要分代 分代的垃圾回收策略&#xff0c;是基于这样一个事实&#xff1a;不同的对象的生命周期是不一样的。因此&#xff0c;不同生命周期的对象可以采取不同的收集方式&#xff0c;以便提高回收效…

.NET Core系列 : 2 、project.json 这葫芦里卖的什么药

.NET Core系列 &#xff1a; 1、.NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境&#xff0c;本文介绍.NET Core中最重要的一个配置文件project.json的相关内容。我们可以使用.NET Core 的dotnet 命令行接口&#xff08;CLI&#xff09;dotnet new命令创建一个应用&…

html5 地图效果,html5 echarts图表插件炫光的分布地图动画特效

特效描述&#xff1a;图表插件 炫光的动画 分布地图动画 动画特效。html5地图动画&#xff0c;html5 echarts图表插件代码结构1. 引入JS2. HTML代码&#xfeff;ECharts$(#document).ready(function(){getEcharts();});function getEcharts(){// Step:3 conifg EChartss path, …

ASP.NET MVC @helper使用说明

简单的 helper 方法应用场景 Razor中的helper语法让您能够轻松创建可重用的方法&#xff0c;此方法可以在您的视图模板中封装输出功能。他们使代码能更好地重用&#xff0c;也使代码更具有可读性。 在我们定义helper方法之前的代码 让我们看一个简单的产品列表应用场景。在此场…

java实现向有序数组中插入一个元素

package cn.jbit.array; import java.util.*;public class Insert {public static void main(String[] args) {//字符排序char[] chars new char[9];chars[0] a;chars[1] c;chars[2] u;chars[3] b;chars[4] e;chars[5] p;chars[6] f;chars[7] z;System.out.print(&quo…

JVM调优总结(5):典型配置

转载自 JVM调优总结&#xff08;5&#xff09;&#xff1a;典型配置以下配置主要针对分代垃圾回收算法而言。 堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制&#xff1a;相关操作系统的数据模型&#xff08;32-bt还是64-bit&#xff09;限制&#xff1b;系统的…

html点击弹出iframe,JavaScript:关于跨iframe弹窗

index.htmliframe.html$(function(){$("#window").window({width: 200,height: 100});});效果由于是在iframe中弹窗致使窗口被腰斩&#xff0c;所以需要向window中追加节点再弹窗&#xff0c;解决方式如下var win window.top.document.createElement("div"…

Visual Studio “15”第三个预览版发布

微软发布了Visual Studio 2015后继版本Visual Studio “15” (VS15)的第三个预览版本。目前为止&#xff0c;VS15延续了开发过程的迭代特性&#xff0c;升级了IDE的功能&#xff0c;提供了用户可以修改的C#格式规则以及一个新的异常辅助程序。 经过修改的智能提示弹出框包含了一…

计算一个班的平均分

package cn.jbit.nestedloops; import java.util.Scanner; /*** 计算一个班的平均分*/ public class AvgScore {public static void main(String args[]){int[] score new int[4]; //成绩数组float sum 0.0f; //成绩总和float average 0.0f; //成绩平均值//循环输入学…

IronPython死而复生

IronPython是一个运行在.Net框架通用语言运行库上的实现&#xff08;Common Language Runtime&#xff0c;CLR&#xff09;。这个项目曾一度停滞不前&#xff0c;最近&#xff0c;团队换了领导者&#xff0c;带来了新的进展。 Jeff Hardy&#xff0c;IronPython项目的前领导人&…

阳泉2021高考成绩查询时间段,2021年阳泉高考成绩排名及成绩公布时间什么时候出来...

阳泉高考结束后&#xff0c;每年都有很多家长和考试不知道阳泉高考成绩排名如何查询、阳泉高考成绩什么时候公布以及查询方式&#xff0c;本文小编整理了阳泉高考成绩查询排名的相关知识。一、阳泉高考成绩公布时间及查询方式根据往年阳泉高考成绩公布时间预测&#xff0c;2021…

深入JVM——OOM异常解析

转载自 深入JVM——OOM异常解析JVM对象访问解析 对象访问过程的内存情况 public void function(){Object obj &#xff1d; new Object(); }?function方法被执行的时候&#xff0c;JVM在JVM栈中为function创建一个栈帧&#xff0c;用于存放function在运行过程中的一些信息。O…

mvc html.antiforgerytoken,MVC Html.AntiForgeryToken() 防止CSRF***

MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site request forgery)***的一个措施,它跟XSS(XSS又叫CSS:Cross-Site-Script),***不同,XSS一般是利用站内信任的用户在网站内插入恶意的脚本代码进行***&#xff0c;而CSRF则是伪造成受信任用户对网站进行***…

使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(一)-- 起步

一、安装Visual Studio Code 安装文件下载地址&#xff1a;VS Code&#xff0c;当前最新版本是1.3。 推荐安装最新版&#xff0c;因为附带Debug插件&#xff0c;支持在vs code上进行断点调试。 二、安装.Net Core 1.0 SDK 安装文件下载地址&#xff1a;.Net Core SDK 三、创建一…