Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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 通过进程标识打开的FileOutputStreams_Java_Memory Leaks_Jprofiler_Yourkit - Fatal编程技术网

Java 通过进程标识打开的FileOutputStreams

Java 通过进程标识打开的FileOutputStreams,java,memory-leaks,jprofiler,yourkit,Java,Memory Leaks,Jprofiler,Yourkit,我们的Java应用程序中存在内存泄漏,因为FileOutputStream打开-关闭差异的数量随着时间的推移而增加。在我们的例子中,堆相当稳定,但由于FileOutputStreams是打开的,所以JVM本机内存中面临内存泄漏 您能否建议一种方法,让我们能够识别代码库中可能导致此泄漏的代码段。在Linux系统上lsof将帮助您识别哪些文件句柄处于打开状态,如果您识别出可能有助于跟踪代码中未正确关闭资源的位置的名称 然而,如果您只是使用一个好的IDE,当资源面临无法关闭的风险时,他们会发出警告,那

我们的Java应用程序中存在内存泄漏,因为FileOutputStream打开-关闭差异的数量随着时间的推移而增加。在我们的例子中,堆相当稳定,但由于FileOutputStreams是打开的,所以JVM本机内存中面临内存泄漏


您能否建议一种方法,让我们能够识别代码库中可能导致此泄漏的代码段。

在Linux系统上
lsof
将帮助您识别哪些文件句柄处于打开状态,如果您识别出可能有助于跟踪代码中未正确关闭资源的位置的名称

然而,如果您只是使用一个好的IDE,当资源面临无法关闭的风险时,他们会发出警告,那么有一种更简单的方法

例如,Eclipse在这一行上标记一条警告,指出
fis1
可能未正确关闭:

FileInputStream fis1 = new FileInputStream(file);
    
。。。如果更改为,警告将消失:

try(FileInputStream fis2 = new FileInputStream(file)) {
}

在Linux系统上,
lsof
将帮助您确定哪些文件句柄处于打开状态,以及您是否能够识别名称,这些名称可能有助于您跟踪代码中未正确关闭资源的位置

然而,如果您只是使用一个好的IDE,当资源面临无法关闭的风险时,他们会发出警告,那么有一种更简单的方法

例如,Eclipse在这一行上标记一条警告,指出
fis1
可能未正确关闭:

FileInputStream fis1 = new FileInputStream(file);
    
。。。如果更改为,警告将消失:

try(FileInputStream fis2 = new FileInputStream(file)) {
}

在JProfiler中,您可以找到未关闭的FileOutputStreams的分配点,如下所示:

  • 记录分配并拍摄堆快照
  • 选择FileOutputStream的所有实例并创建一个新的对象集
  • 选择“传出引用”视图
  • 选择FileOutputStream实例的“closed”字段并通过限制所选值调用“Apply filter->”,然后在值对话框中选择“false”
  • 转到heap walker的“Allocations”视图,检查分配调用堆栈树或分配热点视图

  • 在JProfiler中,您可以找到未关闭文件输出流的分配点,如下所示:

  • 记录分配并拍摄堆快照
  • 选择FileOutputStream的所有实例并创建一个新的对象集
  • 选择“传出引用”视图
  • 选择FileOutputStream实例的“closed”字段并通过限制所选值调用“Apply filter->”,然后在值对话框中选择“false”
  • 转到heap walker的“Allocations”视图,检查分配调用堆栈树或分配热点视图

  • YourKit profiler自动查找所有未关闭的文件输入流:

    • 捕获并打开内存快照

    • 选择“检查”选项卡

    • 在检查树的“其他内存异常”节点中查找。它包含“待完成的非关闭资源”

    • 进行检查


    探查器还能够查找非关闭的文件、目录流、终结器中关闭的流以及许多其他问题。有关更多详细信息,请访问

    YourKit profiler自动查找所有未关闭的文件输入流:

    • 捕获并打开内存快照

    • 选择“检查”选项卡

    • 在检查树的“其他内存异常”节点中查找。它包含“待完成的非关闭资源”

    • 进行检查

    探查器还能够查找非关闭的文件、目录流、终结器中关闭的流以及许多其他问题。详情请浏览