STATIC objects and garbage collector of PASOE. - Forum - OpenEdge Development - Progress Community

STATIC objects and garbage collector of PASOE.

 Forum

STATIC objects and garbage collector of PASOE.

This question is not answered

Hi,

Working on a REST application and in order to retrieve PDF file from my server via HTTP (content-type application/pdf) , i've implemented a web handler. This one runs on PASOE (v11.7.3).

The web handler does the work well and the web browser is able to display pdf via the default viewer.

However, while checking the stack trace on agent sessions I saw that a lot of static HTTP related objects were loaded in memory (see the non exhaustive list at the end of the post). These objects are deleted after a while, certainely by the garbage collector and PASOE auto trim. The thing is, I'm a bit concerned about it, especially when thinking that the application will be used in a multiuser mode.

So my questions are the following

Is it safe to let PASOE handle these objects ?

If not, is there a way to properly clean the stack after the REST call ?

Thanks for your help.

ABL objects

Object-1

Class:   OpenEdge/Core/Util/MathUtil.r
ObjectId:   STATIC


Object-2

Class:   OpenEdge/Core/ByteBucket.r
ObjectId:   STATIC


Object-3

Class:   OpenEdge/Net/HTTP/Filter/Writer/BodyWriterRegistry.r
ObjectId:   STATIC


Object-4

Class:   OpenEdge/Net/HTTP/Filter/Writer/MessageWriterBuilder.r
ObjectId:   STATIC


Object-5

Class:   OpenEdge/Net/HTTP/Filter/Writer/BodyWriterBuilder.r
ObjectId:   STATIC


Object-6

Class:   OpenEdge/Core/Memptr.r
ObjectId:   STATIC


Object-7

Class:   OpenEdge/Core/String.r
ObjectId:   STATIC


Object-8

Class:   OpenEdge/Net/HTTP/Filter/Writer/SetHeaderMessageWriterBuilder.r
ObjectId:   STATIC


Object-9

Class:   OpenEdge/Net/HTTP/HttpHeaderBuilder.r
ObjectId:   STATIC


Object-10

Class:   OpenEdge/Net/HTTP/HttpHeader.r
ObjectId:   STATIC


Object-11

Class:   OpenEdge/Net/HTTP/StatusCodeHelper.r
ObjectId:   STATIC


Object-12

Class:   OpenEdge/Net/HTTP/HttpHeaderCollection.r
ObjectId:   STATIC


Object-13

Class:   Ccs/Common/Application.r
ObjectId:   STATIC


Object-14

Class:   OpenEdge/Core/Util/TokenResolver.r
ObjectId:   STATIC


Object-15

Class:   OpenEdge/Logging/TokenResolver.r
ObjectId:   STATIC


All Replies
  • STATIC classes (or rather, the STATIC members of a class type) are loaded into memory only once, and stay there for the lifetime of the process.

    The garbage collector won't touch them, that only handles object instances. Statics apply to the class type.

    The main side effects of the implementation are that:

    a) You need to restart the process for changes to static members to take effect. This is mostly a pain during development, there's steps you can take in production to minimize downtime.

    b) If you have a lot of static members, your minimum memory requirements may increase.

  • The various ‘registry’ objects you see are infrastructure for the http client and web handlers. They act as caches of name/value pairs of plugins that are used in the ABL components we (PSC) provide. They are loaded once only, on first call, and will persist for the life of the session.

     

     

     

    However, while checking the stack trace on agent sessions I saw that a lot of static HTTP related objects were loaded in memory (see the non exhaustive list at the end of the post). These objects are deleted after a while, certainely by the garbage collector and PASOE auto trim. The thing is, I'm a bit concerned about it, especially when thinking that the application will be used in a multiuser mode.

    So my questions are the following

    Is it safe to let PASOE handle these objects ?

    If not, is there a way to properly clean the stack after the REST call ?