创建Java对象时的内存消耗

创建Java对象时的内存消耗,java,memory,garbage-collection,nio,cpu-usage,Java,Memory,Garbage Collection,Nio,Cpu Usage,我对整个主题不熟悉,所以我想问你几个问题 我的程序中有一个功能,在文件系统中搜索与正则表达式匹配的特定文件夹。这意味着,我想在特定文件夹中搜索与特定正则表达式匹配的所有子文件夹。此外,我不想在具有特定文件的特定子文件夹的特定子文件夹中搜索,因此我想排除在这些子文件夹中的搜索。更准确地说,当我在文件夹X中搜索时,我想从搜索中排除X中所有具有特定子文件夹(Person)且其中包含特定文件(personality.xml)的子文件夹 因此,我使用了java.nio的这个“尽可能高效”的特性:Files

我对整个主题不熟悉,所以我想问你几个问题

我的程序中有一个功能,在文件系统中搜索与正则表达式匹配的特定文件夹。这意味着,我想在特定文件夹中搜索与特定正则表达式匹配的所有子文件夹。此外,我不想在具有特定文件的特定子文件夹的特定子文件夹中搜索,因此我想排除在这些子文件夹中的搜索。更准确地说,当我在文件夹X中搜索时,我想从搜索中排除X中所有具有特定子文件夹(
Person
)且其中包含特定文件(
personality.xml
)的子文件夹

因此,我使用了java.nio的这个“尽可能高效”的特性:
Files.walkFileTree

以下是我的实现:

        List<Path> paths = new ArrayList<>();
        String regex = "myRegex";
        Files.walkFileTree(Paths.get("myPathWhereIWantSearchAllSubfoldesr")), new SimpleFileVisitor<>(){

            @Override
            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
                if(Files.isHidden(dir)){
                    return FileVisitResult.SKIP_SUBTREE;
                }

                if(dir.toFile().getName().contains(regex)){
                    paths.add(dir);
                }

                if(Files.exists(Paths.get(String.valueOf(dir), "Config", "ComponentConfig.xml"))){
                    return FileVisitResult.SKIP_SUBTREE;
                }

                return FileVisitResult.CONTINUE;
            }               
        });
List path=new ArrayList();
字符串regex=“myRegex”;
Files.walkFileTree(path.get(“myPathWhereIWantSearchAllSubfoldesr”)),新的SimpleFileVisitor(){
@凌驾
公共文件VisitResult preVisitDirectory(路径目录,基本文件属性属性属性)引发IOException{
if(Files.ishiden(dir)){
返回FileVisitResult.SKIP_子树;
}
if(dir.toFile().getName().contains(regex)){
添加路径(dir);
}
if(Files.exists(path.get(String.valueOf(dir),“Config”,“ComponentConfig.xml”)){
返回FileVisitResult.SKIP_子树;
}
返回FileVisitResult.CONTINUE;
}               
});
现在我的问题是:

如果我一直为每个文件夹创建一个路径,并查看它是否存在,是否会创建某种永久对象,以某种方式消耗内存?如果是这样,他们会消耗什么样的内存?有没有办法清理这些对象,使它们在搜索过程中不会填满内存或任何垃圾?因为无论如何,在搜索过程中,我认为CPU将被大量使用,如果我将搜索应用到一个巨大的文件夹,我希望避免内存消耗或CPU使用方面的任何开销


非常感谢您的建议、提示或评论。

Java是开源的,因此您可以在源代码中查找
文件。walkFileTree
。具体如何取决于您的IDE,在Eclipse中只需点击F3。查看源代码,可以看到事件对象(包含路径)在调用访问者后立即被丢弃。确切地说,我在看Java11