首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java函数内部或外部操作数据,性能会有不同吗?

在java函数内部或外部操作数据,性能会有不同吗?
EN

Stack Overflow用户
提问于 2016-09-28 08:38:03
回答 2查看 46关注 0票数 0

我编写了一些代码作为示例:

代码语言:javascript
复制
public class Main {

    public static void main(String[] args) {
        String hugeString = "a,a,a,a";

        splitOutside(hugeString.split(","));
        splitInside(hugeString);

    }

    private static void splitInside(String string) {
        String splitData[] = string.split(",");
        for (int i = 0; i < splitData.length; i++){
            System.out.print(splitData[i]);
        }
       System.out.println("");
    }

    public static void splitOutside(String[] splitData) {
        for (int i = 0; i < splitData.length; i++){
            System.out.print(splitData[i]);
        }
        System.out.println("");
        }
}

在本例中,我有两个不同的函数,splitOutsidesplitInside

在内存使用方面,它们中的任何一个都比其他的好吗?在函数中拆分字符串会帮助垃圾收集器吗?

就像我说过的,这只是一个很小的例子,真正的代码有巨大的字符串,需要分割,而且它每秒钟都会收到很多这样的字符串。因此,从长远来看,这种差异可能是显而易见的(这是一个需要在100小时以上运行的软件)。

用一种方法还是另一种方法会有什么区别吗?

更新:

这个问题与java how expensive is a method call不一样。

我不是问对方法的调用是否昂贵,而是询问函数内部或外部对String.split();的调用是否有任何不同。

更新2:

如果我有这个怎么办?会不一样吗?

代码语言:javascript
复制
while ((hugeString = br.readLine()) != null) {
    splitOutside(hugeString.split(","));
    splitInside(hugeString);
}

我忘记提到,我经常在一个(几乎)没完没了的循环中从JVM外部阅读(拆分将每秒发生2-10次)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-28 08:51:42

没有什么不同。只有在使用hugeString.split(",")的方法完成之前,才能访问它的结果,因为这是接收引用的代码的唯一部分。同样的情况发生在splitInside方法中。

为了减少占用空间,最好不要将完整的数组保存在内存中,而是一个接一个地查找子字符串:

代码语言:javascript
复制
private static final Pattern PATTERN = Pattern.compile("[^,]*");

private static void splitInside(String string) {
    Matcher matcher = PATTERN.matcher(string);
    while (matcher.find()) {
        System.out.print(matcher.group());
    }
    System.out.println();
}

请注意,这里一次只引用一个子字符串,而不是同时引用所有子字符串。(不过,为Pattern/Matcher添加了一些开销。)

票数 2
EN

Stack Overflow用户

发布于 2016-09-28 08:49:17

没有区别,因为同样的操作将被应用。您甚至可以尝试测量所花费的时间,但老实说,这是没有意义的,您根本不应该担心它,您应该担心的是您的设计,以及是否适合传递一个完整的String或一个拆分的String

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39742154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档