DROP_DEBUG and the constant pool

David Lloyd david.lloyd at redhat.com
Tue Sep 30 16:07:03 UTC 2025


We've observed that when using `DROP_DEBUG` in conjunction with
`CodeBuilder#localVariable` and/or `localVariableType`, some (otherwise
useless) constant pool entries are still being created (which contain, I
believe, both the variable name and descriptor). This was observed using a
backport of the JDK classfile API based on JDK 25.

Would this be expected behavior? Is there a separate step needed to clean
the constant pool for cases like this?

It looks to me to be the consequence of how the default methods for local
variable creation are implemented, e.g.:

    default CodeBuilder localVariable(int slot, String name, ClassDesc
descriptor, Label startScope, Label endScope) {
        return localVariable(slot,
                             constantPool().utf8Entry(name),
                             constantPool().utf8Entry(descriptor),
                             startScope, endScope);
    }

The constant pool is accessed even when `DROP_DEBUG` is enabled, because
that flag is used later on in the process, and it seems that these entries
are never dropped, even if they are unused.

-- 
- DML • he/him
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/classfile-api-dev/attachments/20250930/e8dcec80/attachment.htm>


More information about the classfile-api-dev mailing list