I am getting the following PermGen space error in executing the
JasperFillManager.fillReport(reportFile.getPath(), parameters, conn);
in the following code block:
compileFileName = parameters.get("reportName").toString();
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
ServletContext context = (ServletContext) externalContext.getContext();
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
ReportConfigUtil.compileReport(context, getCompileDir(), getCompileFileName());
File reportFile = new File(ReportConfigUtil.getJasperFilePath(context, getCompileDir(), getCompileFileName()+".jasper"));
Class.forName(ReportsConstants.DRIVER);
Connection conn = DriverManager.getConnection(ReportsConstants.DB_ACCESS_URL, ReportsConstants.DB_ACCESS_USER_NAME, ReportsConstants.DB_ACCESS_PASSWORD);
parameters.put("BaseDir", reportFile.getParentFile());
JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), parameters, conn);
The error I am receiving is the following:
Caused by: javax.faces.el.EvaluationException: java.lang.OutOfMemoryError: PermGen space
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
... 19 more
Caused by: java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
My development environment is the following: JSF, PrimeFaces, Hibernate, JasperReports ,Sybase.
What do you friends suggest me to do for resolving the problem?
Increasing the perm gen space can make this problem go away. Adding the following parameter will increase it to 128m
I’m not sure that you can do much in your code to reduce the amount of perm gen space that is being consumed, so I think any solution will have to do with altering the JVM runtime parameters.
You could also consider trying
as well.