Dúvida EP1

Dúvida EP1

por Artur Santos -
Número de respostas: 1

Olá, professor e monitores!

Tive a seguinte dúvida:

No enunciado, temos: "A deque containing n items must use at most 48n + 192 bytes of memory." e também "A randomized queue containing n items must use at most 48n + 192 bytes of memory. ". Qual seria a maneira ideal de garantir que a minhas classes Deque e RandomizedQueue estão seguindo essa exigência? Ou seja, qual seriam os passos para eu chegar na conclusão que, de fato, minhas classes estão corretas?

Obrigado!

Em resposta à Artur Santos

Re: Dúvida EP1

por José Coelho de Pina -

Olá Artur,

Obrigado por compartilhar a dúvida!

Qual seria a maneira ideal de garantir que a minhas classes Deque e RandomizedQueue estão seguindo essa exigência?

Acho que seria bem legal primeiro calcular na mão, como indicado em Memory usage do algs4, o número de bytes usados por cada objeto.

Em seguida, seria muito bacana testar esse número na prática. No unit test (main()) do objeto vocês poderiam calcular e imprimir o número de bytes da fórmula que vocês obtiveram na mão e ver o que o Java tem a dizer a respeito. Para saber o que o Java tem a dizer a respeito vocês poderiam usar a biblioteca classmexer para medir a memória usada por cada objeto.

Seria legal se quem fizesse esse unit test compartilhasse com os colegas aqui no forúm.


Classmexer is a simple Java instrumentation agent that provides some convenience calls for measuring the memory usage of Java objects from within an application. It currently provides the following static calls from the MemoryUtil class, inside the com.javamex.classmexer package:

  public static long memoryUsageOf(Object obj)
  public static long deepMemoryUsageOf(Object obj)
  public static long deepMemoryUsageOf(Object obj,
                                       VisibilityFilter referenceFilter)
  public static long deepMemoryUsageOfAll(Collection<? extends Object> objs)
  public static long deepMemoryUsageOfAll(Collection<? extends Object> objs,
                                         VisibilityFilter referenceFilter)