java 垃圾回收手动回收_Java垃圾回收(1)

java 垃圾回收手动回收

这是有关垃圾收集(GC)的系列文章中的第一篇。 我希望能够涵盖整个系列过程中的理论知识以及热点虚拟机中的所有主要收集器。 这篇文章仅说明什么是垃圾回收以及不同回收器共有的元素。

我为什么要在乎?

您的Java虚拟机可以为您管理内存-这非常方便-但默认情况下可能未进行优化。 通过了解垃圾收集背后的一些理论,您可以更轻松地调整收集器。 一个普遍关注的问题是收集器的效率,也就是说,您的程序花了多少时间执行程序代码而不是收集垃圾。 另一个常见问题是应用程序暂停的时间长。

关于垃圾收集还有很多传闻和民间传说,因此更详细地了解算法确实有助于避免陷入常见的陷阱和陷阱。 此外,对于任何对如何应用和使用计算机科学原理感兴趣的人,JVM内部都是一件很棒的事情。

停止世界是什么意思?

您的程序(或GC-Speak中的mutator)将在运行时分配对象。 在某个时候,需要收集堆,并且热点中的所有收集器都会暂停您的应用程序。 “世界停止”一词用于表示所有增变器的线程都已暂停。

可以实现不需要暂停的垃圾回收器。 Azul在其Zing虚拟机中实现了一个有效的不间断收集器。 我不会介绍它的工作原理,但是如果您想了解更多信息,可以参阅一份非常有趣的白皮书 。

年轻/弱世代假说

简而言之: 大多数分配的对象都死于年轻 1 。 通过对1980年代一大批程序的内存分配和活动模式进行实证分析,证明了这一概念。 研究人员发现,不仅大多数物体死于年轻,而且一旦它们活到一定年龄,它们就会活很长一段时间。 下图取自SUN / Oracle研究,以直方图的形式查看了对象的寿命。

190245

堆的组织方式如何?

年轻的世代假设催生了世代垃圾收集的思想,其中将堆分成几个区域,每个区域内对象的放置与它们的年龄相对应。 以上这些垃圾收集器( G1除外)共有的一个要素是将堆组织到不同空间的方式。

Java内存

最初分配对象时(如果适合)将它们存储在Eden空间中。 如果对象在集合中幸存下来,那么它将最终到达幸存者空间。 如果它可以存活几次(您的使用期限阈值),则该对象最终将出现在使用期限的空间中。 收集器收集这些空间的算法的细节因收集器而异,因此我将在以后的博客文章中分别介绍它们。

这种划分是有益的,因为它允许您在不同的空间上使用不同的算法。 如果大多数对象都已失效,则某些GC算法效率更高;如果大多数对象都还处于活动状态,则某些GC算法效率更高。 由于世代相传的假设,通常是时候到了在伊甸园收集大多数物体的时候,幸存者空间已经死了,而保有权的大多数物体都还活着。

还有永久性的-永久的一代。 这是一个特殊的世代,其中包含与Java语言本身相关的对象。 例如,此处包含有关已加载类的信息。 从历史上看,被插入或为常量的字符串也保存在这里。 永久代已被删除,转而使用元空间 。

多个收藏家

热点虚拟机实际上具有各种不同的垃圾收集器。 每个都有一组不同的性能特征,并且(或更少)适合于不同的任务。 我将要研究的关键垃圾收集器是:

  • 并行清理 (PS):最近发布的JVM中的默认收集器。 为了收集而停止运行,但是并行收集(即使用多个线程)。
  • 并发标记扫描 (CMS):此收集器有多个阶段,其中一些阶段使世界停滞不前,但在该阶段的多个阶段也与程序同时运行。
  • 增量并发标记扫描 (iCMS):CMS的一种变体,旨在降低暂停时间。 有时可以做到这一点!
  • 垃圾优先 (G1):一种新型的收集器,最近变得更加稳定,并且使用量正在缓慢增加。

结论

我已经给出了有关垃圾回收的一些介绍性观点,在下一篇文章中,我将介绍Parallel Scavenge收集器-它是当前的默认收集器。 我还想提供我的雇主链接,该雇主拥有我们认为非常有用的GC日志分析仪 。

  1. “热点”是在openjdk和官方Oracle JVM之后通用的代码库的名称。 从Java 7开始,openjdk是Java SE的参考实现。
  2. 从技术上讲,我上面描述的是具有经验验证的“弱代假设”。 还有一个很强的变体,可以说是:堆分配对象的平均生存期等于可访问存储的平均数量 。 实际上,这可以通过采取利特尔定律并将Λ设置为1来从数学上证明。
  3. 我将在G1特定的博客文章中介绍G1中堆的组织方式。

参考: Insightful Logic博客上来自我们JCG合作伙伴 Richard Warburton的Java垃圾收集(1) 。

翻译自: https://www.javacodegeeks.com/2013/06/garbage-collection-in-java-1.html

java 垃圾回收手动回收

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

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

相关文章

使用Apache Isis快速进行SEMAT应用程序开发

TL; DR这篇文章谈论我使用Apache Isis创建并部署到此处的OpenShift Online的SEMAT宠物项目: http: //semat.ofbizian.com Apache Isis 作为主要在后端系统上工作的Java开发人员,我讨厌创建用户界面和处理Java脚本。 幸运的是,有J…

java 对象锁定_少锁定Java对象池

java 对象锁定自从我写任何东西以来已经有一段时间了,我一直在忙于我的新工作,其中涉及在性能调优方面做一些有趣的工作。 挑战之一是减少应用程序关键部分的对象创建。 尽管Java随着时间的推移已改进了GC算法,但垃圾回收打ic一直是Java的主…

Oracle JDBC中的PreparedStatement占位符过多

使用Oracle数据库时,导致ORA-01745(“无效的主机/绑定变量名称错误”)错误的原因有多种。 关于错误ORA-01500到ORA-02098的Oracle 9i文档提供了有关ORA-01745的更多详细信息。 它指出,“原因”是“绑定变量或INTO规范中的冒号后跟…

webview加载php文件,HYWebview下载自定义文件教程

车机版 HYWebview升级到1.3了多增加了一个进度条多增加了自定义下载URL功能使用教程。浏览器打开DNS地址:103.44.248.95可见 底部有一个 下载链接 和 提货密码 可以输入!比如 我们去应用宝官网复制下载链接出来:https://download.sj.qq.com/u…

设计模式 原型模式_设计模式:原型

设计模式 原型模式创新设计模式之一是原型设计模式 。 尽管原型是创造模式,但它在概念上与其他模式有所区别。 我的意思是原型在某种意义上创造了自己。 我将在下面解释。 原型模式的所有魔力都基于Java Object的clone()方法。 因此&#x…

Packt和Java Code Geeks提供的$ 5 Java编程书籍!

您好极客! 今天,我们为您带来一些激动人心的消息! Java Code Geeks和Packt联手为您提供广泛的书籍库每周折扣。 对于开发人员来说,Java仍然是最强大的选择之一,它是定义企业和移动设备的语言。 本周,我们…

源码时代php中级项目,0526PHP班中级项目评比圆满落幕

为了充分发掘同学们开发项目的成功经验,全面提升学员的综合素质,锻炼学员的解说与问题处理能力,源代码教育(源码时代)重庆校区进行了PHP就业班的中级项目评比。项目评比分为演讲、质询、点评及投票评分几个环节,每个环节都精彩纷呈…

qt linux 添加库文件路径,linux下qt使用第三方库的那些事

开发库查看工具:$sudo apt-get install pkg-config很多时候我们并不知道自己电脑有没有这个库,所以我们可以使用这个工具来查看自己有哪些工具,或者哪些工具没有。同时,qmake是对这个工具配置支持的,所以我们很多时候很…

xp系统上安装linux系统教程,XP系统如何安装fedora linux双系统?WinXP安装fedora linux双系统的方法...

有位朋友因为想在linux中熟悉下hadoop的配置开发环境,所以就开始于WinXP系统中安装fedora linux双系统,可是操作了很久都没成功。这该如何怎么办呢?接下来,小编就给大家介绍WinXP安装fedora linux双系统的具体方法。1.下载Fedora-…

pae扩展内存 linux,Linux内核-内存管理-PAE(物理地址扩展)

Intel 通过在处理器上把管脚数从 32 增加到 36,以提高处理器的寻址能力,使其达到 2^3664GB,然而线性地址的位数仍然是 32 位,为此,需引入一种新的分页机制。从pentium pro 处理器开始,intel引入一种叫做 PA…

java嵌入式db_Java DB嵌入式模式

java嵌入式dbJava DB是基于Java编程语言和SQL的关系数据库管理系统。 这是Apache软件基金会的开源Derby项目的Oracle版本。 Java SE 7 SDK中包含Java DB。 Java DB有两个部署选项: Embedded和Network Server 。 这篇文章是关于嵌入式部署或模式的。 1.嵌入式 在嵌…

群晖备份linux分区,数据丢失的后悔药,群晖NAS备份方案详解

“秒速开机”——据说90%的人都是因为这句话而知道的SSD固态硬盘。相比于机械硬盘,SSD固态硬盘开机快、关机快、打开软件快、载入数据快、拷贝快、删除也快——既快乐、又爽快,更是大块人心!然而,SSD固态硬盘已经可以完全取代机械硬盘了吗&am…

tg3269c网卡驱动linux,TP-Link3269C网卡驱动官方版

TG-3269C驱动是一款能够安装于由普联发布的无线网卡驱动,通过此安装驱动我们手机和其他无线设备才能连接上无线网卡并进行上网,同时如果你的网卡经常出现断开和重连、网络不稳定等情况可以通过重新安装驱动,查看是否是硬件的问题,…

使用Spring Security,Thymeleaf和Okta保护Java应用程序的安全

永不再构建身份验证 –喜欢构建用户管理? 使用Okta,您可以在几分钟内为您的应用程序添加社交登录,多因素身份验证和OpenID Connect支持。 立即创建一个免费的开发者帐户。 在构建Java应用程序时,用户管理是至关重要的考虑因素。 …

红旗linux添加usb无线网卡,在Ubuntu 8.10中安装无线网卡RTL8187SE驱动

本人的笔记本是微星的Wind U90,自带的无线网卡是RTL8187SE。这款无线网卡在一般的Linux下是没有驱动的,微星的官方也仅仅提供在OpenSUSE下的驱动。为了在我的Ubuntu下使用这个网卡,只能自己动手了。还好,有了互联网上各位大侠和微…

将Google reCaptcha与Spring Boot应用程序结合使用

介绍 Google的reCaptcha是一个用于防止漫游器向您的公共表单提交数据或访问您的公共数据的库。 在本文中,我们将研究如何将reCaptcha与基于Spring Boot的Web应用程序集成 设置验证码 您应该从管理面板创建API密钥。 您必须创建一个示例应用程序,如下所…

探索 HTTP 请求的世界:get 和 post 的奥秘(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

linux 书签管理工具,在书签管理工具中使用Ubuntu字体

通过便捷书签管理程序(Bookmarklet,一种在浏览器中存放书签URL地址的应用程序)来在大多数的网站上推广使用Ubuntu系统的默认字体。——读者米格尔费尔南迪斯米格尔在他的想法产生之前告诉我们说:“我发现Ubuntu系统的字体在提高可读性上超过了绝大多数的…

linux18.2安装界面,Ubuntu 18.10下安装Grub Customizer 5.1.0配置grub2图形化界面

配置Grub2/burg引导装载程序Grub Customizer 5.1.0新增加对Ubuntu 18.10的支持,我们可以用PPA源来安装,同时还支持Ubuntu 18.04、16.04、14.04。Grub Customizer简介Grub Customizer是用来配置Grub/burg引导装载程序的图形工具,此次发布的5.1…

使用Eclipse和Open Liberty的Java EE 8上的Java 9

几周前,我写了一篇文章,标题为哪个IDE和服务器支持Java EE 8和Java9 ,着眼于Java 9和Java EE 8之间的当前运行状态。您可以期待事情发展很快,我们现在有了一些alpha和支持Java 9和Java EE 8的开发版本。这些是– Payara 5 –适用…