  Performance and scalability requirements have a fundamental role in most
large-scale software applications. To satisfy such requirements, caching is
often used at various levels and infrastructure layers. Application-level
caching -- or memoization -- is an increasingly used form of caching within the
application boundaries, which consists of storing the results of computations
in memory to avoid re-computing them. This is typically manually done by
developers, who identify caching opportunities in the code and write additional
code to manage the cache content. The task of identifying caching opportunities
is a challenge because it requires the analysis of workloads and code locations
where it is feasible and beneficial to cache objects. To aid developers in this
task, there are approaches that automatically identify cacheable methods.
Although such approaches have been individually evaluated, their effectiveness
has not been compared. We thus in this paper present an empirical evaluation to
compare the method recommendations made by the two existing application-level
caching approaches at the method level, namely APLCache and MemoizeIt, using
seven open-source web applications. We analyse the recommendations made by each
approach as well as the hits, misses and throughput achieved with their valid
caching recommendations. Our results show that the effectiveness of both
approaches largely depends on the specific application, the presence of invalid
recommendations and additional configurations, such as the time-to-live. By
inspecting the obtained results, we observed in which cases the recommendations
of each approach fail and succeed, which allowed us to derive a set of seven
lessons learned that give directions for future approaches to support
developers in the adoption of this type of caching.
