java – 在过时的JVM上从数组构造String时的JVM ACCESS_VIOLATION_EXCEPTION
作者:互联网
我遇到了一个非常奇怪的情况 – 我有以下代码:
new String(data, position, len, Charset.forName("windows-1255"));
其中data是byte [],position和len是int.
当我在jdk 1.6.0_38上运行它时,它运行速度非常慢(设置迭代时间为411秒),当我运行它时:
new String(data, position, len);
它在不到1秒的时间内运行相同的迭代.
更多数据:
>当我调试它时,进入构造函数(使用Charset)它
抛出JVM ACCESS_VIOLATION_EXCEPTION并死掉.
>当我在jdk 1.7.0_10上运行它运行正常(不到1秒)
谁能解释这种奇怪的行为?
解决方法:
我想你遇到了this问题.文章声称你使用的构造函数是低效的,因为它总是制作所提供的byte []缓冲区的防御性副本,然后可能导致频繁的GCing.我想如果你进行足够长的迭代,性能差异就会变得可见 – 就像文章摘要中提到的那样.
对于访问vialoation,它似乎是this问题.
标签:java,string,jdk1-6 来源: https://codeday.me/bug/20190708/1403571.html