`
xiongmao0304
  • 浏览: 2893 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

eclipse打包内存溢出

阅读更多

在某个项目组通过eclipse打包模块项目时频繁出现内存溢出问题,项目组采用32位win7操作系统,内存4G,单看机器配置已经算是高配了,在eclipse.ini中将PermSize调到很大仍然报错。 报错信息显示不能创建本地线程native thread。通过两种方法解决了问题:

1、调整ini文件中的jvm内存参数。

调整的关键为:

MaxPermSize PermSize值相等

Xms Xmx值相等

2、调整打包代码。

跟踪调试发现打包内存溢出的触发点为:导出插件项目时,会生成build.xml文件,其中target中大量使用unzip命令,该命令会调用操作系统的native method方法,如果jvm参数中设置的堆+Perm区和Native空间不平衡就很容易报内存溢出问题。

 

 

<target name="@dot.nestedJars">
		<mkdir dir="${buildDirectory}/nestedJars/com.sgcc.uap.integrate.isc_1.5.1.v201308131540"/>
		<unzip src="I:/UAP Studio1.5.1/sguap-server/WEB-INF/repository/platform/Version1.0.0/infrastructure/com.sgcc.uap.integrate.isc_1.5.1.v201308131540.jar" dest="${buildDirectory}/nestedJars/com.sgcc.uap.integrate.isc_1.5.1.v201308131540" overwrite="false">
			<patternset includes="lib/isc_sso_agent.jar"/>
		</unzip>
		。。。。。。。。
</target>
<target name="@dot" depends="init,@dot.nestedJars" unless="@dot" description="Create jar: mpm_sinprjpre_pm @dot.">

 

通过给项目组编写手工build.xml脚本发现,javac编译时,classpath中没有unzip出的lib包也没有问题,于是修改了生成build.xml文件的类,将unziptarget以及对其的依赖删除。修改的类为org.eclipse.pde.build插件中pdebuiler.jar内的ModelBuildScriptGenerator类的generateExtractNestedJars方法和generateCompilationTarget方法。

private List generateExtractNestedJars(List classpath, CompiledEntry entry) {
		List extracted = new ArrayList(classpath.size());
		for (Iterator iterator = classpath.iterator(); iterator.hasNext();) {
			ClasspathElement element = (ClasspathElement) iterator.next();

			if (element.getSubPath() == null)
				extracted.add(element);
		}
		return extracted;
	}
private void generateCompilationTarget(List classpath, CompiledEntry entry) {
		script.println();
		String name = entry.getName(false);
		List extractedPath = generateExtractNestedJars(classpath, entry);

//		String depends = TARGET_INIT + "," + name + TARGET_NESTED_JARS;
		String depends = TARGET_INIT; //$NON-NLS-1$
		IStatus status=new Status(IStatus.INFO, "org.eclipse.pde.build", "generateCompilationTarget方法depends:"+depends);
		BundleHelper.getDefault().getLog().log(status);

 

分享到:
评论
Global site tag (gtag.js) - Google Analytics