我已经在互联网上搜索了一下,但是没有找到与我完全匹配的问题。所以,我决定在这里发帖。
最近,我们的ANT大楼间歇性地抛出以下异常。而且它变得越来越频繁。
该问题与以下内容相关:
但是,测试用例在我们的JVM(IBM Java 7.1)上运行良好。因此,上面提到的错误不应该是原因。
我查看了编译器的源代码,虽然我并不擅长它。
ZipFileIndex.class
public class ZipFileIndex
{
.......
private SoftReference<Inflater> inflaterRef;
......
private int inflate(byte[] paramArrayOfByte1, byte[] paramArrayOfByte2)
{
Inflater localInflater = this.inflaterRef == null ? null : (Inflater)this.inflaterRef.get();
if (localInflater == null) {
this.inflaterRef = new SoftReference(localInflater = new Inflater(true));
}
localInflater.reset();
localInflater.setInput(paramArrayOfByte1);
try {
return localInflater.inflate(paramArrayOfByte2); } catch (DataFormatException localDataFormatException) {
}
return -1;
}
......
}
Inflater.class
......
public void reset() {
synchronized (zsRef) {
ensureOpen();
reset(zsRef.address());
buf = defaultBuf;
finished = false;
needDict = false;
off = len = 0;
}
}
......
public void end() {
synchronized (zsRef) {
long addr = zsRef.address();
zsRef.clear();
if (addr != 0) {
end(addr);
buf = null;
}
}
}
/**
* Closes the decompressor when garbage is collected.
*/
protected void finalize() {
end();
}
private void ensureOpen () {
assert Thread.holdsLock(zsRef);
if (zsRef.address() == 0)
throw new NullPointerException("Inflater has been closed");
}
......
&#34; SoftReference&#34;非常可疑。我们的ANT建筑很容易达到1024米以上,当我将MAX HeapSize设置为1024米时,我仍然可以看到异常。 (现在我把它改成了2048米,手指交叉)。
如果在初始化后立即收集this.inflaterRef:
以下是我的问题:
这是堆栈跟踪*
编译器发生异常(1.7.0内部)。请 在Java Developer Connection上提交一个错误 (http://java.sun.com/webapps/bugreport)检查Bug后 游行重复。包括您的计划和以下内容 报告中的诊断。谢谢。显示java.lang.NullPointerException: Inflater已关闭 java.util.zip.Inflater.ensureOpen(Inflater.java:413)at java.util.zip.Inflater.reset(Inflater.java:375)at com.sun.tools.javac.file.ZipFileIndex.inflate(ZipFileIndex.java:467) 在 com.sun.tools.javac.file.ZipFileIndex.readBytes(ZipFileIndex.java:403) at com.sun.tools.javac.file.ZipFileIndex.read(ZipFileIndex.java:372) at com.sun.tools.javac.file.ZipFileIndex.read(ZipFileIndex.java:372) 在 com.sun.tools.javac.file.ZipFileIndexArchive $ ZipFileIndexFileObject.openInputStream(ZipFileIndexArchive.java:163) at com.sun.tools.javac.jvm.ClassReader.fillIn(ClassReader.java:2219) at com.sun.tools.javac.jvm.ClassReader.complete(ClassReader.java:2151) 在com.sun.tools.javac.code.Symbol.complete(Symbol.java:433)at com.sun.tools.javac.code.Symbol $ ClassSymbol.complete(Symbol.java:833) 在 com.sun.tools.javac.jvm.ClassReader.loadClass(ClassReader.java:2332) 在com.sun.tools.javac.comp.Resolve.loadClass(Resolve.java:1074)at at com.sun.tools.javac.comp.Resolve.findIdentInPackage(Resolve.java:1239) 在com.sun.tools.javac.comp.Attr.selectSym(Attr.java:2404)at at com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:2295)at at com.sun.tools.javac.tree.JCTree $ JCFieldAccess.accept(JCTree.java:1689)
答案 0 :(得分:0)
在过去一周,ANT_OPTS设置为-Xms512m -Xmx2048m,问题再次没有发生。
顺便说一下,当ANT将JAVA_OPTS设置为-Xms512m -Xmx2048m时,它不起作用。