[Java] Annotation Type Memoized
- groovy.transform.Memoized
Method annotation that creates a cache for the results of the execution of the annotated method. Whenever the method is called, the mapping between the parameters and the return value is preserved in a cache making subsequent calls with the same arguments fast.
Example usage:
class MemoizedExample {
@Memoized
int sum(int n1, int n2) {
println "$n1 + $n2 = ${n1 + n2}"
n1 + n2
}
}
which becomes (approximately):
class MemoizedExample {
private final Closure memoizedSum = { int n1, int n2 ->
private$method$memoizedSum(n1,n2)
}.memoize()
int sum(int n1, int n2) {
memoizedSum(n1, n2)
}
private private$method$memoizedSum(int n1, int n2) {
println "$n1 + $n2 = ${n1 + n2}"
n1 + n2
}
}
Upon execution of this code:
def instance = new MemoizedExample() println instance.sum(1, 2) println instance.sum(1, 2) println instance.sum(2, 3) println instance.sum(2, 3)The following will be output:
1 + 2 = 3 3 3 2 + 3 = 5 5 5
More examples:
import groovy.transform.* // Script variable which is changed when increment() // method is invoked. // If cached method call is invoked then the value // of this variable will not change. @Field boolean incrementChange = false @Memoized int increment(int value) { incrementChange = true value + 1 } // Invoke increment with argument 10. increment(10) // increment is invoked so incrementChange is true. assert incrementChange // Set incrementChange back to false. incrementChange = false // Invoke increment with argument 10. increment(10) // Now the cached method is used and // incrementChange is not changed. assert !incrementChange // Invoke increment with other argument value. increment(11) // increment is invoked so incrementChange is true. assert incrementChange
- Since:
- 2.2.0
Element Summary
Type | Name and Description |
---|---|
int |
maxCacheSize The maximum size the cache can grow to. |
int |
protectedCacheSize Number of cached return values to protect from garbage collection. |
Inherited Methods Summary
Methods inherited from class | Name |
---|---|
class Object | wait, wait, wait, equals, toString, hashCode, getClass, notify, notifyAll |
Element Detail
public int maxCacheSize
The maximum size the cache can grow to. @default 0
public int protectedCacheSize
Number of cached return values to protect from garbage collection. @default 0
© 2003-2020 The Apache Software Foundation
Licensed under the Apache license.
https://docs.groovy-lang.org/2.5.14/html/gapi/groovy/transform/Memoized.html