我需要以编程方式确切地找出给定Java对象占用的内存量,包括它引用的对象所占用的内存.
我可以生成内存堆转储并使用工具分析结果.但是,生成堆转储需要花费大量时间,并且需要这样的工具来读取转储以生成报告.鉴于我可能需要多次这样做,如果我可以在我的项目中输入一些能够给我这个值"运行时"的代码,那么我的工作会更灵活.
我怎么能最好地实现这个目标?
ps:具体来说,我有一个javax.xml.transform.Templates类型的对象集合
我想知道是否存在任何开源框架可以帮助我将以下类型的功能包含在我的网站中:
1)如果我正在查看特定产品,我想看看其他产品可能对我有意思.该信息可以通过计算例如我所在地区的其他人(或我的简档的任何其他特征)除了我正在查看的产品之外还可以推断出来.有点像Amazon.com的功能.
2)根据人们的个人资料,网站上的互动(例如,通过评论彼此的帖子)推断人与人之间的关系,在最常用的领域使用网站,共同购买的产品等.
我不是在寻找一个具有此功能的开源网站,而是一个类似于对象模型的东西,我可以在其中提供有关用户及其对网站的使用的信息,包括关于关系的规则,然后在稍后的位置询问(1)中描述的问题)和(2)以上.
任何指向白皮书的指南/关于执行此操作的最佳方法的一般信息,或任何相关链接也将非常有用.
我有大量的名称 - 值对(大约100k),我需要存储在某种缓存(比如一个哈希映射)中,其中值是一个平均大小约为30k字节的字符串.
现在我知道一个事实,即大量的值具有完全相同的字符串数据.为了避免必须多次分配相同的字符串数据,我想以某种方式重用先前分配的字符串,从而消耗更少的内存.此外,这需要相当快.即,逐个扫描所有先前分配的值不是一种选择.
关于如何解决这个问题的任何建议?
如果用户在我的网站上查看文档(例如代表某些机密信息的pdf文件),我是否可以阻止他们在本地保存文档?
尝试使用Lucene进行搜索时,我看到以下错误.(版本1.4.3).关于为什么我能看到这个以及如何解决它的任何想法?
Caused by: java.io.IOException: read past EOF
at org.apache.lucene.store.InputStream.refill(InputStream.java:154)
at org.apache.lucene.store.InputStream.readByte(InputStream.java:43)
at org.apache.lucene.store.InputStream.readVInt(InputStream.java:83)
at org.apache.lucene.index.FieldInfos.read(FieldInfos.java:195)
at org.apache.lucene.index.FieldInfos.<init>(FieldInfos.java:55)
at org.apache.lucene.index.SegmentReader.initialize(SegmentReader.java:109)
at org.apache.lucene.index.SegmentReader.<init>(SegmentReader.java:89)
at org.apache.lucene.index.IndexReader$1.doBody(IndexReader.java:118)
at org.apache.lucene.store.Lock$With.run(Lock.java:109)
at org.apache.lucene.index.IndexReader.open(IndexReader.java:111)
at org.apache.lucene.index.IndexReader.open(IndexReader.java:106)
at org.apache.lucene.search.IndexSearcher.<init>(IndexSearcher.java:43)
Run Code Online (Sandbox Code Playgroud)
在同样的环境中,我也看到以下错误:
Caused by: java.io.IOException: Lock obtain timed out:
Lock@/tmp/lucene-3ec31395c8e06a56e2939f1fdda16c67-write.lock
at org.apache.lucene.store.Lock.obtain(Lock.java:58)
at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:223)
at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:213)
Run Code Online (Sandbox Code Playgroud)
相同的代码在测试环境中工作,但不在生产中.无法识别两种环境之间的任何明显差异.