簡體   English   中英

memory 創建對象時的消耗 Java

[英]memory consumption when creating objects Java

我對整個主題不熟悉,所以我想問你幾個問題。

我的程序中有一個功能,我可以在文件系統中搜索與正則表達式匹配的某些文件夾。這意味着,我想在某個文件夾中搜索與某個正則表達式匹配的所有子文件夾。 此外,我不想在具有特定文件的特定子文件夾的特定子文件夾中進行搜索,因此我想排除在這些子文件夾中的搜索。 更准確地說,當我在文件夾 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;
            }               
        });

現在我的問題:

如果我一直為每個文件夾創建一個路徑並查看它是否存在,是不是創建了某種永久對象以某種方式用完 memory? 如果是這樣,他們消耗什么樣的 memory? 有什么方法可以清理這些對象,以免它們在搜索過程中填滿 memory 或任何垃圾? 因為無論如何在搜索期間,我認為 CPU 將被大量使用,如果我將搜索應用到一個巨大的文件夾,我想避免在 memory 消耗或 CPU 使用方面的任何開銷。

我非常感謝任何建議、提示或評論。

Java 是開源的,因此您可以查找Files.walkFileTree的源代碼。 究竟如何取決於您的 IDE,在 Eclipse 中只需按 F3。 查看源代碼可以看到包含路徑的事件 object 在調用您的訪問者后立即被丟棄。 准確地說,我在看 Java 11。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM