Комментирование System.out.println - PullRequest
4 голосов
/ 10 декабря 2010

Оказывают ли вызовы System.out.println (...) какой-либо эффект, если они оставлены в коде BlackBerry или любом другом языке программирования?

После удаления время компиляции может быть уменьшено, но есть ли какая-либо другая конкретная причина для их удаления?

Ответы [ 11 ]

4 голосов
/ 10 декабря 2010

Перед использованием System.out.println() на Blackberry вам нужно знать несколько вещей:

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

  2. Снижение производительности, которое создает сам System.out.println(), минимально, особенно когда выходной поток ни к чему не подключен (т. Е. Устройство не подключено и не находится в режиме отладки).

Я сам использую препроцессор Blackberry, чтобы отключить все журналы перед выпуском. По этой причине я определяю директиву ведения журнала LOGGING, а затем в своем коде:

//#ifdef LOGGING
System.out.println("LOGGING is enabled");
//#endif

Подробнее о том, как использовать препроцессоры в плагине Blackberry Eclipse, см. this .

1 голос
/ 10 декабря 2010

Хранение System.out заявлений обычно не так уж плохо.Пользователи могут видеть их, поэтому они не всегда хорошо выглядят в производственной среде.Лучшей идеей является использование каркаса ведения журнала, такого как java.util.logging или log4j.Их можно настроить так, чтобы выводить вывод на консоль, в файл, БД, веб-сервис ...

Имейте в виду, что просто потому, что вы не видите вывод, это не значит, что ничего не работаетделается во время выполнения.JVM по-прежнему необходимо создать строку для передачи в system.out (или инструкцию log), которая может занять довольно много памяти / ЦП для больших / сложных объектов, таких как коллекции.

1 голос
/ 10 декабря 2010

Используйте что-то вроде Log4J вместо системных распечаток, это обеспечивает большую гибкость

1 голос
/ 10 декабря 2010

Я не знаю конкретно о Blackberry, но если ваша программа пишет на неизвестное устройство (т. Е. Вы не уверены, куда идет стандарт), возможно, ваше приложение может случайно / случайно / необъяснимо заблокировать на мгновение в попытке написать.

1 голос
/ 10 декабря 2010

Создайте свой собственный метод, например:

public static void consoleMessage(String msg){
  if(DEBUG_FLAG){
    System.out.println(msg);
  }
}

Затем используйте только этот код в своем коде.Это сэкономит вам время на изменение всех строк.

1 голос
/ 10 декабря 2010

Вы должны иметь возможность использовать Ant для предварительной обработки этих строк из вашего исходного кода.(Убедитесь, что ни у одного из них нет побочных эффектов!)

1 голос
/ 10 декабря 2010

Если вы не собираетесь использовать выходные данные для отладки и т. Д.тогда лучше вынуть это.Ваша программа будет работать только с той скоростью, с которой может быть выведена строка, поэтому теоретически, чем меньше системной строки, тем быстрее будет процесс.

Надеюсь, это поможет.

1 голос
/ 10 декабря 2010

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

Кроме того, если вы передаете String в качестве аргумента, они будут занимать некоторое место в байт-коде и в памяти. Возможно, вам не все равно на вашей машине с 173 ПБ ОЗУ, но есть системы с ограниченными ресурсами (например, мобильные устройства).

1 голос
/ 10 декабря 2010

Я предпочитаю использовать флаг для отключения sysouts. Sysouts очень медленные, если вы часто их используете, например. в петлях.

0 голосов
/ 17 января 2015

Операторы Sysout обращаются к синхронизированному общему ресурсу, который вызывает синхронизацию между потоками, использующими его. Это может предотвратить ошибки согласованности памяти в многопоточных программах, если нет другого кода, обеспечивающего синхронизацию. Когда операторы sysout удалены, любые существующие ошибки кода в коде могут появиться впервые.

Пример этого эффекта см .: Цикл не видит измененное значение без оператора печати .

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