Java字节码类定义

4

我目前正在从事一个与字节码分析相关的项目。我遇到了以下代码:

char[] buff = new char[1];
//some code tainting the buff   
return (new String(buff));

在字节码中,我找到了new String(buff)的相关映射,如下:

Ljava/lang/StringValue.cache

你们中的任何一个人能解释一下这个cache字段是从哪里出现的吗?


它来自于jdk i.6的StringValue。根据描述,“此类仅由操作字符串用于存储值的字符数组的静态方法组成。”

有人能解释一下吗?它的目的是什么?我认为主要是因为他们使用了字符缓冲区作为传递给字符串的参数。该类不修改缓冲区的内容,相反,我认为它只是一个网关,用于说明缓冲区的内容仅用于初始化字符串。


2
用哪个编译器?我在JDK 7中没有看到这个。 - user207421
我的编译器是jdk 1.6。 - P basak
你使用什么类型的编译器?是gcj吗? - caoxudong
我正在使用Mac,所以可能不是gcj。 - P basak
2个回答

2

那实际上不应该是可能的。以下是您发布的序列在最近的Javac编译后的样子。

iconst_1
newarray char
astore_1
new java/lang/String
dup
aload_1
invokespecial java/lang/String <init> ([C)V
areturn

此外,在jre1.7.0_17中,java/lang/StringValue甚至不存在。此外,句号的存在表明它可能是Jasmin合并类/方法令牌之一,这种情况下它实际上是指一个在Ljava包中的类,不知道那是什么。
有两种主要可能性-编译器出了问题或反汇编器出了问题。如果您在这里发布类文件,我们至少可以确定其中一种情况。

0

这显然是一种方法,如果已经存在具有相同内容的缓存字符串,则返回缓存的字符串。实际上就像String.intern()。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接