Archive

Posts Tagged ‘Программирование’

Язык программирования go: Часть 1. Краткий обзор и основы программирования

Июль 8th, 2011

Источник

На рынке языков программирования появился новый игрок – язык программирования go от компании Google. Если верить официальным заявлениям Google, то go – это универсальный язык, пригодный для любых задач. Google анонсировал язык go в 2009 году, и с тех пор он немного изменился, но цели и задачи у него остались прежние: этот язык предназначен для системного программирования и по своей сути очень похож на С++.

Язык go — это компилируемый и многопоточный язык общего назначения, имеющий много общих черт с языком С++, поэтому для успешного освоения представленного материала необходимы определенные знания в C++.

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

В настоящее время поддержка языка go присутствует на платформах Linux, MacOS и FreeBSD. Удивляет отсутствие платформы Windows в этом списке, но работы ведутся, и скоро пользователи Windows смогут также попробовать go. С ходом работ по переносу go на ОС Windows можно ознакомиться на этой странице. На данный момент язык go может создавать исполняемый код для процессоров i386, amd64 и ARM. Кроме компилятора от компании Google, существует еще компилятор gccgo из коллекции GNU.

Read more...

, , , , , ,

Внезапное закрытие Java-приложения: как избежать?

Июнь 26th, 2011

Источник

Во многих случаях, у программистов возникает необходимость выполнить некоторые действия в момент, когда пользователь заканчивает работу с приложением. Но проблема состоит в том, что пользователи не всегда пользуются рекомендованными и правильными способами выхода из приложения. Java предоставляет элегантный подход к выполнению какого-либо кода в середине процесса выгрузки процесса вашего приложения, таким образом гарантируя, что этот код, который, например, занимается какими-либо “очистительными” операциями, будет обязательно выполнен. Эта статья рассказывает о том, каким образом можно вешать обработчик прерывания работы приложения для гарантированного выполнения завершающего кода, независимо от того, каким образом пользователь завершил работу с вашим приложением.

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

Во многих случаях, вы надеетесь на то, что пользователь закроет приложение “нормальным” для вас способом. Например, в первом случае вы можете предоставить ему компонент JButton, после клика на который выполняются необходимые завершающие операции и осуществляется непосредственно выход из приложения. Как альтернативный вариант вы можете повесить обработчик события окна, который бы обрабатывал событие windowClosing. Tomcat же использует специальный batch-файл, который может быть выполнен при правильном завершении работы с приложением. Однако, хорошо известно, что пользователи далеко не так часто корректно завершают работу с приложениями. Они могут делать с приложениями все, что пожелают. Помимо этого пользователь может просто-напросто закрыть консоль или завершить свой сеанс работы с операционной системой, оставив при этом ваше приложение незакрытым.

Read more...

, , , , , , ,

Избегайте switch! Используйте enum!

Май 26th, 2011

Источник

Недавно мне пришлось проводить рефакторинг некоторого кода и я заметил, что большая часть кода состояла из структур switch-case или if-else каскадов. И тогда я вспомнил статью Дэниэла и решил воспользоваться его четырьмя правилами для того чтобы избавиться от этого безобразия. Допустим у нас есть конструкции вида:

switch (value) {
case SOME_CONSTANT:
//do something
break;
case SOME_OTHER_CONSTANT:
//do something else
break;
...
default:
//do something totally different
break;
}

или эквивалентные if-else каскады.

Read more...

, , , ,

Виды ссылок на объекты в Java

Февраль 10th, 2011

Источник

В данной статье рассматривается использование классов из стандартного пакета  java.lang.ref , таких как SoftReference,  WeakReferencePhantomReference .

Рассмотрим пример когда эти классы могут понадобиться.

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

Здесь можно пойти разными путями, рассмотрим некоторые:

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

2. Использовать механизм "слабых ссылок" в Java.

Read more...

, , , , , ,

Основы сборки мусора в Hotspot JVM

Февраль 6th, 2011

Источник

Сборка мусора в языке Java является предметом постоянных обсуждений и всевозможных заблуждений. В этом посте мы постараемся пролить свет на некоторые аспекты работы сборщика мусора в виртуальной машине Hotspot JVM.

Спецификация виртуальной машины не содержит каких-либо требований к механизму управления памятью (кроме того, что «память очищается автоматически с помощью механизма сборки мусора»), поэтому при реализации сборщика мусора разработчики ничем не ограничены. JDK 6 предоставляет 3 сборщика мусора: последовательный SerialGC, параллельный ParallelGC, совместный ConcMarkSweepGC.

Причина поддержки различных алгоритмов сборки мусора заключается в том, что виртуальная машина может использоваться для запуска приложений разного типа и размера на машинах с различными доступными ресурсами. Очевидно, алгоритмы сборки мусора для запуска пасьянса на домашнем компьютере могут быть неэффективны для большого серверного приложения, работающего на машине, имеющей в распоряжении гигабайты оперативной памяти и несколько десятков процессоров. Различные типы приложений могут иметь различные требования к работе сборщика мусора: для одних важно минимизировать длительность пауз в работе приложения, вызванных сборщиком мусора, другие приложения могут позволять более длительные паузы, увеличивается при этом общую производительность (throughput).

Read more...

, , , , , , , ,