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 57494 - Too many classes in debugger modules
Summary: Too many classes in debugger modules
Status: CLOSED FIXED
Alias: None
Product: debugger
Classification: Unclassified
Component: Code (show other bugs)
Version: 4.x
Hardware: All All
: P2 blocker (vote)
Assignee: Martin Entlicher
URL:
Keywords: PERFORMANCE
Depends on: 66367
Blocks:
  Show dependency tree
 
Reported: 2005-04-05 17:40 UTC by _ rkubacki
Modified: 2010-04-29 09:21 UTC (History)
2 users (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 _ rkubacki 2005-04-05 17:40:53 UTC
Every class loaded by JVM brings some cost - time for its loading, space
occupied in permanent generation area and some other minor costs. We already
have so many classes that we had to increase size of PermGen to be able to
accomodate them into JVM.

Debugger module contains some classes that seems to abuse inheritance. The inner
classes in org/netbeans/modules/debugger/ui/models/ColumnModels.java are an
example of 21 quite similar inner classes.
Comment 1 Roman Ondruska 2005-04-14 10:31:08 UTC
Thanks for report, this will be discussed.
Comment 2 _ rkubacki 2005-04-18 16:33:46 UTC
Where / when / with whom? Can I help?
Comment 3 Jan Jancura 2005-04-19 09:23:37 UTC
This will be discussed on some debugger iTeam. 
Thanks we do not need any help.
Comment 4 _ rkubacki 2005-07-13 15:19:47 UTC
Have you alread discussed it?

The same applies to actions in org.netbeans.modules.debugger.ui.actions package.
Comment 5 Martin Entlicher 2005-07-13 15:47:00 UTC
Not yet - we have more important issues which affect stability...
Comment 6 _ rkubacki 2005-07-13 15:50:59 UTC
The same for org.netbeans.modules.debugger.ui.views. No surprise that we ran out
of PermGen space.
Comment 7 _ rkubacki 2005-07-15 13:50:07 UTC
4 CompoundAnnotation classes.
Comment 8 _ rkubacki 2005-07-15 15:01:50 UTC
Look at org.netbeans.modules.debugger.jpda.models also. For example ThisVariable
vs. ObjectVariable.
Comment 9 Martin Entlicher 2005-08-15 18:42:57 UTC
This is just the design of the tree table view model. 

The various actions in org.netbeans.modules.debugger.ui.actions package - we
could make just one class for them and add public static creation methods, that
would be called from the module layer.

Similar things would have to be done for the rest of the packages - but there is
a problem with the registry of tree table view model components. The MetaInf
lookup recognizes only public constructors. The loading mechanism would have to
be enhanced somehow...
Comment 10 Martin Entlicher 2005-09-29 15:49:08 UTC
I've made some tests of ColumnModels.java to see what the improvement is.

I've take ColumnModels as it is and created ColumnModelsNew with just two inner
classes + 19 static methods which create the various instances. I've measured
the memory consumption and load time:

ColumnModels   takes 236304 bytes and loading takes 17 ms.
ColumnModelsNew takes 45048 bytes and loading takes 2 ms.

Therefore with this change we save 15 ms and ~190 kB of memory.

Similar results can be expected in org.netbeans.modules.debugger.ui.actions package.

Making all requested changes I guess we can save about 0.5 MB of memory.
Comment 11 _ rkubacki 2005-09-30 08:33:51 UTC
This would be really nice if we could yeild such benefit. Thanks. Can you
mention your hardware? The classloading time seems to a bit long. 

BTW: I do not have hard numbers but can try later to check how the size of class
files maps to occupied perm gen memory. I expect roughly 1:1 mapping. 
Comment 12 Martin Entlicher 2005-09-30 09:10:49 UTC
Hardware: Intel(R) Pentium(R) M processor 1600MHz, 1GB RAM, Linux Fedora Core 1.
Comment 13 Martin Entlicher 2005-10-11 11:14:52 UTC
The inner classes in org/netbeans/modules/debugger/ui/models/ColumnModels.java
replaced with an abstract impl, concrete objects are created via static methods:

/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/models/ColumnModels.java,v
 <--  ColumnModels.java
new revision: 1.8; previous revision: 1.7

/cvs/debuggercore/src/META-INF/debugger/BreakpointsView/org.netbeans.spi.viewmodel.ColumnModel,v
 <--  org.netbeans.spi.viewmodel.ColumnModel
new revision: 1.4; previous revision: 1.3

/cvs/debuggercore/src/META-INF/debugger/CallStackView/org.netbeans.spi.viewmodel.ColumnModel,v
 <--  org.netbeans.spi.viewmodel.ColumnModel
new revision: 1.4; previous revision: 1.3

/cvs/debuggercore/src/META-INF/debugger/LocalsView/org.netbeans.spi.viewmodel.ColumnModel,v
 <--  org.netbeans.spi.viewmodel.ColumnModel
new revision: 1.4; previous revision: 1.3

/cvs/debuggercore/src/META-INF/debugger/SessionsView/org.netbeans.spi.viewmodel.ColumnModel,v
 <--  org.netbeans.spi.viewmodel.ColumnModel
new revision: 1.4; previous revision: 1.3

/cvs/debuggercore/src/META-INF/debugger/ThreadsView/org.netbeans.spi.viewmodel.ColumnModel,v
 <--  org.netbeans.spi.viewmodel.ColumnModel
new revision: 1.5; previous revision: 1.4

/cvs/debuggercore/src/META-INF/debugger/WatchesView/org.netbeans.spi.viewmodel.ColumnModel,v
 <--  org.netbeans.spi.viewmodel.ColumnModel
new revision: 1.4; previous revision: 1.3
Comment 14 Martin Entlicher 2005-10-11 16:15:55 UTC
DebuggerAction has 13 trivial sub-classes. It's better to turn it into a factory
methods:

/cvs/debuggerjpda/ui/src/org/netbeans/modules/debugger/jpda/resources/mf-layer.xml,v
 <--  mf-layer.xml
new revision: 1.29; previous revision: 1.28

Removing
debuggercore/src/org/netbeans/modules/debugger/ui/actions/ContinueAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/ContinueAction.java,v
 <--  ContinueAction.java
new revision: delete; previous revision: 1.6

Checking in
debuggercore/src/org/netbeans/modules/debugger/ui/actions/DebuggerAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/DebuggerAction.java,v
 <--  DebuggerAction.java
new revision: 1.10; previous revision: 1.9

Removing debuggercore/src/org/netbeans/modules/debugger/ui/actions/FixAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/FixAction.java,v
 <--  FixAction.java
new revision: delete; previous revision: 1.7
done
Removing debuggercore/src/org/netbeans/modules/debugger/ui/actions/KillAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/KillAction.java,v
 <--  KillAction.java
new revision: delete; previous revision: 1.7
done
Removing
debuggercore/src/org/netbeans/modules/debugger/ui/actions/MakeCalleeCurrentAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/MakeCalleeCurrentAction.java,v
 <--  MakeCalleeCurrentAction.java
new revision: delete; previous revision: 1.6
done
Removing
debuggercore/src/org/netbeans/modules/debugger/ui/actions/MakeCallerCurrentAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/MakeCallerCurrentAction.java,v
 <--  MakeCallerCurrentAction.java
new revision: delete; previous revision: 1.6
done
Removing debuggercore/src/org/netbeans/modules/debugger/ui/actions/PauseAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/PauseAction.java,v
 <--  PauseAction.java
new revision: delete; previous revision: 1.6
done
Removing
debuggercore/src/org/netbeans/modules/debugger/ui/actions/PopTopmostCallAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/PopTopmostCallAction.java,v
 <--  PopTopmostCallAction.java
new revision: delete; previous revision: 1.6
done
Removing
debuggercore/src/org/netbeans/modules/debugger/ui/actions/RunIntoMethodAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/RunIntoMethodAction.java,v
 <--  RunIntoMethodAction.java
new revision: delete; previous revision: 1.5
done
Removing
debuggercore/src/org/netbeans/modules/debugger/ui/actions/RunToCursorAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/RunToCursorAction.java,v
 <--  RunToCursorAction.java
new revision: delete; previous revision: 1.6
done
Removing
debuggercore/src/org/netbeans/modules/debugger/ui/actions/StepIntoAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/StepIntoAction.java,v
 <--  StepIntoAction.java
new revision: delete; previous revision: 1.6
done
Removing
debuggercore/src/org/netbeans/modules/debugger/ui/actions/StepOutAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/StepOutAction.java,v
 <--  StepOutAction.java
new revision: delete; previous revision: 1.6
done
Removing
debuggercore/src/org/netbeans/modules/debugger/ui/actions/StepOverAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/StepOverAction.java,v
 <--  StepOverAction.java
new revision: delete; previous revision: 1.6
done
Removing
debuggercore/src/org/netbeans/modules/debugger/ui/actions/ToggleBreakpointAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/ToggleBreakpointAction.java,v
 <--  ToggleBreakpointAction.java
new revision: delete; previous revision: 1.5
Comment 15 Martin Entlicher 2005-10-12 17:27:11 UTC
Remaining 6 view actions from the same package replaced with generic ViewActions,
also the 6 view TopComponents replaced with one generic View TopComponent:

Checking in src/org/netbeans/modules/debugger/resources/mf-layer.xml;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/mf-layer.xml,v 
<--  mf-layer.xml
new revision: 1.71; previous revision: 1.70
done
Checking in
src/org/netbeans/modules/debugger/resources/components/breakpoints.settings;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/components/breakpoints.settings,v
 <--  breakpoints.settings
new revision: 1.6; previous revision: 1.5
done
Checking in
src/org/netbeans/modules/debugger/resources/components/callstack.settings;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/components/callstack.settings,v
 <--  callstack.settings
new revision: 1.6; previous revision: 1.5
done
Checking in src/org/netbeans/modules/debugger/resources/components/locals.settings;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/components/locals.settings,v
 <--  locals.settings
new revision: 1.5; previous revision: 1.4
done
Checking in
src/org/netbeans/modules/debugger/resources/components/sessions.settings;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/components/sessions.settings,v
 <--  sessions.settings
new revision: 1.6; previous revision: 1.5
done
Checking in src/org/netbeans/modules/debugger/resources/components/threads.settings;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/components/threads.settings,v
 <--  threads.settings
new revision: 1.6; previous revision: 1.5
done
Checking in src/org/netbeans/modules/debugger/resources/components/watches.settings;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/components/watches.settings,v
 <--  watches.settings
new revision: 1.6; previous revision: 1.5
done
Checking in
src/org/netbeans/modules/debugger/resources/groups/debugger/breakpoints.wstcgrp;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/groups/debugger/breakpoints.wstcgrp,v
 <--  breakpoints.wstcgrp
new revision: 1.6; previous revision: 1.5
done
Checking in
src/org/netbeans/modules/debugger/resources/groups/debugger/callstack.wstcgrp;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/groups/debugger/callstack.wstcgrp,v
 <--  callstack.wstcgrp
new revision: 1.5; previous revision: 1.4
done
Checking in
src/org/netbeans/modules/debugger/resources/groups/debugger/locals.wstcgrp;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/groups/debugger/locals.wstcgrp,v
 <--  locals.wstcgrp
new revision: 1.4; previous revision: 1.3
done
Checking in
src/org/netbeans/modules/debugger/resources/groups/debugger/sessions.wstcgrp;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/groups/debugger/sessions.wstcgrp,v
 <--  sessions.wstcgrp
new revision: 1.6; previous revision: 1.5
done
Checking in
src/org/netbeans/modules/debugger/resources/groups/debugger/threads.wstcgrp;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/groups/debugger/threads.wstcgrp,v
 <--  threads.wstcgrp
new revision: 1.6; previous revision: 1.5
done
Checking in
src/org/netbeans/modules/debugger/resources/groups/debugger/watches.wstcgrp;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/groups/debugger/watches.wstcgrp,v
 <--  watches.wstcgrp
new revision: 1.5; previous revision: 1.4
done
Checking in src/org/netbeans/modules/debugger/resources/modes/debugger.wsmode;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/modes/debugger.wsmode,v
 <--  debugger.wsmode
new revision: 1.5; previous revision: 1.4
done
Checking in
src/org/netbeans/modules/debugger/resources/modes/debugger/breakpoints.wstcref;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/modes/debugger/breakpoints.wstcref,v
 <--  breakpoints.wstcref
new revision: 1.3; previous revision: 1.2
done
Checking in
src/org/netbeans/modules/debugger/resources/modes/debugger/callstack.wstcref;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/modes/debugger/callstack.wstcref,v
 <--  callstack.wstcref
new revision: 1.3; previous revision: 1.2
done
Checking in
src/org/netbeans/modules/debugger/resources/modes/debugger/locals.wstcref;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/modes/debugger/locals.wstcref,v
 <--  locals.wstcref
new revision: 1.3; previous revision: 1.2
done
Checking in
src/org/netbeans/modules/debugger/resources/modes/debugger/sessions.wstcref;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/modes/debugger/sessions.wstcref,v
 <--  sessions.wstcref
new revision: 1.3; previous revision: 1.2
done
Checking in
src/org/netbeans/modules/debugger/resources/modes/debugger/threads.wstcref;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/modes/debugger/threads.wstcref,v
 <--  threads.wstcref
new revision: 1.3; previous revision: 1.2
done
Checking in
src/org/netbeans/modules/debugger/resources/modes/debugger/watches.wstcref;
/cvs/debuggercore/src/org/netbeans/modules/debugger/resources/modes/debugger/watches.wstcref,v
 <--  watches.wstcref
new revision: 1.3; previous revision: 1.2
done
Checking in src/org/netbeans/modules/debugger/ui/actions/AddWatchAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/AddWatchAction.java,v
 <--  AddWatchAction.java
new revision: 1.12; previous revision: 1.11
done
Removing src/org/netbeans/modules/debugger/ui/actions/BreakpointsViewAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/BreakpointsViewAction.java,v
 <--  BreakpointsViewAction.java
new revision: delete; previous revision: 1.4
done
Removing src/org/netbeans/modules/debugger/ui/actions/CallStackViewAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/CallStackViewAction.java,v
 <--  CallStackViewAction.java
new revision: delete; previous revision: 1.4
done
Removing src/org/netbeans/modules/debugger/ui/actions/LocalsViewAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/LocalsViewAction.java,v
 <--  LocalsViewAction.java
new revision: delete; previous revision: 1.4
done
Removing src/org/netbeans/modules/debugger/ui/actions/SessionsViewAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/SessionsViewAction.java,v
 <--  SessionsViewAction.java
new revision: delete; previous revision: 1.4
done
Removing src/org/netbeans/modules/debugger/ui/actions/ThreadsViewAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/ThreadsViewAction.java,v
 <--  ThreadsViewAction.java
new revision: delete; previous revision: 1.4
done
RCS file:
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/ViewActions.java,v
done
Checking in src/org/netbeans/modules/debugger/ui/actions/ViewActions.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/ViewActions.java,v
 <--  ViewActions.java
initial revision: 1.1
done
Removing src/org/netbeans/modules/debugger/ui/actions/WatchesViewAction.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/actions/WatchesViewAction.java,v
 <--  WatchesViewAction.java
new revision: delete; previous revision: 1.4
done
Removing src/org/netbeans/modules/debugger/ui/views/BreakpointsView.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/views/BreakpointsView.java,v
 <--  BreakpointsView.java
new revision: delete; previous revision: 1.10
done
Removing src/org/netbeans/modules/debugger/ui/views/CallStackView.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/views/CallStackView.java,v
 <--  CallStackView.java
new revision: delete; previous revision: 1.9
done
Removing src/org/netbeans/modules/debugger/ui/views/LocalsView.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/views/LocalsView.java,v 
<--  LocalsView.java
new revision: delete; previous revision: 1.9
done
Removing src/org/netbeans/modules/debugger/ui/views/SessionsView.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/views/SessionsView.java,v
 <--  SessionsView.java
new revision: delete; previous revision: 1.9
done
Removing src/org/netbeans/modules/debugger/ui/views/ThreadsView.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/views/ThreadsView.java,v
 <--  ThreadsView.java
new revision: delete; previous revision: 1.9
done
RCS file: /cvs/debuggercore/src/org/netbeans/modules/debugger/ui/views/View.java,v
done
Checking in src/org/netbeans/modules/debugger/ui/views/View.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/views/View.java,v  <-- 
View.java
initial revision: 1.1
done
Removing src/org/netbeans/modules/debugger/ui/views/WatchesView.java;
/cvs/debuggercore/src/org/netbeans/modules/debugger/ui/views/WatchesView.java,v
 <--  WatchesView.java
new revision: delete; previous revision: 1.9
done
Comment 16 Martin Entlicher 2005-10-13 14:33:40 UTC
I've removed cca 43 classes.
What do you mention in org.netbeans.modules.debugger.jpda.models is problematic,
because it's important that ThisVariable implements This, etc.
We can just remove only ObjectVariable, that does not add any value:

/cvs/debuggerjpda/src/org/netbeans/modules/debugger/jpda/models/AbstractVariable.java,v
 <--  AbstractVariable.java
new revision: 1.36; previous revision: 1.35

/cvs/debuggerjpda/src/org/netbeans/modules/debugger/jpda/models/LocalsTreeModel.java,v
 <--  LocalsTreeModel.java
new revision: 1.34; previous revision: 1.33

Removing models/ObjectVariable.java;
/cvs/debuggerjpda/src/org/netbeans/modules/debugger/jpda/models/ObjectVariable.java,v
 <--  ObjectVariable.java
new revision: delete; previous revision: 1.3
done


The rest of variable classes are package-private:


Checking in models/FieldVariable.java;
/cvs/debuggerjpda/src/org/netbeans/modules/debugger/jpda/models/FieldVariable.java,v
 <--  FieldVariable.java
new revision: 1.7; previous revision: 1.6
done
Checking in models/JPDAObjectWatchImpl.java;
/cvs/debuggerjpda/src/org/netbeans/modules/debugger/jpda/models/JPDAObjectWatchImpl.java,v
 <--  JPDAObjectWatchImpl.java
new revision: 1.8; previous revision: 1.7
done
Checking in models/JPDAWatchImpl.java;
/cvs/debuggerjpda/src/org/netbeans/modules/debugger/jpda/models/JPDAWatchImpl.java,v
 <--  JPDAWatchImpl.java
new revision: 1.9; previous revision: 1.8
done
Checking in models/Local.java;
/cvs/debuggerjpda/src/org/netbeans/modules/debugger/jpda/models/Local.java,v 
<--  Local.java
new revision: 1.8; previous revision: 1.7
done
Checking in models/ObjectFieldVariable.java;
/cvs/debuggerjpda/src/org/netbeans/modules/debugger/jpda/models/ObjectFieldVariable.java,v
 <--  ObjectFieldVariable.java
new revision: 1.6; previous revision: 1.5
done
Checking in models/ObjectLocalVariable.java;
/cvs/debuggerjpda/src/org/netbeans/modules/debugger/jpda/models/ObjectLocalVariable.java,v
 <--  ObjectLocalVariable.java
new revision: 1.7; previous revision: 1.6
done
Checking in models/SuperVariable.java;
/cvs/debuggerjpda/src/org/netbeans/modules/debugger/jpda/models/SuperVariable.java,v
 <--  SuperVariable.java
new revision: 1.7; previous revision: 1.6
done
Checking in models/ThisVariable.java;
/cvs/debuggerjpda/src/org/netbeans/modules/debugger/jpda/models/ThisVariable.java,v
 <--  ThisVariable.java
new revision: 1.4; previous revision: 1.3
done
Comment 17 Quality Engineering 2010-04-29 09:21:57 UTC
Verified ... and Closing all issues resolved into NetBeans 6.7 and earlier.