尽管向Java HashMap中添加了元素,但仍无法填充堆

时间:2020-10-09 16:54:18

标签: java android security out-of-memory heap-memory

我正在对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运行代码。

有什么我想念的吗?

编辑:我提供的一段代码应该使所有内容都更加清晰。告诉我这是否足够,或者应该包括更多内容。

0 个答案:

没有答案