JAVA head 分三个区域:

1、新生代:

1).Eden(伊甸园)区是新对象分配内存的地方,由于堆是所有线程共享的,因此在堆上分配内存需要加锁。而Sun JDK为提升效率,会为每个新建的线程在Eden上分配一块独立的空间由该线程独享,这块空间称为TLAB(Thread Local Allocation Buffer)。在TLAB上分配内存不需要加锁,因此JVM在给线程中的对象分配内存时会尽量在TLAB上分配。如果对象过大或TLAB用完,则仍然在堆上进行分配。如果Eden区内存也用完了,则会进行一次Minor GC(young GC)。

2).Survival from to

Survival区有两块,一块称为from区,另一块为to区,这两个区是相对的,在发生一次Minor GC后,from区就会和to区互换。在发生Minor GC时,Eden区和Survivalfrom区会把一些仍然存活的对象复制进Survival to区,并清除内存。Survival to区会把一些存活得足够旧的对象移至年老代。

2、老年代:

年老代里存放的都是存活时间较久的,大小较大的对象,因此年老代使用标记整理算法。当年老代容量满的时候,会触发一次Major GC(full GC),回收年老代和年轻代中不再被使用的对象资源。

3、 永久代

在JDK8之前的HotSpot虚拟机中,类的这些“永久的”数据存放在一个叫做永久代的区域。永久代一段连续的内存空间,我们在JVM启动之前可以通过设置-XX:MaxPermSize的值来控制永久代的大小,32位机器默认的永久代的大小为64M,64位的机器则为85M。永久代的垃圾回收和老年代的垃圾回收是绑定的,一旦其中一个区域被占满,这两个区都要进行垃圾回收。但是有一个明显的问题,由于我们可以通过‑XX:MaxPermSize 设置永久代的大小,一旦类的元数据超过了设定的大小,程序就会耗尽内存,并出现内存溢出错误OutOfMemoryError(OOM)。这里值得注意的是,JDK8移除了永久代。

image.png

一个对象实例化时 先去看伊甸园有没有足够的空间

如果有 不进行垃圾回收 ,对象直接在伊甸园存储.

如果伊甸园内存已满,会进行一次minor gc

然后再进行判断伊甸园中的内存是否足够

如果不足 则去看存活区的内存是否足够.

如果内存足够,把伊甸园部分活跃对象保存在存活区,然后把对象保存在伊甸园.

如果内存不足,向老年代发送请求,查询老年代的内存是否足够

如果老年代内存足够,将部分存活区的活跃对象存入老年代.然后把伊甸园的活跃对象放入存活区,对象依旧保存在伊甸园.

如果老年代内存不足,会进行一次full gc,之后老年代会再进行判断 内存是否足够,如果足够 同上.如果不足 会抛OutOfMemoryError.

go java 垃圾回收_JAVA什么时候执行垃圾回收以及回收流程-Go语言中文社区相关推荐

  1. java+classpath的理解_Java配置path和classpath的含义详解-Go语言中文社区

    ​ 新入门java的同学经常会问我path和classpath是什么意思,尤其会问classpath是什么意思,为什么只配置一个.就可以.下面以windows系统为例,做一个系统讲解.包含超详细实验数 ...

  2. java读取 info.plist源码_Java 解析 IPA 文件,读取 Info.plist 信息-Go语言中文社区

    在做移动MDM功能的时候,就遇到了这样一个问题,当用户上传IPA文件时,我如何知道这个IPA文件的相关信息呢?IPA文件有一个很重要的文件Info.plist 就类似于Android程序的Manife ...

  3. java生成word文档 图片_java生成带有图片的word的文档-Go语言中文社区

    生成带有图片的word的文档 @RequestMapping(params ="getWordByDate",produces = "text/html;charset= ...

  4. java.强引用软引用,java 强引用、软引用、弱引用、虚引用-Go语言中文社区

    这篇文章的一个评论很有特点: 强引用: (一)强引用就是在程序代码之中普遍存在的,类似Object obj = new Object()这类的引用, 只要强引用还存在,垃圾收集器永远不会回收掉被引用的 ...

  5. go mysql 查询语句_01 MySQL-初识MySQL-查询语句的执行流程-Go语言中文社区

    MySQL的基础架构 我们通过一条查询语句来看看MySQL是如何执行的,同时通过这条语句的执行,了解MySQL的整体架构体系.mysql> select * from T where ID=1: ...

  6. java swing多人聊天室_使用java swing和socket编程实现简单的多人聊天室-Go语言中文社区...

    完成效果如下 客户端: 服务器端: 客户端功能: 输入服务器对应的端口,IP号,用户名(昵称),可以互相发送消息 服务器端功能: 输入端口号,启动,可以向所有客户端发送消息,IP地址自动获取. 下面是 ...

  7. java pdf stamper_java 通过pdf模板,生成PDF,并下载到本地-Go语言中文社区

    注意:本例子是从向模板定义的变量赋值,而不是从无到有的来生成pdf 直接就能用 maven依赖: com.lowagie itext 4.2.1 工具类: package com.upincar.pd ...

  8. java封装264成flv,将H.264封装为FLV格式-Go语言中文社区

    本文将介绍如何将H.264封装成flv格式. 在看本文之间,建议先看一看下面两篇文章: 首先说一说构建一个FLV文件需要什么? FLV Header + FLv script tag + FLV Vi ...

  9. java加快内存回收_java内存管理之垃圾回收及JVM调优

    GC(garbage Collector 垃圾收集器) 作用:a.内存的动态分配:b.垃圾回收 注:Java所承诺的自动内存管理主要是针对对象内存的回收和对象内存的分配. 一.垃圾标记 程序计数器.J ...

  10. java gc机制新区域旧屋_Java 内存回收机制——GC机制-Go语言中文社区

    一.Java GC 概念说明 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾 ...

最新文章

  1. 稍等片刻 正在提取文件_三亚种子罐市场价,中药提取浓缩设备的价格
  2. 风变编程的python课程怎么样-风变编程的Python这么火,零基础可以自学吗?
  3. python web-python web入坑指南
  4. 震惊!!用图形界面装B居然只需要短短110行代码!!
  5. association in CDS view is converted to LEFT OUTER MANY TO ONE JOIN in the runtime
  6. 《ASP.NET Core 微服务实战》译者序
  7. 课时109.外边距合并现象(掌握)
  8. 软件有效期如何实现_足疗洗浴收银软件如何实现跨店管理?
  9. 欺骗的艺术——谈谈社会工程学
  10. 压力测试 - Apache JMeter使用教程
  11. 闲置eSATA接口影响Windows7启动速度案例分析
  12. 【comsol快速入门】
  13. 吸烟 打电话 行为 图片 数据集
  14. 一次成功编译Bilibili安卓播放器
  15. 数据结构期末作业思路分享——库存管理小程序(云数据库)
  16. 【财富空间】其实,硅谷最会玩的是“失败”
  17. 微信小程序使用canvas绘制分享海报
  18. 统一文档服务器,统一标准化文档oraclei服务器安装基础手册.doc
  19. 考研数学之多元函数微积分
  20. jQuery中ajax跨域请求

热门文章

  1. 单链表以及双向链表的操作
  2. 大数据学习-----排错记录
  3. BZOJ3376: [Usaco2004 Open]Cube Stacking 方块游戏
  4. 自己实现LinkedList类
  5. 微信手机开发 ios android 您没有APP支付权限
  6. js闭包,这个算是比较通俗的了(转)
  7. Arcgis Android API开发之离线地图
  8. Python自动关机GUI程序
  9. 智能优化算法:学生心理学优化算法 -附代码
  10. 【LeetCode】【数组】题号:*442,重复元素出现两次