This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

Bug 46323 - JavaModelPackage$Impl has flat hashcode
Summary: JavaModelPackage$Impl has flat hashcode
Status: RESOLVED FIXED
Alias: None
Product: java
Classification: Unclassified
Component: Unsupported (show other bugs)
Version: 4.x
Hardware: PC Linux
: P2 blocker (vote)
Assignee: Martin Matula
URL:
Keywords: PERFORMANCE
Depends on:
Blocks:
 
Reported: 2004-07-20 11:15 UTC by Petr Nejedly
Modified: 2004-08-13 12:11 UTC (History)
1 user (show)

See Also:
Issue Type: DEFECT
Exception Reporter:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Petr Nejedly 2004-07-20 11:15:23 UTC
JMManager->filesystems Map is effectively a
LinkedList, as all instances of
JavaModelPackage$Impl hash to the same bucket of
the HashMap.

Although there are only tens of them in the
typical IDE, it is a generated class and I'm
affraid the problem may be common to all generated
classes.
Comment 1 Petr Nejedly 2004-07-20 12:05:57 UTC
It seems that the problem is (probably rare) combination of MOFIDs
hashcode implementation, MOFID generation and the fact that
JavaModelPackage instances are created in the same sequence (140th
object from given storage).

This problem probably apply to all other initial metadata cretated
during storage initialization, as the same object types (the objects
that are typically put in the same map) would have identical hashcodes.

Sure fix would be to include the storageId's hashcode in the MOFIDs
hashcode, but that would cause more expensive hashcode.

On the other hand, it may be enough to use random initial sequence
number per storage.
Comment 2 Martin Matula 2004-07-21 23:01:26 UTC
Fixed.

Checking in
src/org/netbeans/mdr/persistence/btreeimpl/btreestorage/BtreeDataFile.java;
/cvs/mdr/src/org/netbeans/mdr/persistence/btreeimpl/btreestorage/BtreeDataFile.java,v
 <--  BtreeDataFile.java
new revision: 1.11; previous revision: 1.10
done
Comment 3 _ rkubacki 2004-07-22 15:38:13 UTC
If you meant hashmap keeping 15 items held by
org.netbeans.modules.javacore.JMManager refering to keys
org.netbeans.jmi.javamodel.JavaModelPackage$Impl and values
org.openide.filesystems.AbstractFileObject than it is really fixed in
todays build.

OTOH
org.netbeans.modules.javacore.jmiimpl.javamodel.JavaPackageImpl$SubPackagesCollection

suffers from the same problem. Keys in the subpackages map are
org.netbeans.jmi.javamodel.JavaPackage$Impl and again maps to the same
bucket.
Comment 4 Martin Matula 2004-07-22 16:13:16 UTC
Good catch!!! There were more similar bugs when for transient objects
a MOFID with fixed serial number was created. I am working on fixing them.
Comment 5 Martin Matula 2004-07-22 16:56:48 UTC
Fixed.

Checking in
src/org/netbeans/modules/javacore/jmiimpl/javamodel/ArrayClassImpl.java;
/cvs/java/javacore/src/org/netbeans/modules/javacore/jmiimpl/javamodel/ArrayClassImpl.java,v
 <--  ArrayClassImpl.java
new revision: 1.4; previous revision: 1.3
done
Checking in
src/org/netbeans/modules/javacore/jmiimpl/javamodel/JavaPackageClassImpl.java;
/cvs/java/javacore/src/org/netbeans/modules/javacore/jmiimpl/javamodel/JavaPackageClassImpl.java,v
 <--  JavaPackageClassImpl.java
new revision: 1.8; previous revision: 1.7
done
Checking in
src/org/netbeans/modules/javacore/jmiimpl/javamodel/ParameterizedTypeClassImpl.java;
/cvs/java/javacore/src/org/netbeans/modules/javacore/jmiimpl/javamodel/ParameterizedTypeClassImpl.java,v
 <--  ParameterizedTypeClassImpl.java
new revision: 1.7; previous revision: 1.6
done
Checking in
src/org/netbeans/modules/javacore/jmiimpl/javamodel/PrimitiveTypeClassImpl.java;
/cvs/java/javacore/src/org/netbeans/modules/javacore/jmiimpl/javamodel/PrimitiveTypeClassImpl.java,v
 <--  PrimitiveTypeClassImpl.java
new revision: 1.4; previous revision: 1.3
done
Checking in
src/org/netbeans/modules/javacore/jmiimpl/javamodel/TagDefinitionClassImpl.java;
/cvs/java/javacore/src/org/netbeans/modules/javacore/jmiimpl/javamodel/TagDefinitionClassImpl.java,v
 <--  TagDefinitionClassImpl.java
new revision: 1.4; previous revision: 1.3
done
Checking in
src/org/netbeans/modules/javacore/jmiimpl/javamodel/UnresolvedClassClassImpl.java;
/cvs/java/javacore/src/org/netbeans/modules/javacore/jmiimpl/javamodel/UnresolvedClassClassImpl.java,v
 <--  UnresolvedClassClassImpl.java
new revision: 1.4; previous revision: 1.3
done