[jboss-jira] [JBoss JIRA] (DROOLS-1371) Too many classloaders use too much memory for a large rule set

Bill Tuminaro (JIRA) issues at jboss.org
Wed Dec 7 19:57:00 EST 2016


    [ https://issues.jboss.org/browse/DROOLS-1371?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13335636#comment-13335636 ] 

Bill Tuminaro commented on DROOLS-1371:
---------------------------------------

After looking at the Drools source code, I see why there are 2 classloaders for each rule.

Here is the object graph for the 2 classloaders per rule with variable names and class names:
1) kContainer (KieContainerImpl) 
	kBases (ConcurrentHashMap) 
		segments (ConcurrentHashMap$Segment) 
			segment[3] 
				value (KnowledgeBaseImpl) 
					pkgs (HashMap) 
						value (DialectRuntimeRegistry) 
							value( JavaDialectRuntimeData) 
								classloader (JavaDialectRuntimeData$PackageClassLoader) 

2) (KieRepositoryImpl) 
	kieModuleRepo (KieRepositoryImpl$KieModuleRepo)
		kieModules (ConcurrentHashMap) 
			segments 
				table [0] (ConcurrentHashMap$HashEntry) 
					value (TreeMap) 
						kBuilders(HashMap) 
							entrySet (HashMap$EntrySet) 
								table [1] (HashMap$Entry) 
									value (KnowledgeBuilderImp) 
continued ============> pkgRegistryMap (LinkedHashMap)
		values (HashMap$Values) 
			this$0 (LinkedHashMap) 
				table (Hashmap$Entry) 
					[5] (LinkedHashMap$Entry) 
						value (PackageRegistry) 														
							dialectCompiletimeRegistry (DialectCompiletimeRegistry) 
								map (HashMap) 
									[10] (HashMap$Entry) 
										value (JavaDialect) 
											packageStoreWrapper (PackageStore) 
												javaDialectRuntimeData (JavaDialectRuntimeData) 
continued ============> classloader (JavaDialectRuntimeData$PackageClassLoader) 

I will close this request as it appears to be working as designed.
-BillT

> Too many classloaders use too much memory for a large rule set
> --------------------------------------------------------------
>
>                 Key: DROOLS-1371
>                 URL: https://issues.jboss.org/browse/DROOLS-1371
>             Project: Drools
>          Issue Type: Bug
>          Components: core engine
>    Affects Versions: 6.3.0.Final
>            Reporter: Bill Tuminaro
>            Assignee: Mario Fusco
>         Attachments: WhyTwoClassoaders.java, drools-1371.PNG
>
>
> Why are there so many classloaders after I create a KieSession for a KieFileSystem and KieContainer that only contains one rule?
> The extra classloaders for each rule are consuming too much memory for a rule set that contains several thousand rules.



--
This message was sent by Atlassian JIRA
(v7.2.3#72005)


More information about the jboss-jira mailing list