Java存储流的内容“存储”在哪里?

时间:2009-01-27 11:31:25

标签: java memory stream profiler

我在分析器下运行我的应用程序。具有最大内存消耗的“类”是char[],在我的应用程序中大约为10 kB。

然后我创建了一个InputStream(确切地说PipedInputStream),它保存了300 MB的字节数组数据。

然后我看了一下我的探查器,我没有看到任何重大变化(看不到任何东西吃300 MB的东西)。

问题是,如果300 MB的字节数组不在内存中,Java保存在哪里?

[更新] 有关我如何获得300 MB到PipedInputStream的其他信息:

我正在开发一个具有文件上传机制的Web应用程序。 在我上传文件的其中一个过程中,我创建了一个输入流(PipedInputStream)。基本上,

  1. 我读取了multipartfile的输入流(一次只有几KB字节[]),
  2. 创建了PipedOutputStream
  3. 创建了PipedInputStream(将最近创建的输出流传递给构造函数)
  4. 将multipart的输入流写入我的PipedOutputStream(在一个单独的线程上运行;在退出线程之前刷新并关闭该输出流)。 此时,我现在在我自己的输入流中有一个多部分字节的副本
  5. 然后(意外地)将我的输入流存储在我的http会话中(关于这是一个好主意的讨论/辩论将是另一个问题)
  6. 那么接下来的问题是,Java在哪里保留我的InputStream内容(我在我的探查器中没有看到它)?

    [更新#2]

    我有FileOutputStreamPipedInputStream读取并写入文件。

2 个答案:

答案 0 :(得分:2)

PipedInputStream由连接到的输出流写入时,它只是使数据可用。只要您从输入流中继续读取输入流中的数据,就不会有太多数据需要缓冲。

如果这没有帮助,您需要提供有关您使用管道输入流做什么的更多信息 - 它连接到哪个输出流,以及从中读取什么?

编辑:您还没有说出PipedInputStream的内容。必须有的东西,否则PipedOutputStream会阻止 - PipedInputStream只有一个相当小的缓冲区(默认情况下)。

答案 1 :(得分:0)

PipedInputStream根本不存储任何数据。另外,从哪里获得300 MB字节数组?