例如,假设我有一个应用程序可以读取包含大量数据行的CSV文件.我根据数据类型向用户提供行数的摘要,但我想确保我不读取太多数据行并导致OutOfMemoryErrors.每行都转换为一个对象.有没有一种简单的方法可以通过编程方式找出该对象的大小?是否有一个引用定义了大型基元类型和对象引用的大小VM?
现在,我的代码可以读取多达32,000行,但我还希望代码能够读取尽可能多的行,直到我使用了32MB的内存.也许这是一个不同的问题,但我仍然想知道.
问题很简单,Androids Java VM中的引用消耗的大小是多少?
我的意思是:
如果我们有
String str = "Watever";
Run Code Online (Sandbox Code Playgroud)
我需要什么str,而不是"Watever".- "Watever"保存在指针(或引用)str所指向的位置.
也,
如果我们有
String str = null;
Run Code Online (Sandbox Code Playgroud)
它消耗了多少内存?它是否与另一个相同str?
现在,如果我们有:
Object obj[] = new object[2];
Run Code Online (Sandbox Code Playgroud)
需要多少obj消费,多少钱obj[1]和obj[2]消费?
queston的原因如下:(如果有人可以推荐一些东西).
我正在开发一款可以保存从互联网下载的许多照片的应用程序.我开始将这些图片存储在"银行"上(在图片列表中一致).
当在图库中显示这些图片时,我曾经在列表中搜索图片(SLOW)然后,如果那时图片不存在,我曾经在下载图片之前显示时间下载图像.
由于这发生在UI线程上,应用程序变得非常慢,所以我考虑在银行而不是我的列表上实现哈希表.
正如我之前解释的那样,这种搜索发生在UI线程中(我不能改变它).因此,如果冲突开始减慢线程,冲突就会成为问题.
我已经读过"为了平衡时间和空间效率,哈希表应该是大约半满",但这使得冲突在一半的时间内发生(对于UI线程不实用).这让我想到了一个非常长的哈希表(与保存的图片数量相比)并使用更多的RAM(具有更少的免费VMHeap).
在确定哈希表的大小之前,我想知道它将消耗多少内存以便不进行扩散.
我知道哈希表的大小可能与图片可能消耗的内存相比非常小,但我想确保我没有消耗更多的内存而不是必需的内存.
在问这个问题之前,我在其他地方之间搜索过
(是的,我知道其中两个地方相互矛盾,这就是问题的部分原因).
如果您因任何原因不理解某些内容或想了解更多信息,请发表评论,我会尽快回复.
比你多得多.