JVM-运行时数据区

内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁。

线程共享区:
1.堆(垃圾回收95%):
A.在JVM启动时候就创建了,大小确定了,但可以调节大小。
B.可以处于物理上不连续的内存空间,但在逻辑上是视为连续的
C.所有线程共享java堆,在这里还可以划分线程私有的缓冲区TLAB(也就是java堆并不是都是共享的)
D.java7及之前内存逻辑上分为三部分:新生区(分为1个Eden区和2个Survivor区)+养老区+永久区(是方法区的逻辑实现)
java8及之后内存逻辑上分为三部分:新生区+养老区+元空间(是方法区的逻辑实现
E.-Xms20m(设置堆空间的初始内存大小) -Xmx20m(设置堆空间的最大内存大小) 开发中建议将堆初始内存大小和最大的堆 内存设置成一样的。
默认堆空间的大小:初始内存大小:物理电脑内存大小的/64 最大内存大小:物理电脑内存大小/4
F.查看设置的参数:方式一:jps查看进程/ jstat -gc 进程id 获取进程使用内存情况
方式二:-XX:+PrintGCDetails

堆:
1.新生代:
A.Eden区:几乎所有的Java对象都是在Eden区被new出来的(如果对象大于Eden区,则直接去老年代)满的时候会触发MinorGC
TLAB(Threas Loacl Allocation Buffer)是Eden区的 一小部分,为1%,这个区是为每个线程分配了一个私有缓存区域,避免线程安 全问题,JVM将TLAB作为内存分配首选
B.survivor0:(满的时候不会触发MinorGC,但会跟随Eden区垃圾回收的时候一起回收)
C.survivor1
设置参数:-XX:SurvivorRatio=8 Eden:Survivor0:Survivor1=8:1:1
2.老年代
设置参数:-XX:NewRatio=2 老年代占2,新生代占1 新生代占总的1/3
关于垃圾回收:频繁在新生区收集,很少在用老区收集,几乎不在永久区/元空间收集
在HotSpot VM的实现,按照回收区域分为两大类:一、部分收集 二、整堆收集
A.部分收集:不是完整收集整个Java堆的垃圾收集。其中又分为:
1.新生代收集(Minor GC/ Young GC):只是新生代的垃圾收集
2.老年代收集 (Major GC/ Old GC):只是老年代的垃圾收集(目前只有CMS GC会有单独收集老年代行为)
Major GC 会和 Full GC混淆使用,需要具体分辨是老年代回收还是整体回收
速度比yGC慢十倍
3.混合收集(Mixed GC):收集整个新生代以及部分老年代的垃圾收集(目前只有G1 GC会有这个行为)
B.整体收集(Full GC) : 收集整个Java堆和方法区的垃圾

2.方法区(jdk1.7之前称为永久代,jdk1.8后称为远空间,垃圾回

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值