例如,假设我有一个应用程序可以读取包含大量数据行的CSV文件.我根据数据类型向用户提供行数的摘要,但我想确保我不读取太多数据行并导致OutOfMemoryErrors.每行都转换为一个对象.有没有一种简单的方法可以通过编程方式找出该对象的大小?是否有一个引用定义了大型基元类型和对象引用的大小VM?
现在,我的代码可以读取多达32,000行,但我还希望代码能够读取尽可能多的行,直到我使用了32MB的内存.也许这是一个不同的问题,但我仍然想知道.
我需要以编程方式确切地找出给定Java对象占用的内存量,包括它引用的对象所占用的内存.
我可以生成内存堆转储并使用工具分析结果.但是,生成堆转储需要花费大量时间,并且需要这样的工具来读取转储以生成报告.鉴于我可能需要多次这样做,如果我可以在我的项目中输入一些能够给我这个值"运行时"的代码,那么我的工作会更灵活.
我怎么能最好地实现这个目标?
ps:具体来说,我有一个javax.xml.transform.Templates类型的对象集合
是否有一种方法可以从Java中的序列化对象大小(大致)估计内存对象大小