有人能抛出'java.lang.InternalError'或'java.lang.UnknownError'吗?

有人能抛出'java.lang.InternalError'或'java.lang.UnknownError'吗?,java,exception,Java,Exception,我一直很好奇a或a怎么能被扔出去 我的意思不简单 throw new InternalError(); throw new UnknownError(); 但是JavaSE库或JVM本身抛出了一个(使用最近常用的Oracle实现) 例如,我想要的答案是,使really抛出内部错误的特定代码或环境。下面是它的源代码 public Object clone() { try { ArrayList<?> v = (ArrayList<?>) super

我一直很好奇a或a怎么能被扔出去

我的意思不简单

throw new InternalError();
throw new UnknownError();
但是JavaSE库或JVM本身抛出了一个(使用最近常用的Oracle实现)

例如,我想要的答案是,使really抛出
内部错误的特定代码或环境。下面是它的源代码

public Object clone() {
    try {
        ArrayList<?> v = (ArrayList<?>) super.clone();
        v.elementData = Arrays.copyOf(elementData, size);
        v.modCount = 0;
        return v;
    } catch (CloneNotSupportedException e) {
        // this shouldn't happen, since we are Cloneable
        throw new InternalError(e);
    }
}
公共对象克隆(){
试一试{
ArrayList v=(ArrayList)super.clone();
v、 elementData=Arrays.copyOf(elementData,size);
v、 modCount=0;
返回v;
}捕获(CloneNotSupportedException e){
//这不应该发生,因为我们是可克隆的
抛出新的内部错误(e);
}
}

如果您想发挥您的好奇心,请转到页面,并以
内部错误
未知错误
作为关键字搜索bug

这些报告几乎都是bug,其中有人设法导致出现
内部错误
未知错误
。。。不仅仅是理论上的可能性

注:

  • 这些错误中的大多数可能是历史性的;i、 e.在早期版本的Java中修复。(但你没有明确说明你所说的是哪个版本。最近有多晚?通常是谁的?)

  • 许多旧的bug似乎被隐藏在公众视线之外。当您单击搜索结果中的链接时,它会将您从返回到搜索。(如果你不喜欢,向甲骨文投诉……不是我。)



<> P>除了所报告的bug之外,如果您准备干扰java安装(例如,调整“RT.jar文件”)或在本机代码中混乱,可能会有很多方法导致这些错误发生。

< P>我在C++代码中嵌入的JVM中看到了这种情况。虽然这是一个模糊的案例,但我认为它显示了导致抛出内部错误的类型

    静态链接C++代码与LIbz
  • 创建嵌入式JVM
  • 尝试在hadoop.so可用的hadoop环境中使用org.apache.hadoop.io.compress.zlib.ZlibDecompressor
  • so将尝试一些本机代码加载,并最终获得堆栈跟踪
虽然我们从未精确地确定不兼容性的本质,但是从C++代码中删除了静态链接到LIbz(从而让它找到LIbz。因此,1)解决了这个问题。
java.lang.InternalError
org.apache.hadoop.io.compress.zlib.ZlibDecompressor.init(Native Method)
org.apache.hadoop.io.compress.zlib.ZlibDecompressor.<init>(ZlibDecompressor.java:115)
...
System.load("library1");
// library1 statically links an incompatible libz version
System.load("libz");
// use libz via java native methods