All reports in JIRA uses DefaultReaderCache so field values far all issues are cached between executions.
DefaultReaderCache is creating single ArrayList with SingletonLists as values for each field used in reports. On JIRA with 1M issues this will create 2M objects for each field used in reports. As a result on large instances we have hundreds of millions of objects that pollutes jvm memory. On very large instances those objects are humongous so they will cause more troubles.
Create JiraDocValues which will store all values for all issues for custom field in single array.
This way we will be creating one humongous object for a field and avoid unnecessary pressure on memory and GC.
This should not have impact on performance and bring more stability to busy instances.