JVM -GC&内存

活跃数据应用程序长期稳定运行时存活对象再堆中占用内存大小。
取得日志可能不准确,需要多次取得取得平均值
分配比例如下:
     总空间: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引用对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值