2.JVM的分代模型及对象流动

1.为什么JVM会被划分?

有些物体的生命周期很短。以下代码和插图:

1674699-6be3ae35bf1f6118.png

1-8.png

如上面的代码所示,main方法始终在运行,将始终创建UserUtil对象,但是当执行loadUsers时,它将被弹出。此时,未引用年轻代堆中新创建的对象。当它还不够时,它将被回收利用,因此它们的生存期很短。

有些物体必须在记忆中存在很长时间。以下代码和插图。

1674699-b1e876f7a4673d68.png

1-9.png

当这个对象成为长期生存的对象时,文章将被提升到老年。

2. JVM是如何划分的?

JVM主要有以下三代:

年轻一代

年轻一代的主要特征是生存期短,恢复频率高,回收率快。年轻一代也分为伊甸园区,Survivor1区和Survivor2区。三者的默认比率为8: 1: 1.

老一代

老一代物体的主要特点是生存期长,回收率低,回收率慢,并且使老年人回收的频率和频率最小化。

永久世代

见下文。

3.什么时候会触发新一代垃圾收集,在什么情况下会被回收?

新一代回收机会

当新一代伊甸园几乎已满(不足以存储新物体)时,它将触发新一代采矿(小型GC),将会有一个短暂的停止世界。随后的文章将详细介绍回收机制,使用何种算法和垃圾收集器,以及优缺点。

永久恢复时间

当做完全:

1.此类的所有实例对象都已从JAVA堆内存中回收。

2.加载此类的ClassLoader已被回收。

3.此类的类对象没有任何引用,例如未引用User.class。

4.如何在JVM中分配和流动对象?

在哪里创建新对象

新物体放置在年轻一代的伊甸园区域

如何处理大型物体

大型对象直接升级到老年,并且通过-XX: PretenureSizeThreshold=< size>直接在老年时创建。当大于设定的大小时。

你什么时候会从年轻一代升到老年

每次发生次要gc时,幸存对象年龄增加1.当当前一代对象的年龄达到设定大小时,设置参数-XX: MaxTenuringThreshold,并将其提升到老年。

5. JVM参数设置

参数

实施例

描述

-Xms

-Xms2048m

Java堆内存大小

-Xmx

-Xmx2048m

Java最大堆内存大小,通常与上面的设置相同

-Xmn

-Xmn1024m

年轻一代的内存大小,扣除年轻一代的堆内存后是老一代

-XX: PermSize

-XX: PermSize=256m

永久生成(方法区域)内存大小

-XX: MaxPermSize

-XX: MaxPermSize=256m

永久代最大内存大小

-Xss

-Xss1m

每个线程堆栈的内存大小

绘制更具体的图片,如下图:

1674699-30d0cb67d1b2ee61.jpg

1-7.jpg

96

Wenthkim

2019.08.04 17: 38

字数808

1.为什么JVM会被划分?

有些物体的生命周期很短。以下代码和插图:

1674699-6be3ae35bf1f6118.png

1-8.png

如上面的代码所示,main方法始终在运行,将始终创建UserUtil对象,但是当执行loadUsers时,它将被弹出。此时,未引用年轻代堆中新创建的对象。当它还不够时,它将被回收利用,因此它们的生存期很短。

有些物体必须在记忆中存在很长时间。以下代码和插图。

1674699-b1e876f7a4673d68.png

1-9.png

当这个对象成为长期生存的对象时,文章将被提升到老年。

2. JVM是如何划分的?

JVM主要有以下三代:

年轻一代

年轻一代的主要特征是生存期短,恢复频率高,回收率快。年轻一代也分为伊甸园区,Survivor1区和Survivor2区。三者的默认比率为8: 1: 1.

老一代

老一代物体的主要特点是生存期长,回收率低,回收率慢,并且使老年人回收的频率和频率最小化。

永久世代

见下文。

3.什么时候会触发新一代垃圾收集,在什么情况下会被回收?

新一代回收机会

当新一代伊甸园几乎已满(不足以存储新物体)时,它将触发新一代采矿(小型GC),将会有一个短暂的停止世界。随后的文章将详细介绍回收机制,使用何种算法和垃圾收集器,以及优缺点。

永久恢复时间

当做完全:

1.此类的所有实例对象都已从JAVA堆内存中回收。

2.加载此类的ClassLoader已被回收。

3.此类的类对象没有任何引用,例如未引用User.class。

4.如何在JVM中分配和流动对象?

在哪里创建新对象

新物体放置在年轻一代的伊甸园区域

如何处理大型物体

大型对象直接升级到老年,并且通过-XX: PretenureSizeThreshold=< size>直接在老年时创建。当大于设定的大小时。

你什么时候会从年轻一代升到老年

每次发生次要gc时,幸存对象年龄增加1.当当前一代对象的年龄达到设定大小时,设置参数-XX: MaxTenuringThreshold,并将其提升到老年。

5. JVM参数设置

参数

实施例

描述

-Xms

-Xms2048m

Java堆内存大小

-Xmx

-Xmx2048m

Java最大堆内存大小,通常与上面的设置相同

-Xmn

-Xmn1024m

年轻一代的内存大小,扣除年轻一代的堆内存后是老一代

-XX: PermSize

-XX: PermSize=256m

永久生成(方法区域)内存大小

-XX: MaxPermSize

-XX: MaxPermSize=256m

永久代最大内存大小

-Xss

-Xss1m

每个线程堆栈的内存大小

绘制更具体的图片,如下图:

1674699-30d0cb67d1b2ee61.jpg

1-7.jpg

1.为什么JVM会被划分?

有些物体的生命周期很短。以下代码和插图:

1674699-6be3ae35bf1f6118.png

1-8.png

如上面的代码所示,main方法始终在运行,将始终创建UserUtil对象,但是当执行loadUsers时,它将被弹出。此时,未引用年轻代堆中新创建的对象。当它还不够时,它将被回收利用,因此它们的生存期很短。

有些物体必须在记忆中存在很长时间。以下代码和插图。

1674699-b1e876f7a4673d68.png

1-9.png

当这个对象成为长期生存的对象时,文章将被提升到老年。

2. JVM是如何划分的?

JVM主要有以下三代:

年轻一代

年轻一代的主要特征是生存期短,恢复频率高,回收率快。年轻一代也分为伊甸园区,Survivor1区和Survivor2区。三者的默认比率为8: 1: 1.

老一代

老一代物体的主要特点是生存期长,回收率低,回收率慢,并且使老年人回收的频率和频率最小化。

永久世代

见下文。

3.什么时候会触发新一代垃圾收集,在什么情况下会被回收?

新一代回收机会

当新一代伊甸园几乎已满(不足以存储新物体)时,它将触发新一代采矿(小型GC),将会有一个短暂的停止世界。随后的文章将详细介绍回收机制,使用何种算法和垃圾收集器,以及优缺点。

永久恢复时间

当做完全:

1.此类的所有实例对象都已从JAVA堆内存中回收。

2.加载此类的ClassLoader已被回收。

3.此类的类对象没有任何引用,例如未引用User.class。

4.如何在JVM中分配和流动对象?

在哪里创建新对象

新物体放置在年轻一代的伊甸园区域

如何处理大型物体

大型对象直接升级到老年,并且通过-XX: PretenureSizeThreshold=< size>直接在老年时创建。当大于设定的大小时。

你什么时候会从年轻一代升到老年

每次发生次要gc时,幸存对象年龄增加1.当当前一代对象的年龄达到设定大小时,设置参数-XX: MaxTenuringThreshold,并将其提升到老年。

5. JVM参数设置

参数

实施例

描述

-Xms

-Xms2048m

Java堆内存大小

-Xmx

-Xmx2048m

Java最大堆内存大小,通常与上面的设置相同

-Xmn

-Xmn1024m

年轻一代的内存大小,扣除年轻一代的堆内存后是老一代

-XX: PermSize

-XX: PermSize=256m

永久生成(方法区域)内存大小

-XX: MaxPermSize

-XX: MaxPermSize=256m

永久代最大内存大小

-Xss

-Xss1m

每个线程堆栈的内存大小

绘制更具体的图片,如下图:

1674699-30d0cb67d1b2ee61.jpg

1-7.jpg