如何解决尽管向Java HashMap中添加了元素,但仍无法填充堆
我正在对Java程序进行非常简单的攻击。假设有人制作了一个for循环,该循环计算一个值(从一个现有值)并将其存储在HashMap中。如此反复直到可以确定的某个值。
由于外部限制,我不确定我可以透露的细节量。无论如何,这是等效的代码:
/**
* key is a PublicKey object
* value is a byte[],a member of the class
* parameter is an int,representing the number of times
* a new value must be generated
*/
void doSomethingAfterComputingValues(int parameter) {
for (int i = N; i < parameter; i++) {
myMap.get(key).put(i,value); //the map is a map of maps
value = getNextValue();
}
N = parameter+1;
workWithCurrentValue();
这时,我多次执行此函数,每次都提供一个大的parameter
。
doSomethingAfterComputingValues(200000)
doSomethingAfterComputingValues(400000)
请注意,此操作只能执行一次。我之所以多次这样做,仅仅是因为过去对parameter - N
的最大大小有限制。
在这些行的外部未触及该地图,我检查了它实际上是否在侧面增加(内部地图实际上在这么做)。
我希望堆能在短时间内完全填满,从而返回java.lang.OutOfMemoryError。 但是,似乎并非如此。相反,即使表中有32M +个条目,堆的大小似乎也很静态。我看不出原因。
可能值得指出的是,我正在Android Studio上使用junit运行代码。
有什么我想念的吗?
编辑:我提供的一段代码应该使所有内容都更加清晰。告诉我这是否足够,或者应该包括更多内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。