1、内存管理简介

内存管理的职责为分配内存,回收内存。

没有自动内存管理的语言/平台容易发生错误。

典型的问题包括悬挂指针问题,一个指针引用了一个已经被回收的内存地址,导致程序的运行完全不可知。

另一个典型问题为内存泄露,内存已经分配,但是已经没有了指向该内存的指针,导致内存泄露。

程序员要花费大量时间在调试该类问题上。

2、GC简介

因此引入了Garbage Collector机制,由运行时环境来自动管理内存。

Garbage Collector解决了悬挂指针和内存泄露大部分的问题(不是全部)。

注意Garbage Collector(简称Collector)和Garbage Collection(简称GC)的区别。

3、Collector的职责:

分配内存。

保证有引用的内存不被释放。

回收没有指针引用的内存。

对象被引用称为活对象,对象没有被引用称为垃圾对象/垃圾/垃圾内存,找到垃圾对象并回收是Collector的一个主要工作,该过程称为GC。

Collector一般使用一个称为堆的内存池来进行内存的分配和回收。

一般的,当堆内存满或者达到一个阀值时,堆内存或者部分堆内存被GC。

4、好的Collector的特性

保证有引用的对象不被GC。

快速的回收内存垃圾。

在程序运行期间GC要高效,尽量少的影响程序运行。和大部分的计算机问题一样,这是一个关于空间,时间,效率平衡的问题。

避免内存碎片,内存碎片导致占用大量内存的大对象内存申请难以满足。可以采用Compaction技术避免内存碎片。Compaction技术:把活对象移向连续内存区的一端,回收其余的内存以便以后的分配。

良好的扩展性,内存分配和GC在多核机器上不应该成为性能瓶颈。

5、GC性能指标

Throughput: 程序时间(不包含GC时间)/总时间。

GC overhead: GC时间/总时间。

Pause time: GC运行时程序挂起时间。

Frequency of GC: GC频率。

Footprint: a measure of size, such as heap size。

Promptness:对象变为垃圾到该垃圾被回收后内存可用的时间。

依赖于不同的场景,对于GC的性能指标的关注点也不一样。

6、分代GC

分代GC把内存划分为多个代(内存区域),每个代存储不同年龄的对象。 常见的分为2代,young和old。

分配内存时,先从young代分配,如果young代已满,可以执行GC(可能导致对象提升),如果有空间,则分配,如果young代还是没有空间,可以对整个内存堆GC。

young代GC后还存活的对象可以提升到old代。

该机制基于以下观察事实:

1 大部分新分配的对象很快就没有引用了,变成垃圾。

2 很少有old代对象引用young代对象。

基于代内存存储对象的特性,对不同代的内存可以使用不同的GC算法。

Young代GC需要高效,快速,频繁的执行,关注点主要在速度上。

Old代由于增长缓慢,因此GC不频繁,但是其内存空间比较大,因此,需要更长时间才能执行完GC。关注点在内存空间利用率上。

7、Java Collector

Jvm的内存分为3代。Young, Old, Permanent。

大部分对象存储在Young代。

在Young代中经历数次GC存活的对象可以提升到Old代,大对象也可以直接分配到Old代。

Permanent代保存虚拟机自己的静态(refective)数据,例如类(class)和方法(method)对象。

Young代由一个Eden和2个survivor组成。大部分的对象的内存分配和回收在这里完成。

Survivor存储至少经过一次GC存活下来的对象,以增大该对象在提升至old代前被回收的机会。2个survivor中有一个为空。分别为From和to survivor。

当young代内存满,执行young代GC(minor GC)。

当old或permanent代内存满,执行full GC(major GC),所有代都被GC。一般先执行young GC,再执行old, permanent GC。

有时old代太满,以至于如果young GC先运行,则无法存储提升的对象。这时,Young GC不运行,old GC算法在整个堆上运行(CMS collector是个例外,该collector不能运行在young 代上)。

java gc原理_Java内存管理以及GC工作原理相关推荐

  1. java标志清理_JVM内存管理之GC算法精解(五分钟让你彻底明白标记/清除算法)...

    相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑话说前面哦,这篇文章应该能让各位彻底理解标记/清除算法,不过倘若各位猿友不能在五分钟内 ...

  2. java session原理_java web开发—session的工作原理总结

    session的工作原理总结 一.什么是session session是一次浏览器和服务器交互的会话,在jsp中,作为一个内置对象存在.我的理解,就是当用户打开网页时,程序会在浏览器中开辟一段空间来存 ...

  3. java过滤器的原理_Java 三大器之过滤器(Filter)工作原理

    Filter 简介 filter称为过滤器,可以对web 服务器管理的所有资源: Jsp, Servlet,静态图片文件或静态html文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访 ...

  4. Java 内存管理、JVM 工作原理与 Java 运行时系统

    Java 虚拟机规范中说明:所有的对象实例(all class instances)以及数组都要在堆上分配: the heap is the runtime data area from which ...

  5. 阅读micropython源码-内存管理组件GC

    阅读micropython源码-内存管理组件GC 苏勇,2021年8月 文章目录 阅读micropython源码-内存管理组件GC 初探micropython中的内存管理机制 分析指定的内存相关参数 ...

  6. Java虚拟机JVM的内存管理

    Java虚拟机JVM的内存管理 关键词 一.JVM整体架构 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 名称 作用 特征 配置参数 异常 程序计数器 ...

  7. 深入理解Java虚拟机|JVM02-自动内存管理

    深入理解Java虚拟机 第2章 Java内存区域与内存溢出异常 2.2运行时数据区域 2.1.1 程序计数器 2.1.2 Java虚拟机栈 变量的分类: 局部变量表 操作数栈 动态链接 方法返回地址 ...

  8. 加密机工作原理_端子机压力检测装置工作原理

    上期我们介绍了端子机压力管理装置的使用常识,这期我们介绍端子机压力管理装置的工作原理,端子机压接管理装置,有单通道压力监测和双通道压力监测二种,双通道压力监测装置,一般用于双头端子压接机上,一台主机可 ...

  9. 【原理】#01红外热成像仪的工作原理介绍

    红外热成像仪是电测中比较特殊的一种仪器设备,在温度测试领域有着广泛的应用. 红外热成像仪测温的原理是怎么样的?如何选择合适的热成像仪? 安泰小课堂将分两期视频为大家进行揭秘. 本期内容将重点讲解红外热 ...

最新文章

  1. 春愁(shunshu)—Mrs. Green Apple (歌词、汉译、罗马音)
  2. java源码之HashMap和HashTable的异同
  3. orika java_使用orika进行对象间Mapping
  4. zabbix的源码安装
  5. AI算法工程师的一些含泪经验
  6. ArcMAP 启动要素构造工具条
  7. SqlBulkCopy做大数据插入
  8. Atitit 云计算体系树.docx Atitit 云计算之道 attilax著 艾龙 著 serverless bomb 1. 什么才是云计算的根本特征.. 2 2. 云计算体系 2 3. “云
  9. js工具栏悬浮提示文字js特效
  10. android在ctwap下播放视频,退出播放,切换到ctnet下,视频一直缓冲无法播放
  11. c语言数组升序排列,数组输入各数之间用空格隔开,输出用空格隔开
  12. 图像处理之opencv图片几何变化操作大全
  13. 小船过河(贪心算法)
  14. 【二次开发】如何使用C#进行CATIA二次开发
  15. 「Java数据结构」手撕数组队列及环形数组队列。
  16. 微信小程序使用字体图标的方法iconfont
  17. LocalDate加减操作及比较大小
  18. layui框架KIT ADMIN后台管理系统模板
  19. 视频编码,各种参数~sps ,pps ,nalu ,frame ,silce ect....
  20. 煤矿无线广播系统解决方案

热门文章

  1. Windows下Git push or pull免输入密码设置
  2. Eclipse集成Tomcat:6个常见的”how to”问题
  3. 文件打包成zip类型文件
  4. 2018-2019-1 20165226 《信息安全系统设计基础》第8周学习总结
  5. 「镁客·请讲」快仓杨威:赋予仓库灵魂,让智能仓库系统自我进化和迭代
  6. 先给自己定个小目标,比如写个爬虫程序
  7. MySQL5.7 Replication主从复制配置教程
  8. Windows下一个curl使用
  9. linux下关于mysqldump备份的.sql导入数据库表数据丢失优化
  10. 邮件内容被分析抛售,你的企业邮箱安全吗?