【CSDN编者按】金三银四的招聘季,并不会因为疫情而影响太多。据字节调动官宣,该司决定扩大今年在武汉的招聘规模,提供近2000个工作岗位,促进当地人才就业。网上也出现远程入职的字节跳动员工,还没去公司就收到笔记本电脑的新闻。放心,这不是广告,只是想说明,疫情打不垮中国企业的发展,更不会阻挡中国的用工需求。而如果你要面试大厂Java岗位,这篇文章或许应该作为你的“面经”。

作者 | _陈哈哈

责编 | 胡巍巍

出品 | CSDN(ID:CSDNnews)

在本文中,我们将研究Java垃圾回收、它的工作方式以及重要性。

Java垃圾回收的定义

Java垃圾回收是Java程序执行自动内存管理的过程。Java程序编译为字节码,可以在Java虚拟机(简称JVM)上运行。当Java程序在JVM上运行时,将在堆上创建对象,这是专用于该程序的内存的一部分。最终,将不再需要某些对象。垃圾收集器找到这些未使用的对象并将其删除以释放内存。

Java垃圾回收如何工作

Java垃圾收集是一个自动过程。程序员不需要显式标记要删除的对象。垃圾回收实现位于JVM中。每个JVM都可以实现垃圾回收,但是它很高兴。唯一的要求是它符合JVM规范。尽管有许多JVM,但Oracle的HotSpot是迄今为止最常见的。它提供了一套强大而成熟的垃圾收集选项。

尽管HotSpot具有针对各种用例进行了优化的多个垃圾收集器,但其所有垃圾收集器都遵循相同的基本过程。第一步,识别未引用的对象并将其标记为可进行垃圾回收。第二步,删除标记的对象。(可选)可以在垃圾回收器删除对象之后压缩内存,以便剩余的对象在堆开始时位于连续的块中。压缩过程使在分配给现有对象的内存块之后更容易按顺序将内存分配给新对象。

HotSpot的所有垃圾收集器都实现了按年龄分类对象的分代垃圾收集策略。世代垃圾收集背后的基本原理是,大多数对象都是短暂的,并且在创建后不久就可以进行垃圾收集了。

堆分为三个部分:

年轻一代:新创建的对象始于年轻一代。年轻一代又细分为Eden空间和所有Survivor空间,在Eden空间中所有新对象都开始运行,在其中一个垃圾收集周期结束后,对象从Eden中移出。当从Young Generation收集对象时,这是次要的垃圾收集事件。

老一代:寿命长的对象最终从年轻一代迁移到老一代。从上一代垃圾回收对象时,这是一个重要的垃圾回收事件。

永久生成:元数据(例如类和方法)存储在永久生成中。不再使用的类可能是从永久代收集的垃圾。

在完全垃圾收集事件期间,所有代中未使用的对象将被垃圾收集。

HotSpot有四个垃圾收集器:

串行:所有垃圾回收事件都在一个线程中串行进行。在每个垃圾回收之后执行压缩。

并行:多个线程用于次要垃圾回收。单线程用于大型垃圾回收和旧式压缩。另外,Parallel Old变量使用多个线程进行主要垃圾收集和Old Generation压缩。

CMS(并发标记扫描):使用与并行相同的算法,多个线程用于次要垃圾回收。大型垃圾收集是多线程的,例如Parallel Old,但是CMS与应用程序进程同时运行,以最大程度地减少“停止世界”事件(即,当垃圾收集器正在运行时停止应用程序)。不执行压缩。

G1(垃圾优先):最新的垃圾收集器旨在替代CMS。它像CMS一样是并行和并发的,但是与较旧的垃圾收集器相比,它的工作原理却大相径庭。

Java垃圾收集的好处

Java垃圾收集的最大好处是,它可以自动处理未使用的对象或无法访问的对象的删除, 以释放重要的内存资源。使用无垃圾收集的语言(例如C和C ++)工作的程序员必须在其代码中实现手动内存管理。

尽管需要额外的工作,但一些程序员还是主张手动内存管理胜于垃圾回收,这主要是出于控制和性能方面的考虑。尽管有关内存管理方法的争论仍在继续,但垃圾收集现在已成为许多流行编程语言的标准组成部分。对于垃圾收集器会对性能产生负面影响的方案,Java提供了许多选项来调整垃圾收集器以提高其效率。

Java垃圾收集最佳实践

对于许多简单的应用程序,Java垃圾回收不是程序员需要自觉考虑的事情。但是,对于希望提高Java技能的程序员来说,了解Java垃圾回收的工作方式以及如何对其进行调整非常重要。

除了垃圾收集的基本机制外,了解Java中垃圾收集的最重要要点之一是它不是确定性的,无法预测运行时何时进行垃圾收集。可以在代码中包含一个提示,以使用System.gc()或Runtime.gc()方法运行垃圾收集器,但它们不能保证垃圾收集器会真正运行。

调整Java垃圾收集的最佳方法是在JVM上设置标志。标志可以调整要使用的垃圾收集器(例如,Serial,G1等),堆的初始和最大大小,堆段的大小(例如,Young Generation,Old Generation)等等。被调整的应用程序的性质是很好的设置初始指南。例如,并行垃圾收集器效率很高,但经常会导致“世界停止”事件,使其更适合后端处理,在这种情况下可以长时间停顿垃圾收集。

另一方面,CMS垃圾收集器旨在最大程度地减少暂停,使其非常适合响应性很重要的GUI应用程序。可以通过更改堆或堆的大小并使用jstat之类的工具测量垃圾收集效率来完成其他微调。

原文链接:

https://blog.csdn.net/qq_39390545/article/details/104457216

【End】

防疫、复工如何并行?天云数据推出人工智能监测方案!到底如何做到事前预防,而不是事后诸葛亮?本周四晚8点天云数据VP陈勇为各位揭晓答案!扫描下方二维码免费报名

推荐阅读 

☞百度成立互联网医院;钉钉招小学生产品体验师;iOS 13.4 上线 | 极客头条

☞AI 如何打通边缘计算的「任督二脉」?

☞5 亿微博数据疑泄露,Python 爬虫如何避免踩天坑?

☞@开发者,微软 CEO 萨提亚带领 60 位大咖的集结令,你敢接吗?

☞自称中本聪的他被法官怒怼:你的证词毫无可信度!

☞你的企业在什么情况下需要人工智能?快来看看你需要具备哪些条件与能力吧!

你点的每一个在看,我认真当成了喜欢

字节跳动武汉招聘 2000 人,距离大厂 Offer,你还差这篇 Java 干货!| 原力计划...相关推荐

  1. 字节跳动已经 10 万人了?Java 程序员也太香了!

    字节跳动已经 10 万人了? 是的,在 2020 年字节跳动的员工总数从 6 万蹿到 10 万,平均每个工作日就有 150 人在办理入职,加入字节跳动全球超过 240 个办公点. 更有统计,在总部北京 ...

  2. 字节跳动实验室招聘户型图理解实习生|北京

    字节跳动实验室招聘户型图理解实习生(北京) 岗位一 - 计算机视觉实习生 岗位职责 - 负责图像中分割.检测等任务的深度学习算法的研发和实现: - 负责将计算机视觉和图像处理技术应用到字节线上产品,并 ...

  3. 九章云极发布YLearn因果学习开源项目;字节跳动大量招聘芯片工程师;苹果被俄法院罚款约21.6万元 | 每日大事件...

    数据智能产业创新服务媒体 --聚焦数智 · 改变商业 01.九章云极DataCanvas公司开源发布YLearn因果学习开源项目 7月12日,九章云极DataCanvas公司发布YLearn因果学习开 ...

  4. 实战|Python爬取字节跳动1W+招聘信息

    今天我们打算爬取一下字节跳动的招聘信息: 我们打开开发者工具并访问: https://jobs.bytedance.com/experienced/position?keywords=&cat ...

  5. Python爬取字节跳动1W+招聘信息

    今天我们打算爬取一下字节跳动的招聘信息: 我们打开开发者工具并访问: https://jobs.bytedance.com/experienced/position?keywords=&cat ...

  6. go语言实战_字节跳动年薪50W抢Go开发人才,你还在问该不该学?

    字节跳动近期招聘Go开发工程师,给出年薪50W的薪资水平,还有额外期权,免费三餐等,随着这几年Go语言在一线厂商兴起,各大互联网开始抢夺Go开发人才, 在最近10年,运维自动化和云平台建设等领域是Go ...

  7. Python爬取近十万条程序员招聘数据,告诉你哪类人才和技能最受热捧! | 原力计划...

    作者 | Huang supreme 编辑 | 郭芮 出品 | CSDN博客 图源 | 视觉中国 随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆脱不了与数据打交道,社会对于"数据&qu ...

  8. CSDN”原力计划“在召唤:技术人请集结,用原创技术影响万千开发者

    技术深不可测.薪资难以想象.着装招人吐槽.发量让人惊叹.笑点着实密集.情商令人堪忧......在这个你我他她它通过网络紧密互联.消息实时互通的 21 世纪,人们对身处技术至高点的程序员们仍然有着以上不 ...

  9. 你离黑客的距离,就差这 20 个神器了 | 原力计划

    作者 | 编程技术宇宙 责编 | 王晓曼 出品 | CSDN博客 在不少电影电视剧中,主角的身边都有这么一位电脑高手:他们分分钟可以黑进反派的网络,攻破安全防线,破解口令密码,拿到重要文件.他们的电脑 ...

最新文章

  1. ABAP通过正则表达式提成字符串中的数字例子
  2. python数字类型转换函数_python中的各种数据类型中的数据格式转换
  3. 关于js校验,检验常见的比如:电话,数字,邮箱,手机号等等
  4. c语言判断字符串的编码,C语言中判断一个char*是不是utf8编码
  5. php mysql网站统计源码_php统计器代码(在线人数据统计程序源码)
  6. Linux 目录简要结构认识
  7. 漫画算法python版下载_漫画算法:小灰的算法之旅 PDF 全格式完整版
  8. IOS软件工程师课程分享
  9. 黑盒、白盒和灰盒测试的区别
  10. Beta-VAE论文阅读笔记
  11. 大话设计模式之爱你一万年:大话设计模式之爱你一万年由来
  12. 51单片机码表c语言编程,分享自写码表单片机程序(共阴极数码管显示)
  13. 饿了么口碑发布“暖冬计划”PK美团,降低费率让利商家
  14. 程序员常用的经典算法和OJ网站
  15. lucene【转载】
  16. c++数据结构350、121
  17. python pip 运用及下载
  18. 每日一库之Go 强大而灵活的电子邮件库:email
  19. Node.js常见面试题
  20. Face Recognition Algorithms

热门文章

  1. Ubuntu 图形桌面死机重启(机器不重启)
  2. 网站的基本功能:RBAC
  3. explict关键字
  4. 【分析模板】excel or sas
  5. Ubuntu安装OpenTSDB
  6. php的socket,PHP Socket范例
  7. jpa 多层嵌套一对多_JPA一对多、多对多json序列化死循环问题解决
  8. linux移动文件_Linux基础
  9. 【图像处理】MATLAB:图像分割
  10. Flutter布局锦囊---完善信息页