After further excessive (literally additional days of) debugging I can state that upon Rexx interpreter instance (RII) terminations using the native Terminate() API, ooRexx does not release/run the uninit methods of at least the monitored objects (ooRexx BSF objects) of the .local monitors!

=====

Here the relevant parts after creating, using and Terminate() 1,000 RIIs:

   References from ooRexx objects (under the control of ooRexx), pinning Java 
objects:

   ... cut ...
   /RexxAnalyzeRegistry category=[[B]////- RefCount: entries=[ //*2 000*//] | 
references: min=[ 1] max=[ 1] avg=[ 1,0] sum=[ 2 000]////- MemSize: entries=[ 2 
000] | references: min=[ 1] max=[ 1] avg=[ 1,0] sum=[ //*2 
000*//]//////RexxAnalyzeRegistry category=[[C]////- RefCount: entries=[ //*2 
000*//] | references: min=[ 1] max=[ 1] avg=[ 1,0] sum=[ 2 000]////- MemSize: 
entries=[ 2 000] | references: min=[ 2] max=[ 2] avg=[ 2,0] sum=[ //*4 
000*//]//////RexxAnalyzeRegistry category=[[I]////- RefCount: entries=[ //*4 
000*//] | references: min=[ 1] max=[ 1] avg=[ 1,0] sum=[ 4 000]////- MemSize: 
entries=[ 4 000] | references: min=[ 4] max=[ 4] avg=[ 4,0] sum=[ //*16 
000*//]//////RexxAnalyzeRegistry category=[java.io.InputStreamReader]////- 
RefCount: entries=[ //*1 000*//] | references: min=[ 1] max=[ 1] avg=[ 1,0] 
sum=[ 1 000]//////RexxAnalyzeRegistry category=[java.io.PrintWriter]////- 
RefCount: entries=[ //*2 000*//] | references: min=[ 1] max=[ 1] avg=[ 1,0] 
sum=[ 2 000]/

   ... cut ...

   References from Java objects (under the control of BSF4ooRexx), pinning 
ooRexx engines (REXX_ENGINE, REXX_SCRIPT_ENGINE) and ooRexx objects 
(REXX_PROXY):


   org.rexxla.bsf.engines.rexx.RexxCleanupRef:
   RexxCleanupRef [2022-07-20 15:16:10.613000000]
                 RefKind:         Instances:         Finalized: Not Yet 
Finalized:
   
------------------------------------------------------------------------------
   [TEST]..............: [               0] [               0] [               
0]
   [REXX_ENGINE].......: [           1 002] [           1 000] [               
2]
   [REXX_PROXY]........: [ 9 000] [ 8 994] [ 6]
   [REXX_SCRIPT_ENGINE]: [           1 000] [             999] [               
1]
   
------------------------------------------------------------------------------
   Totals..............: [          11 002] [          10 993] [               
9]

   ---

Here the ooRexx objects referenced by BSF4ooRexx on the Java side 
(cf.REXX_PROXY  above):

   OREXX_REGISTRY related:
         OREXX_REGISTRY ~items: 6 OREXX_REGISTRY_REFCOUNTER~items: 6

   t_jsr223.rex: ooRexx 5.0.0 r12473 (17 Jul 2022) / BSF 641.20220717 / Java 
17.0.3.1 (released: 2022-04-22), 64-bit (amd64) / Windows 10.0.19043

   count_rexx_gc: [4] count_java_gc: [4]

   ... cut ...

=====
Here the relevant parts after creating, using and Terminate() 1,000 RIIs, this time running the following Rexx program right before termination of a RII from the Java side:

                     ... cut ...
                   /String rexxCode = // reset .input, .output, .error, 
.traceOutput, .debugInput to free BSF
   objects if any " lDir = .local -- get .local ;\n" + " lDir['INPUT' ]= 
.monitor~new(ldir['STDIN'
   ]) ;\n" + " lDir['OUTPUT' ]= .monitor~new(ldir['STDOUT']) ;\n" + " 
lDir['ERROR' ]=
   .monitor~new(ldir['STDERR']) ;\n" + " lDir['TRACEOUTPUT']= .monitor~new(ldir['ERROR' 
]) ;\n" + "
   lDir['DEBUGINPUT' ]= .monitor~new(ldir['INPUT' ]) ;\n" ; /

                    Object obj=null;
                    try {
                            obj=rexxInterface.jniRexxRunProgram(
                                    rii_ID,         // RexxInstance instance ID
                                    2,              // invocationType,         // determines whether 
"CallProgram", "LoadPackage" or "LoadPackageFromData" is to be used
                                    
"RexxEngine_terminate_cleanup_local_monitors" ,   // fileName
                                    /rexxCode /,      // Rexx code to execute
                                    null            // arguments
                                    );
                     }
                     ... cut ...

                     
res=rexxInterface.jniRexxTerminateInterpreterInstance(rii_ID);  // wait for 
termination of all Rexx threads of this interpreter instance

                     ... cut ...

Doing this for every RII will cause the UNINIT method of the BSF objects to be run, correctly removing the pinned (peer) Java objects:

   References from ooRexx, pinning Java objects:

   ... cut ...
   /RexxAnalyzeRegistry category=[[B]////- RefCount: entries=[ //*2*//] | 
references: min=[ 1] max=[ 1] avg=[ 1,0] sum=[ 2]////- MemSize: entries=[ 2] | 
references: min=[ 1] max=[ 1] avg=[ 1,0] sum=[ 
//*2*//]//////RexxAnalyzeRegistry category=[[C]////- RefCount: entries=[ 
//*2*//] | references: min=[ 1] max=[ 1] avg=[ 1,0] sum=[ 2]////- MemSize: 
entries=[ 2] | references: min=[ 2] max=[ 2] avg=[ 2,0] sum=[ 
//*4*//]//////RexxAnalyzeRegistry category=[[I]////- RefCount: entries=[ 
//*4*//] | references: min=[ 1] max=[ 1] avg=[ 1,0] sum=[ 4]////- MemSize: 
entries=[ 4] | references: min=[ 4] max=[ 4] avg=[ 4,0] sum=[ 
//*16*//]//////RexxAnalyzeRegistry category=[java.io.InputStreamReader]////- 
RefCount: entries=[ //*1*//] | references: min=[ 1] max=[ 1] avg=[ 1,0] sum=[ 
1]//////RexxAnalyzeRegistry category=[java.io.PrintWriter]////- RefCount: 
entries=[ //*2*//] | references: min=[ 1] max=[ 1] avg=[ 1,0] sum=[ 2]///
   ... cut ...

   References from Java objects (under the control of BSF4ooRexx), pinning 
ooRexx engines (REXX_ENGINE, REXX_SCRIPT_ENGINE) and ooRexx objects 
(REXX_PROXY):

   org.rexxla.bsf.engines.rexx.RexxCleanupRef:
   RexxCleanupRef [2022-07-20 15:39:04.692000000]
                 RefKind:         Instances:         Finalized: Not Yet 
Finalized:
   
------------------------------------------------------------------------------
   [TEST]..............: [               0] [               0] [               
0]
   [REXX_ENGINE].......: [           1 002] [           1 000] [               
2]
   [REXX_PROXY]........: [ 9 000] [ 8 994] [ 6]
   [REXX_SCRIPT_ENGINE]: [           1 000] [             999] [               
1]
   
------------------------------------------------------------------------------
   Totals..............: [          11 002] [          10 993] [               
9]

   ---

Here the ooRexx objects referenced by BSF4ooRexx on the Java side 
(cf.REXX_PROXY  above):

   OREXX_REGISTRY related:
           OREXX_REGISTRY ~items: 6 OREXX_REGISTRY_REFCOUNTER~items: 6

   t_jsr223.rex: ooRexx 5.0.0 r12473 (17 Jul 2022) / BSF 641.20220717 / Java 
17.0.3.1 (released: 2022-04-22), 64-bit (amd64) / Windows 10.0.19043

   count_rexx_gc: [4] count_java_gc: [4]

   ... cut ...

---rony


_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to