当前位置: 首页 > news >正文

Log打印的:D/dalvikvm(4342): GC_FOR_ALLOC freed

转载自:http://www.cnblogs.com/wanqieddy/archive/2012/07/26/2610048.html

 

 

一般Java虚拟机要求支持verbosegc选项,输出详细的垃圾收集调试信息。dalvik虚拟机很安静的接受verbosegc选项,然后什么都不做。dalvik虚拟机使用自己的一套LOG机制来输出调试信息。 

如果在Linux下运行adb logcat命令,可以看到如下的输出: 
D/dalvikvm(  745): GC_CONCURRENT 
freed 199K, 53% free 3023K/6343K,external 0K/0K, paused 2ms+2ms 

其中D/dalvikvm表示由dalvikvm输出的调试信息,括号后的数字代表dalvikvm所在进程的pid。 

GC_CONCURRENT表示触发垃圾收集的原因,有以下几种:



    • GC_MALLOC, 内存分配失败时触发

 

    • GC_CONCURRENT,当分配的对象大小超过384K时触发

 

    • GC_EXPLICIT,对垃圾收集的显式调用(System.gc)

 

  • GC_EXTERNAL_ALLOC,外部内存分配失败时触发


freed 199K表示本次垃圾收集释放了199K的内存, 

53% free 3023K/6343K,其中6343K表示当前内存总量,3023K表示已用内存,53%表示可用内存占总内存的比例。 

external 0K/0K,表示可用外部内存/外部内存总量 
paused 
2ms+2ms,第一个时间值表示markrootset的时间,第二个时间值表示第二次mark的时间。如果触发原因不是GC_CONCURRENT,这一行为单个时间值,表示垃圾收集的耗时时间。 

2. 分析 

(1)虽然dalvikvm提供了一些调试信息,但是还缺乏一些关键信息,比如说mark和sweep的时间, 

分配内存失败时是因为分配多大的内存失败,还有对于SoftReference,WeakReference和PhantomReference的处理,每次垃圾收集处理了多少个这些引用等。 

(2)目前dalvik所有线程共享一个内存堆,这样在分配内存时必须在线程之间互斥,可以考虑为每个内存分配一个线程局部存储堆,一些小的内存分配可以直接从该堆中分配而无须互斥锁。 

(3)dalvik虚拟机中引入了concurrentmark,但是对于多核CPU,可以实现parrelmark,即可以使用多个线程同时运行mark阶段。 

这些都是目前dalvik虚拟机内存管理可以做出的改进。

转载于:https://www.cnblogs.com/chenlong-50954265/p/5735801.html

相关文章:

  • servlet的执行原理与生命周期
  • 数组增删改查及冒泡
  • TCP连接状态详解及TIME_WAIT过多的解决方法
  • zabbix架构
  • nginx: bind() to 0.0.0.0:8001 failed (13: Permission denied)
  • Linux统计文件行数
  • ACM竞赛:立方和问题
  • 初级运维(一)
  • 九曲黄河万里沙,浪淘风簸自天涯 — 正则表达式
  • 【PHP】函数explode和split的区别
  • IIS下配置PHP
  • OGNL表达式介绍
  • CSS——NO.8(代码简写)
  • Sqli-labs less 10
  • Crontab创建定时任务
  • php的引用
  • python3.6+scrapy+mysql 爬虫实战
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Sequelize 中文文档 v4 - Getting started - 入门
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 猴子数据域名防封接口降低小说被封的风险
  • 前端路由实现-history
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • ionic入门之数据绑定显示-1
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • ###C语言程序设计-----C语言学习(3)#
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • $().each和$.each的区别
  • ( 10 )MySQL中的外键
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (分布式缓存)Redis分片集群
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (七)理解angular中的module和injector,即依赖注入
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .NET HttpWebRequest、WebClient、HttpClient
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • .pyc文件是什么?
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • [ IO.File ] FileSystemWatcher
  • [20171101]rman to destination.txt
  • [ABC294Ex] K-Coloring
  • [android] 看博客学习hashCode()和equals()
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [bzoj2957]楼房重建
  • [Go WebSocket] 多房间的聊天室(三)自动清理无人房间
  • [IE6 only]关于Flash/Flex,返回数据产生流错误Error #2032的解决方式
  • [JS]数据类型
  • [js高手之路] dom常用API【appendChild,insertBefore,removeChild,replaceChild,cloneNode】详解与应用...
  • [LeetBook]【学习日记】获取子字符串 + 颠倒子字符串顺序
  • [LeetCode 687]最长同值路径