JMM梳理

JMM的体系架构图

图表

JMM
RunTimel 结构
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

JVM内存结构文字部分

主要存储对象是否线程共享Note
堆内存内存是JVM中最大的一块由年轻代和老年代组成,而年轻代内存又被分成三部分,Eden空间、From Survivor空间、To Survivor空间,默认情况下年轻代按照8:1:1的比例来分配Y
方法区Permgen 与 Metaspace 内容包含类定义,方法的Byte码,常量,静态变量以及 JVM 优化的一些其他占用。这里特别提到字符串常量,在程序中直接写的或者用 String.intern 加入的都会放在这一个区里。Y所谓方法区不是官方叫法。Java 7 之前这个叫做 Permgen,Java 8 开始变成 Metaspace。两者包含内容相同,但是有一个最大的区别,Permgen 是在 JVM 内存区内(但是并不属于Heap),受到 JVM 内存限制制约。Metaspace 属于原生内存在JVM之外,基本上机器有多少内存就可以大 -XX:MetasapceSize10m
栈又分为java虚拟机栈和本地方法栈主要用于方法的执行,管理程序运行的。 存储一些基本类型的值,对象的引用,方法等… java栈的组成元素–栈帧N栈里面是一定不会存在垃圾回收的问题的,只要线程一旦结束,该栈就Over了。生命周期和线程一致;
程序计数器每个线程都有一个程序计数器,是线程私有的。N该处是JMM中唯一不会有OOM

GC何时触发

首先注意手动System.GC() 要等OS调度,不是立刻发生。

Minor GC ,Full GC 触发条件

Minor GC

Minor GC指新生代GC,即发生在新生代(包括Eden区和Survivor区)的垃圾回收操作,当新生代无法为新生对象分配内存空间的时候,会触发Minor GC。因为新生代中大多数对象的生命周期都很短,所以发生Minor GC的频率很高,虽然它会触发stop-the-world,但是它的回收速度很快。

Minor GC触发条件:当Eden区满时,触发Minor GC。
Major GC

Major GC清理Tenured区,用于回收老年代,出现Major GC通常会出现至少一次Minor GC。

Full GC

Full GC是针对整个新生代、老生代、元空间(metaspace,java8以上版本取代perm gen)的全局范围的GC。Full GC不等于Major GC,也不等于Minor GC+Major GC,发生Full GC需要看使用了什么垃圾收集器组合,才能解释是什么样的垃圾回收。

Full GC触发条件:
  1. 调用System.gc时,系统建议执行Full GC,但是不必然执行
  2. 老年代空间不足
  • 通过Minor GC后进入老年代的平均大小大于老年代的可用内存
  • 由Eden区、From Space区向To Space区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小

3方法区(JDK8后Metaspace)空间不足

堆内存调优(初识)

  • JProfiler 实时运行,或者分析hprof文件。
    在这里插入图片描述
  • Eclipse MAT插件
  • JConsole
    在这里插入图片描述
  • JMap,jhat,JDK自带工具
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值