【GC概述以及查看堆内存使用】Java内存管理和GC学习
内存划分
1。JAVA内存主要划分为方法栈、方法区、堆。
2。方法栈上内存会自动释放;
3。方法区上主要加载了类的元信息、静态变量、常量。改区域又称为持久代(Perm Gen),默认是最小16M,最大64M。配置参数 -XX:PermSize=16m -XX:MaxPermSize=64m;
4。堆是按分代进行管理,主要分为新生代(New Gen)和旧生代(Old Gen或Tenuring Gen)。
1)新生代又分为Eden Space,S0,S1三块区域。
2)Eden是new出来对象的出生地(原来对象是亚当和夏娃生的啊?)。
3)S0和S1是2块大小相同的区域,合起来又称为Survivor Space,这2块区域是进行垃圾回收时生存对象的集散地,每次回收是总是从一个区域移动到另一个区域,下次又从另一个区域移动到这个区域。
4)堆大小默认值:最小1/64物理内存,最大1/4物理内存,32位机器最大为2G
5)配置参数:-Xms64M(最小) -Xmx64M(最大) -Xmn16M(新生代大小)
GC
参考:http://www.cnblogs.com/qlqwjy/p/7953458.html
1。GC分为新生代GC和旧生代GC,新生代GC又称Minor GC。当旧生代GC触发时,也会触发新生代GC,此过程称为Full GC;
1。GC算法主要有复制(Copying)、标记-清除(Mark-Sweep)、标记-压缩(Mark-Compact);
2。Minor GC采用的算法是复制(Copying),其主要的三种方式为:
1)串行GC(Serial GC) 暂停应用,单线程方式进行,配置参数-XX:+UserSerialGC
2)并行回收GC(Parallel Scavenge) 暂停应用,多线程方式进行,配置方式-XX:UseParallelGC
3)并行GC(ParNew) 配合旧生代CMS GC使用,CMS GC是与应用并发,多线程进行的,配置方式-XX:UseParNewGC
3。旧生代GC的算法主要采用标志-清除(Mark-Sweep)、标志-压缩(Mark-Compact),其主要的三种方式为:
1)串行GC 暂停应用,单线程方式进行,算法为Mark-Sweep-Compact,配置参数-XX:+UserSerialGC;
2)并行GC 暂停应用,多线程方式进行,算法为Mark-Compact,配置方式-XX:UseParallelGC;
3)并发CMS(Concurrent Mark-Sweep GC) 与应用并发多线程进行,算法为Mark-Sweep,配置参数-XX:+UseConcMarkSweepGC;
查看工具
0. jps 查看Java进程信息
1.JMap 命令jmap -heap [PID] ,统计java内存使用情况,Jdk自带;
2.JStat 命令jstat -gcutil [PID] 5s,没5秒钟输出java内存使用率以及GC的次数和时间,Jdk自带
3.jstack 命令jstack -l pid ,输出进程的堆栈信息,jdk自带
参考:https://my.oschina.net/feichexia/blog/196575
http://blog.csdn.net/imxiangzi/article/details/47123849
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了