потребление памяти при создании объектов Java - PullRequest
0 голосов
/ 01 мая 2020

Я не знаком со всей темой, поэтому я хотел бы задать вам несколько вопросов.

У меня есть функция в моей программе, где я ищу в файловой системе определенные папки, которые соответствуют регулярному выражению Это означает, что я хочу искать в определенной папке все подпапки, которым соответствует определенное регулярное выражение. Кроме того, я не хочу искать в определенных подпапках, которые имеют определенную подпапку с определенным файлом, поэтому я хочу исключить поиск в этих подпапках. Чтобы быть более точным, при поиске в папке X я хочу исключить из поиска все подпапки X, которые имеют указанную подпапку c (Person) и содержат конкретный файл c (personality.xml) в it.

Поэтому я использовал эту "максимально эффективную" функцию 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;
            }               
        });

Теперь мои вопросы:

Если я все время создаю путь для каждой папки и проверяю, существует ли он, разве не созданы какие-то постоянные объекты, которые каким-то образом занимают память? Если да, то какую память они потребляют? Есть ли способ очистить эти объекты, чтобы они не заполняли память или мусор во время поиска? Потому что, во всяком случае, во время поиска, я думаю, что процессор будет интенсивно использоваться, если я применю свой поиск к огромной папке, я хочу избежать каких-либо накладных расходов с точки зрения потребления памяти или использования процессора.

Я очень благодарен за любой совет, подсказку или комментарий.

1 Ответ

1 голос
/ 01 мая 2020

Java является открытым исходным кодом, поэтому вы можете найти источник для Files.walkFileTree. Как именно зависит от вашей IDE, в Eclipse просто нажмите F3. Глядя на источник, можно увидеть, что объект Event, содержащий путь, сбрасывается сразу после вызова вашего посетителя. Если быть точным, я смотрел на Java 11.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...