Java内存和垃圾回收
来源:互联网 发布:韩国直播软件app 编辑:程序博客网 时间:2024/05/16 14:19
概念
Java的堆内存分为三部分
- 新生代(New Generation) – 新创建的对象(又分为S0,S1和Eden)
- 旧生代 (Old Generation) – 经过多次垃圾回收没有被回收的对象或者大对象
- 持久代 (Permanent Generation) – JVM使用的内存,包含类信息等
Java的垃圾回收分为两种
- Minor GC
回收新生代中的对象,代价低,速度快
- Full GC
回收旧生代和持久代中的对象,代价高,速度慢
配置
通过指定Java命令行参数可以改变内存和垃圾回收的行为。最常见的有
-Xmx1024m: 指定最大的堆大小为1024m
-Xms1024m: 指定初始化堆大小为1024m,设为跟最大的堆大小,可避免JVM动态调整
-XX:NewRatio=3: 指定新生代和旧生代的比例为1:3,比例越大,新生代越小,Minor GC调用越频繁,Full GC调用越不频繁。
-verbose:gc : 在控制台打印GC信息
-XX:+PrintGCDetails:显示更详细的GC信息
-Xloggc:gc.log :输出gc LOG到文件
工具
实时分析
图形界面:JVisualVM+VisualGC插件
JVisualVM是Java自带的工具,可以显示heap的变化趋势,更好的是通过visualgc这个插件来显示各个代的具体变化趋势。
命令行:jstat
jstat也是Java自带的一个分析工具。可以使用命令jstat –gcutil 来显示。
S0/S1/E/O/P-分别代表SO/S1/Eden/旧生代/永久代的大小
YGC/YGCT-代表minor gc的次数和时间
FGC/FGCT-代表full gc的次数和时间
GCT-代表GC的时间
tip:Pid可以通过jps命令来查到
Dump分析
Dump分析适用于那些需要详细了解heap的分配情况,可以具体到哪个类
jmap+jhat/Eclipse Memory Analyzer
jmap用于dump heap信息到文件
jmap -dump:format=b,file=filename
jhat用于分析dump文件
jhat
默认启动在7000端口,可以用浏览器打开localhost:7000
Eclipse Memory Analyzer是Eclipse的一个插件,相当强大,推荐使用,可以帮你做leak analysis,注意的是它默认排除掉unreachable objects
编程
有时候,我们希望在自己的程序中检测当前memory的使用情况
堆检测
MemoryMXBean aMemoryMXBean=ManagementFactory.getMemoryMXBean();
MemoryUsage heapMemoryUsage=aMemoryMXBean.getHeapMemoryUsage();
usedHeapMemory = heapMemoryUsage.getUsed();
maxHeapMemory = heapMemoryUsage.getMax();
内存检测
freeMemory= Runtime.getRuntime().freeMemory();
totalMemory=Runtime.getRuntime().totalMemory();
maxMemory=Runtime.getRuntime().maxMemory();
- Java内存和垃圾回收
- JAVA的内存和垃圾回收
- Java的内存和垃圾回收机制
- java垃圾回收和内存泄露
- Java内存分配和垃圾回收
- java垃圾回收和堆内存布局
- Java内存管理和垃圾回收
- java内存管理和垃圾回收机制
- java垃圾回收机制和内存泄露
- java内存管理和垃圾回收
- Java 内存管理和垃圾回收机制
- Java内存管理和垃圾回收
- Java内存模型和垃圾回收
- Java内存垃圾回收
- JAVA内存垃圾回收机制
- Java内存管理 垃圾回收
- JAVA内存垃圾回收机制
- JAVA内存垃圾回收机制
- 记一次foxmailQQ邮箱创建失败到解决方法
- VS2015 使用IIS Express 支持非localhost访问
- Samba
- Json数据格式
- Android 开源项目及库
- Java内存和垃圾回收
- ImageView的Scaletype
- 小画板demodemo
- view上事件的处理——代理的运用
- 225. Implement Stack using Queues
- 每天学一点MATLAB函数——文件编程函数
- windows nginx tomcat redis 集群
- 问题解决---未能将网站配置为使用ASP.NET4.0
- 关于字节数组的流对象介绍和案例分析