der*_*itz 4 java profiling guava
我在我的gwt-webapp的服务器端使用guava的缓存.但要正确配置缓存我需要知道一些"遥测".首先,我需要知道一个缓存条目需要多少内存.到目前为止,我尝试了jconsole和visualvm.问题是,我不知道在哪里看.我查找了ConcurrencyHashMap及其条目,但找不到正确数量的实例.
那么分析一个(番石榴)缓存有什么好的,可能很简单的方法呢?
(目前我还没准备好支付一个工具来获得一个近似/平均大小的cach(条目))
讨论状态摘要:Aaron Digulla建议使用弱引用,让Java做管理内存的工作.但是在之前的一个问题中,由于使用弱引用的性能问题,人们建议"调整,监视,调整"缓存.
更新 确定我的问题可能是错误的 - 我不想知道有关缓存或其开销的一些事情.我想知道给定对象的实例有多大 - 配置缓存(在本例中为guava).我必须回答的第一个问题是:我可以获得内存中的所有实例(100%命中率)或者需要多少内存.如果可能,则不需要缓存配置.如果所有对象都会占用太多内存,我必须考虑配置.我希望有一个工具可以说明对象的平均内存占用情况.
正确的解决方案是调用该stats()方法.缓存使用的内存量几乎无关紧要,尤其是当您查看内存价格时.从投资回报率的角度来看:如果你花费超过几个小时来尝试内存优化你的缓存,安装另外4GB的RAM本来会更便宜.
另外,确定"条目的大小"并不容易.根据您放入缓存的值,单个条目的大小可能会有所不同.你可以尝试查找的情况下LocalCache.LocalLoadingCache(如果使用CacheLoader的build()),或LocalCache.LocalManualCache在一个堆转储.
这应该给你一个平均大小的实例,但它没有多大帮助:大小不是"递归",所以它不考虑引用.包含引用的问题在于停止.
例如,每个类都有对类加载器的引用.许多类加载器都会引用它们加载的所有类.如果包含它,那么实例的大小就会偏离.
YourKit非常擅长这种分析,但正如我上面所说,它通常不值得.
| 归档时间: |
|
| 查看次数: |
5090 次 |
| 最近记录: |