Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 出于性能原因,为什么将大字符串作为返回类型传递是错误的?_Java_Algorithm_Design Patterns - Fatal编程技术网

Java 出于性能原因,为什么将大字符串作为返回类型传递是错误的?

Java 出于性能原因,为什么将大字符串作为返回类型传递是错误的?,java,algorithm,design-patterns,Java,Algorithm,Design Patterns,我正在开发一个功能,它获取数据并存储在默认目录中的文件中,在默认目录的末尾,我们需要以某种数据结构的形式从文件中传递数据 此时,its决定不使用字符串数组,因为传回超过4mb的数据会降低性能。但是当我这么说的时候,我不明白这会给我们带来什么样的损失 Hashmap下面还使用了一个数组,这正是我们要做的。一般来说,我不会说传递大字符串应该是性能关键。一旦数据存储在你的工作记忆中,传递它就不应该是不可察觉的。事实上,从硬盘读取4 mb数据将是一项I/O密集型任务,可能会导致明显的GUI冻结(至少在不

我正在开发一个功能,它获取数据并存储在默认目录中的文件中,在默认目录的末尾,我们需要以某种数据结构的形式从文件中传递数据

此时,its决定不使用
字符串数组
,因为传回超过4mb的数据会降低性能。但是当我这么说的时候,我不明白这会给我们带来什么样的损失


Hashmap
下面还使用了一个
数组,这正是我们要做的。

一般来说,我不会说传递大字符串应该是性能关键。一旦数据存储在你的工作记忆中,传递它就不应该是不可察觉的。事实上,从硬盘读取4 mb数据将是一项I/O密集型任务,可能会导致明显的GUI冻结(至少在不使用异步方法的情况下)。

问题并不是返回潜在的大结果,性能问题源于产生调用方实际上并不需要的大结果

例如Class.getResource()调用家族。想象一下,它们不是一个URL或流,而是被设计为返回一个包含实际数据的字节[]。现在对于一个拥有大量媒体资源的多媒体应用程序来说,这将是致命的;对于简单地获取媒体资源的头信息,调用实际上会导致整个资源被拉入内存,前几个KB将被实际使用,其余的将被丢弃。很明显,这是对内存和处理时间的浪费


因此,一个大的结果可能会导致大量的工作白费。

这与如何构造4mb字符串以及代码的调用者如何使用返回值有更多关系。返回4mb字符串不一定是一个糟糕的设计。我认为您会将引用传递给数组(数组最终也只存储对字符串的引用),因此我认为没有问题。您确定这是您的性能问题吗?在Java中传递或返回单个变量总是需要复制一(1)个机器字作为引用(无论其大小)。Java没有复制语义。除非创建结构的显式副本,否则不会有任何苛刻的成本。当然,如果您不需要所有的数据,那么首先就不应该创建结构(不管是什么结构)?我想你会发现字符串数组的性能。