Karl Pauls wrote:
 > Hi,
 >
 > I am a bit surprised to see that classes are not getting unloaded when I
 > uninstall my bundle. In my program, I try to force the GC by calling
 > Runtime.gc() a couple of times. Looking at the gc log, I do see "Full
 > GC" happening. I am using -verbose:gc option to see class unloading
 > details. If I run the same program using some other implementation, I
 > see classes are getting unloaded. I have verified the same using
 > jconsole as well. Am I missing any flag? Is it a known issue?


 I just tried a very simple bundle with trunk and see classes unloaded:
 ( note - I customized shell.tui to force a couple of GCs per command )

 ==========================================================
 -> ps
 START LEVEL 1
   ID   State         Level  Name
 [Loaded java.util.TreeMap$3 from
 /home/stuart/Tools/j2sdk1.4.2_15/jre/lib/rt.jar]
 [   0] [Active     ] [    0] System Bundle (1.1.0.SNAPSHOT)
 [   1] [Active     ] [    1] Apache Felix Shell Service (1.0.0)
 [   2] [Active     ] [    1] Apache Felix Shell TUI (1.1.0.SNAPSHOT)
 [   3] [Active     ] [    1] Apache Felix Bundle Repository (1.1.0.SNAPSHOT)
 -> ps
 START LEVEL 1
   ID   State         Level  Name
 [   0] [Active     ] [    0] System Bundle (1.1.0.SNAPSHOT)
 [   1] [Active     ] [    1] Apache Felix Shell Service (1.0.0)
 [   2] [Active     ] [    1] Apache Felix Shell TUI (1.1.0.SNAPSHOT)
 [   3] [Active     ] [    1] Apache Felix Bundle Repository (1.1.0.SNAPSHOT)
 -> install file:/tmp/foo.jar
 Bundle ID: 4
 -> ps
 START LEVEL 1
   ID   State         Level  Name
 [   0] [Active     ] [    0] System Bundle (1.1.0.SNAPSHOT)
 [   1] [Active     ] [    1] Apache Felix Shell Service (1.0.0)
 [   2] [Active     ] [    1] Apache Felix Shell TUI (1.1.0.SNAPSHOT)
 [   3] [Active     ] [    1] Apache Felix Bundle Repository (1.1.0.SNAPSHOT)
 [   4] [Installed  ] [    1] foo (1.0.0.SNAPSHOT)
 -> start 4
 DEBUG: WIRE: 4.0 -> foo -> 4.0
 DEBUG: WIRE: 4.0 -> org.osgi.framework -> 0
 [Loaded foo.internal.ExampleActivator]
 STARTING foo
 REGISTER foo.ExampleService
 [Loaded foo.ExampleService]
 [Loaded foo.internal.ExampleServiceImpl]
 -> ps
 START LEVEL 1
   ID   State         Level  Name
 [   0] [Active     ] [    0] System Bundle (1.1.0.SNAPSHOT)
 [   1] [Active     ] [    1] Apache Felix Shell Service (1.0.0)
 [   2] [Active     ] [    1] Apache Felix Shell TUI (1.1.0.SNAPSHOT)
 [   3] [Active     ] [    1] Apache Felix Bundle Repository (1.1.0.SNAPSHOT)
 [   4] [Active     ] [    1] foo (1.0.0.SNAPSHOT)
 -> uninstall 4
 STOPPING foo
 [Loaded org.apache.felix.framework.Felix$RefreshHelper]
 [Unloading class foo.internal.ExampleServiceImpl]
 [Unloading class foo.ExampleService]
 [Unloading class foo.internal.ExampleActivator]
 -> ps
 START LEVEL 1
   ID   State         Level  Name
 [   0] [Active     ] [    0] System Bundle (1.1.0.SNAPSHOT)
 [   1] [Active     ] [    1] Apache Felix Shell Service (1.0.0)
 [   2] [Active     ] [    1] Apache Felix Shell TUI (1.1.0.SNAPSHOT)
 [   3] [Active     ] [    1] Apache Felix Bundle Repository (1.1.0.SNAPSHOT)
 ->
 ==========================================================

 the foo bundle installs a simple service with the OSGi framework.

 if you can provide a simplified testcase that shows a bundle not
 unloading, please open a JIRA issue and attach the files needed
 to recreate it so we can investigate.

 ( diagnosing the issue is much faster when we have a testcase )

 alternatively, if you want to diagnose it yourself, I'd suggest using
 a heap profiling tool to find out what's holding on to your application
 classes - and see what's different between other frameworks.

 HTH



 Thanks,
 > Sahoo
 >
 > ---------------------------------------------------------------------
 > To unsubscribe, e-mail: [EMAIL PROTECTED]
 > For additional commands, e-mail: [EMAIL PROTECTED]
 >
 >
 --
 Cheers, Stuart


Furthermore, If you uninstall a bundle that has a used export you
while have to refresh before the classes can get unloaded.

regards,

Karl
I shall look closely at my test case, but I am a bit surprised, because if the test were incorrect, how was I seeing classes being gced while using other implementations?
This is the basic flow of my test case:
1. I start the framework from a Java class.
2. I have listed a bunch of bundle names in the autostart property, so framework installs and starts them automatically. 3. The last bundle (I call it the test bundle) is a special one, which when starts, stops all the other bundles except itself and the framework bundle. The test bundle does not depend on any of the other bundles. I do see bundles getting uninstalled. The framework should not depend on any any of these bundles, right? 4. If I understand correctly, when a bundle is uninstalled, its exported packages are eligible for gc if there is no other bundle which uses the bundle (section 4.3.11 of r4 spec). To ensure that I take care of dependencies among bundles, I stop the bundles in the reverse order (I am assuming the bundle id is strictly increasing). Is this the correct way of doing things?

In my test case, the framework is responsible for starting the bundles (I use autostart property to start the bundles). Could it be the problem?

Thanks,
Sahoo


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to