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空间不平衡就很容易报内存溢出问题。

 

 


		
		
			
		
		。。。。。。。。


 

通过给项目组编写手工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);

 

你可能感兴趣的:(eclipse插件开发)