Java(六) JVM内存分配策略和GC

本文详细介绍了Java虚拟机(JVM)的内存管理机制,包括堆空间的划分及其工作原理,如新生代与老年代的区别,以及永久代的用途。此外,还深入探讨了垃圾回收的不同类型和各种垃圾回收器的特点。

虚拟机内存

    JVM内存分为两个区:堆空间(Heap Space)和永久代(PermGenspace)。
    堆空间又分为老年代(Old) 和 新生代(New);

1.新生代:分为三个区: Eden Space、From Survivor和To Survivor。内存比(HotSpot){8:1:1}

1.1 java 虚拟机创建对象优先在Eden 区分配,但是大对象可以直接分配到老年代(比如很长字符串或者数组)

1.2 经过一轮Minor GC或者Young GC 后 Edon内 还存活的对象则会复制到 Survivor 区,Survivor区分为两个一个是From 和 To (可以设置>2),此时的内存对象年龄就是1岁(对象年龄计数器)。

1.3 From 或 To区满的时候会运行Minor GC,把存活的对象复制到剩下的区里面,然后 对象年龄会自增,(默认最大年龄是15)然后会被复制到 老年代
    注意:Survivor的两个区是对称的,没先后关系,所以同一个区中可能同时存在从Eden区复制过来的对象和从前一个Survivor区复制过来的对象,而复制到老年区的就只有从第一个Survivor区过去的对象。并且Survivor区总有一个是空的。

1.4 -XX:PretenureSizeThreshold参数 ,大于这个值的对象可以直接分配到老年代,避免Eden 区域 或两个Survivor区之间大量的内存复制。

2.老年代:在新生代长期存活的对象则会分配到老年代,简单点可以理解为老年代中存放的都是一些生命周期较长的对象。

2.1可以通过设置‘对象晋升到老年代的阈值’ -XX:MaxTenuringThreshold 参数。

3.永久代:用于存放静态类型数据,如 Java Class, Method 等

JVM内存
图片有点抽象,所有我用个简单的

垃圾回收机制(GarbageCollection 简称GC)

JVM回收种类
MinorGC 主要针对新生代空间(包括Eden和Survivor区域)回收内存。优点是执行时间短,执行频率高。

1.当JVM为一个新的对象在Eden里分配时,当Eden 已满时,则会分配的频率就越高,执行MinorGC 的频率就越频繁。
2.内存池被填满的时候,其中的内容全部会被复制,指针会从0开始跟踪空闲内存。Eden 和 Survivor 区进行了标记和复制操作,取代了经典的标记、扫描、压缩、清理操作。所以 Eden 和 Survivor 区不存在内存碎片。写指针总是停留在所使用内存池的顶部。
3.执行 Minor GC 操作时,不会影响到永久代。从永久代到年轻代的引用被当成 GC roots,从年轻代到永久代的引用在标记阶段被直接忽略掉。
4.质疑常规的认知,所有的 Minor GC 都会触发“全世界的暂停(stop-the-world)”,停止应用程序的线程。对于大部分应用程序,停顿导致的延迟都是可以忽略不计的。其中的真相就 是,大部分 Eden 区中的对象都能被认为是垃圾,永远也不会被复制到 Survivor 区或者老年代空间。如果正好相反,Eden 区大部分新生对象不符合 GC 条件,Minor GC 执行时暂停的时间将会长很多。

Major GC 针对老年代回收内存。

首先,许多 Major GC 是由 Minor GC 触发的,所以很多情况下将这两种 GC 分离是不太可能的。另一方面,许多现代垃圾收集机制会清理部分永久代空间,所以使用“cleaning”一词只是部分正确。

Full GC 对整个堆进行回收内存。优点是回收彻底,执行频率低,缺点是执行时间长(Full GC 需要对整个堆进行回收,并且也执行MinorGC和Major GC)

垃圾回收器种类

Serial old或Serial收集器

1.单线程
2.采用复制算法 (适合新生代 )
3.采用标记-整理算法(适合老年代)
4.不适合服务器使用

ParNew收集器

1.多线程
2.采用复制算法
3.java服务器端首选收集器

Parallel Scavenge收集器

1.多线程(并行)
2.采用复制算法
3.可控制垃圾回收的吞吐量
4.适用于非实时和用户交互的服务器、后台跑算法和跑Job的服务器。

Parallel Old收集器

1.多线程
2.采用标记-整理算法
3.可控制垃圾回收的吞吐量
4.适用于非实时和用户交互的服务器、后台跑算法和跑Job的服务器。(万一任务的时间间隔很短,这时候在GC,可能就有问题)

CMS(Consurrent Mark Sweep)收集器

1.多线程
2.采用标记-整理算法
3.回收停顿时间短
4.无法处理浮动垃圾

G1收集器

1.多线程(并行+并发)
2.采用标记-整理算法
3.分代采用不同算法进行收集
4.可预测停顿时间

学习Lnhohuangyekan低调小一time-info光光头去打酱油
这个内存模型很细vernonzheng
vm设置Mr__fang
vm参数学习sivyer123

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新星飞扬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值