Управление памятью для объекта, который имеет файл. - PullRequest
2 голосов
/ 28 июля 2011

Мне было интересно, может ли кто-нибудь объяснить лучшее решение для наименьшего объема памяти для объекта, у которого есть файл, в следующей ситуации ...

  1. Может быть от 1 до нескольких сотен классов Foo.
  2. Безопасность на дороге будет важна в будущем.
  3. Не каждый файл класса Foo доступен каждый раз.
  4. Каждый файл уникален.
  5. Файл в классе Foo может быть доступен более одного раза.

Я планировал профилировать решения ниже, чтобы найти самый низкий объем памяти, и у меня есть хорошая идея, какой из них будет работать лучше, но меня интересовали некоторые отзывы. Решение 1 кажется лучшим подходом, но оно склонно к утечкам памяти, когда что-то получает доступ к получателю. Мысли

Решение 1:

public class Foo{
        private final String pathToFile;

        public class Foo(String pathToFile){
            this.pathToFile = pathToFile;
        }

        public File getFile(){ 
            return new File(pathToFile);
        }
}

Решение 2:

 public class Foo{
        private final File file;

        public class Foo(String pathToFile){
            this.file = new File(pathToFile);
        }

        public File getFile(){ 
            return file;
        }
    }

Решение 3:

public class Foo{
        private final String pathToFile;
        private File file = null;

        public class Foo(String pathToFile){
            this.pathToFile = pathToFile;
        }

        public File getFile(){ 
            if (file == null){
                file = new File(pathToFile);
            }

            return file;
        }
}

Ответы [ 2 ]

1 голос
/ 28 июля 2011

Все зависит от того, что вы хотите сделать с программой. Если вам нужен путь в других местах, у вас должна быть ссылка на это.если вам нужен файл, вам снова понадобится ссылка.Другое решение, которое вы могли бы сделать, - во втором решении есть метод, который будет возвращать путь: file.getPath();

В общем, либо первое решение (если вам нужен путь в какой-то момент), либо решение 2, если выне.

0 голосов
/ 28 июля 2011

Это действительно не должно иметь большого значения в любом случае.Первая опция будет создавать новую ссылку на файл каждый раз, когда она вызывается, поэтому, если вы вызовете ее 100 000 раз И сохраните ссылку на файлы, это может оказать влияние.В противном случае это зависит только от того, имеет ли смысл иметь ссылку на файл объектов Foo или Foo - это скорее сервис, чем объект, и его цель - вернуть любую разумную ссылку на файл.

...