Analise do consumo de memoria - MAG
Analise do estado do heap a JVM do AH com ORB O2
Estado do Heap da JVM do AgentHandler apos 1 execucao de Counter.class
Estado do Heap da JVM do AgentHandler apos 6 execucoes de Counter.class
Objetos extras que apareceram na segunda medicao em relacao a primeira
Analise do estado do heap a JVM do AH sem ORB O2
Estado do Heap da JVM do AgentHandler apos 1 execucao de Counter.class
Estado do Heap da JVM do AgentHandler apos 6 execucoes de Counter.class
Analise do estado do heap a JVM apos implementacao da provavel solucao (ORB.init unico)
Estado do Heap da JVM do AgentHandler apos 1 execucao de Counter.class
Estado do Heap da JVM do AgentHandler apos 6 execucoes de Counter.class
Objetos extras que apareceram na segunda medicao em relacao a primeira
Algumas conclusoes:
- O CORBA parece ser o grande culpado (e nao o JADE como se imaginou). Isso porque o nr de instancias da classe com.sun.corba.se.internal.orbutil.Element aumenta consideravelmente a cada execucao de app no MAG;
- Aparentemente a cada invocacao CORBA que o AH sofre ou efetua o nr de instancias da classe citada aumenta em 640 instancias (este nr foi obtido empiricamente: apos invocar o metodo finishApp do Asct, 640 instancias novas foram criadas);
- O problema nao envolve o ORB O2, uma vez que no segundo experimento o metodo executeApp foi invocado a partir de um cliente Java/CORBA com JacORB e o nr de instancias de com.sun.corba.se.internal.orbutil.Element se manteve constante em ambos os experimentos
- O nr de instancias da classe CORBA no segundo experimento, qnd dividido pelo mesmo nr no primeiro experimento da: 16000 / 3200 = 5 >> um numero exato? Seria o nr de execucoes extras realizadas a partir do primeiro experimento? :p
- Sao 5 ocasioes em que CORBA eh usado no AH: executeApp (lrm), finishApp (asct), acceptedExecution (asct), getApplication (ar), AgentHandlerLauncher (ah). Assim, apos a conclusao de uma execucao de app: 640 instancias x 5 = 3200 instancias! Este nr aparece apos 1 execucao de Counter em ambos os testes
- O problema deve estar na implementacao de nossos Wrappers CORBA!!!
Conclusao Final: o problema foi solucionado removendo-se todas as inicializacoes extras do ORB CORBA (ORB.init)