编程语言
首页 > 编程语言> > java – 在过时的JVM上从数组构造String时的JVM ACCESS_VIOLATION_EXCEPTION

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