没有合适的资源?快使用搜索试试~ 我知道了~
03-VIP-JVM内存分配机制与垃圾回收算法1
需积分: 0 1 下载量 153 浏览量
2022-08-03
16:40:45
上传
评论
收藏 830KB PDF 举报
温馨提示
试读
13页
1.1 对象优先在Eden区分配 1.2 大对象直接进入老年代 1.3 长期存活的对象将进入老年代
资源详情
资源评论
资源推荐
1.JVM内存分配与回收
1.1对象优先在Eden区分配
大多数情况下,对象在新生代中Eden区分配。当Eden区没有足够空间进行分
配时,虚拟机将发起一次MinorGC。我们来进行实际测试一下。
在测试之前我们先来看看MinorGC和FullGC有什么不同呢?
MinorGC/YoungGC:指发生新生代的的垃圾收集动作,Minor
GC非常频繁,回收速度一般也比较快。
MajorGC/FullGC:一般会回收老年代,年轻代,方法区的垃圾,
MajorGC的速度一般会比MinorGC的慢10倍以上。
示例:
1 //添加运行JVM参数:‐XX:+PrintGCDetails
2 publicclassGCTest{
3 publicstaticvoidmain(String[]args)throwsInterruptedException{
4 byte[]allocation1,allocation2/*,allocation3,allocation4,allocation
5,allocation6*/;
5 allocation1=newbyte[60000*1024];
6
7 //allocation2=newbyte[8000*1024];
8
9 /*allocation3=newbyte[1000*1024];
10 allocation4=newbyte[1000*1024];
11 allocation5=newbyte[1000*1024];
12 allocation6=newbyte[1000*1024];*/
13 }
14 }
15
16 运行结果:
17 Heap
18 PSYoungGentotal76288K,used65536K[0x000000076b400000,0x00000007709
00000,0x00000007c0000000)
19 edenspace65536K,100%used[0x000000076b400000,0x000000076f400000,0x0
00000076f400000)
20 fromspace10752K,0%used[0x000000076fe80000,0x000000076fe80000,0x000
0000770900000)
21 tospace10752K,0%used[0x000000076f400000,0x000000076f400000,0x00000
0076fe80000)
22 ParOldGentotal175104K,used0K[0x00000006c1c00000,0x00000006cc70000
0,0x000000076b400000)
23 objectspace175104K,0%used[0x00000006c1c00000,0x00000006c1c00000,0x
00000006cc700000)
24 Metaspaceused3342K,capacity4496K,committed4864K,reserved
1056768K
25 classspaceused361K,capacity388K,committed512K,reserved1048576K
我们可以看出eden区内存几乎已经被分配完全(即使程序什么也不做,新生代
也会使用至少几M内存)。假如我们再为allocation2分配内存会出现什么情况
呢?
1 //添加运行JVM参数:‐XX:+PrintGCDetails
2 publicclassGCTest{
3 publicstaticvoidmain(String[]args)throwsInterruptedException{
4 byte[]allocation1,allocation2/*,allocation3,allocation4,allocation
5,allocation6*/;
5 allocation1=newbyte[60000*1024];
6
7 allocation2=newbyte[8000*1024];
8
9 /*allocation3=newbyte[1000*1024];
10 allocation4=newbyte[1000*1024];
11 allocation5=newbyte[1000*1024];
12 allocation6=newbyte[1000*1024];*/
13 }
14 }
15
16 运行结果:
17 [GC(AllocationFailure)[PSYoungGen:65253K‐>936K(76288K)]65253K‐>6094
4K(251392K),0.0279083secs][Times:user=0.13sys=0.02,real=0.03secs]
18 Heap
19 PSYoungGentotal76288K,used9591K[0x000000076b400000,0x000000077490
0000,0x00000007c0000000)
20 edenspace65536K,13%used[0x000000076b400000,0x000000076bc73ef8,0x00
0000076f400000)
21 fromspace10752K,8%used[0x000000076f400000,0x000000076f4ea020,0x000
000076fe80000)
22 tospace10752K,0%used[0x0000000773e80000,0x0000000773e80000,0x00000
00774900000)
23 ParOldGentotal175104K,used60008K[0x00000006c1c00000,0x00000006cc7
00000,0x000000076b400000)
24 objectspace175104K,34%used[0x00000006c1c00000,0x00000006c569a010,0
x00000006cc700000)
25 Metaspaceused3342K,capacity4496K,committed4864K,reserved
1056768K
26 classspaceused361K,capacity388K,committed512K,reserved1048576K
简单解释一下为什么会出现这种情况:因为给allocation2分配内存的时候eden
区内存几乎已经被分配完了,我们刚刚讲了当Eden区没有足够空间进行分配
时,虚拟机将发起一次MinorGC,GC期间虚拟机又发现allocation1无法存入
Survior空间,所以只好把新生代的对象提前转移到老年代中去,老年代上的空
间足够存放allocation1,所以不会出现FullGC。执行MinorGC后,后面分配
的对象如果能够存在eden区的话,还是会在eden区分配内存。可以执行如下代
码验证:
1 publicclassGCTest{
2 publicstaticvoidmain(String[]args)throwsInterruptedException{
3 byte[]allocation1,allocation2,allocation3,allocation4,allocation5,
allocation6;
4 allocation1=newbyte[60000*1024];
5
6 allocation2=newbyte[8000*1024];
7
8 allocation3=newbyte[1000*1024];
9 allocation4=newbyte[1000*1024];
10 allocation5=newbyte[1000*1024];
11 allocation6=newbyte[1000*1024];
12 }
13 }
14
15 运行结果:
16 [GC(AllocationFailure)[PSYoungGen:65253K‐>952K(76288K)]65253K‐>6096
0K(251392K),0.0311467secs][Times:user=0.08sys=0.02,real=0.03secs]
17 Heap
18 PSYoungGentotal76288K,used13878K[0x000000076b400000,0x00000007749
00000,0x00000007c0000000)
19 edenspace65536K,19%used[0x000000076b400000,0x000000076c09fb68,0x00
0000076f400000)
20 fromspace10752K,8%used[0x000000076f400000,0x000000076f4ee030,0x000
000076fe80000)
剩余12页未读,继续阅读
莉雯Liwen
- 粉丝: 22
- 资源: 306
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0