其中是Java管道流的内容';存储的';?

其中是Java管道流的内容';存储的';?,java,memory,stream,profiler,Java,Memory,Stream,Profiler,我正在探查器下运行我的应用程序。内存消耗最多的“类”是char[],在我的应用程序中约为10KB 然后我创建了一个InputStream(PipedInputStream),它保存300 MB的字节数组数据 然后我看了一下我的分析器,没有看到任何显著的变化(没有看到任何地方有占用300MB的内容) 问题是,如果300 MB字节数组不在内存中,Java将它保存在哪里 [更新] 有关我如何将300 MB数据传输到我的PipedInputStream的其他信息: 我正在开发一个具有文件上传机制的web

我正在探查器下运行我的应用程序。内存消耗最多的“类”是
char[]
,在我的应用程序中约为10KB

然后我创建了一个
InputStream
PipedInputStream
),它保存300 MB的字节数组数据

然后我看了一下我的分析器,没有看到任何显著的变化(没有看到任何地方有占用300MB的内容)

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

[更新] 有关我如何将300 MB数据传输到我的
PipedInputStream
的其他信息:

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

  • 我读取多部分文件的输入流(每次读取几KB字节[])
  • 创建了一个
    PipedOutputStream
  • 创建了一个
    PipedInputStream
    (将最近创建的输出流传递给构造函数)
  • 将多部分的输入流写入my
    PipeDoutpStream
    (在单独的线程上运行;在退出线程之前刷新并关闭该输出流)。现在,我在自己的输入流中有了多部分字节的副本
  • 然后(意外地)将该输入流存储在我的http会话中(关于这是否是一个好主意的讨论/辩论将在另一个问题上进行)
  • 那么问题又来了,Java把我的
    InputStream
    的内容保存在哪里(我在我的分析器中没有看到它)

    [更新#2]


    我有一个
    FileOutputStream
    ,它从
    PipedInputStream
    读取并写入一个文件。

    a
    PipedInputStream
    只在它所连接的输出流写入数据时使数据可用。只要您保持从输入流读取数据的速度与从输出流接收数据的速度一样快,缓冲区中就不会有太多数据

    如果这没有帮助,您需要提供更多关于您正在使用管道输入流执行的操作的信息—它连接到什么输出流,以及从中读取什么


    编辑:你还没有说出你的
    PipedInputStream中读到了什么。某些内容必须是,否则
    PipedOutputStream
    将阻塞-
    PipedInputStream
    只有一个相当小的缓冲区(默认情况下)。

    a根本不存储任何数据。另外,您从何处获得300 MB字节数组?

    问题中提供了其他信息。谢谢你。刚刚添加了更新#2。。我现在开始明白你想说什么了。谢谢。问题中提供了更多信息。ThanksA PipedInputStream确实存储数据-它存储已写入附加输出流的内容,但尚未从输入流读取。然而,它不应该缓冲太多的数据…这个答案是错误的。默认情况下,PipedInputStream具有1k缓冲区。可以通过重写类来更改此大小。当缓冲区已满,等待线程从流中读取时,连接的PipedOutputStream将阻止写入操作。否则,两个线程都是可运行的。