tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Konstantin Kolinko <>
Subject Re: Use 'length' when swallowing attributes in BCEL
Date Fri, 12 Sep 2014 09:25:24 GMT
2014-09-12 13:20 GMT+04:00 Mark Thomas <>:
> On 12/09/2014 10:08, Mark Thomas wrote:
>> On 12/09/2014 09:36, Konstantin Kolinko wrote:
>>> Hi!
>>> Reviewing BCEL method Utility.swallowUnknownAttribute(...),  I think
>>> the same approach can be used for all other attributes that we ignore,
>>> ignoring their internal structure.
>>> That is: we know length of their data. In Attribute.readAttribute():
>>>         // Length of data in bytes
>>>         length = file.readInt();
>>> I have yet to verify this with specification, but it looks promising.
>> I did a quick test using the newly added performance test and the Jira
>> jars. It certainly works - no errors are reported - but there is no
>> noticeable performance improvement. What it does do is remove a large
>> chunk of code so, if your specification check confirms this is OK, I am
>> +1 purely based on the simplification benefits.
> I've tweaked the performance test to focus timing info on the BCEL part
> of the code after some profiling showed a lot of time was being spent
> reading the class files from the JAR. There is a performance improvement
> here (5-10%) so if this change is spec compliant there is an even
> stronger reason for doing it.

Yes, it is compliant.

The Java Virtual Machine Specification, Java SE 7 Edition
Chapter 4.7 Attributes

The structure is
attribute_info {
    u2 attribute_name_index;
    u4 attribute_length;
    u1 info[attribute_length];

For reference, JLS/JVM specifications page:

PDF version of the spec may be easier to work with.

Best regards,
Konstantin Kolinko

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message