活跃数据应用程序长期稳定运行时存活对象再堆中占用内存大小。
取得日志可能不准确,需要多次取得取得平均值
分配比例如下:
总空间:3-4n
新生代:1-1.5n
老年代:2-3n
永久代:1.2-1.5n
运行时最大内存:
RunTime.getRuntime().maxMemory/(double)1024/1024
运行时内存:
RunTime.getRuntime().totalMemory/(double)1024/1024
1、通过 java -Xmm2G -Xms2G 调整运行时内存
通过命令可打印内存情况
jVisualVm可视化查看JVM进程相关信息
2、在eclipse根目录下的eclipse.ini配置文件中添加以下参数:
-verbose:gc (开启打印垃圾回收日志)
-Xloggc:eclipse_gc.log (设置垃圾回收日志打印的文件,文件名称可以自定义)
XX:+PrintGCTimeStamps (打印垃圾回收时间信息时的时间格式)
-XX:+PrintGCDetails (打印垃圾回收详情)
添加完以上参数后当启动Eclipse后就能在Eclipse根目录看到一个eclipse_gc.log的gc日志文件
3、设置eclipse初始堆、非堆内存大小以及年轻代
-Xms50m –Xmx200m -XX:PermSize=30m -XX:MaxPermSize=60m
4、添加JVM监控参数
-Djava.rmi.server.hostname=127.0.0.1
-Dcom.sun.management.jmxremote.port=6688
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
GC:判断算法
1、引用计数法(查看对象引用次数):
计数为0没有被引用可以被回收,如图B不能被回收
2 、可达性分析(根对象是否有引用):
关联的引用也可以,如图B不能被回收,不可达的并不是一定会回收
可以作为GCRoot的对象,不能被GC
1 虚拟机栈中局部变量表应用对象中不能被删除
2 方法区中:常量静态变量引用的对象不能被删除
3 本地方法栈中JNI引用对象