Как да подобрим работата на Java приложения в 9 стъпки

Животът в дигиталната ера е толкова благословия, колкото и безсилие. Когато компютрите и приложенията работят безпроблемно, ние сме склонни да ги приемаме за даденост. Но когато компютърът замръзва или някое приложение прекъсва лаптоп или мобилно устройство, лошата производителност увеличава стреса.

Независимо дали сте разработчик, който има достъп до изходния код или просто краен потребител, който се опитва да ускори дразнещо бавното приложение на Java, имаме добра новина: има стъпки, които можете да предприемете, за да подобрите ефективността.

Java същата като JavaScript?

Накратко, не; Java и JavaScript са две напълно различни технологии. Въпреки че и двете са обектно-ориентирани технологии, Java е среда за разработка, в която програмистите могат да кодират приложения, проектирани да работят локално в паметта на системата.

JavaScript, от друга страна, е създаден да създава уеб приложения и често съвпада с други уеб технологии като HTML и CSS. Днес ще разгледаме най-добрите начини да подобрим ефективността на приложенията, написани на Java, но не и JavaScript.

Причини за лоша производителност на приложението

Причините за недостатъчното приложение са огромни, въпреки че основните причини са малка шепа проблеми. Естествено, първите две причини са лош дизайн и кодиране по номинална стойност.

Въпреки че IDE и редакторите на кодове подчертават тестовете и обектите, за да ги направят по-четими за хората, съществува комуникационна пропаст между компютрите и хората. Ще правите грешки, докато създавате приложение – няма как да го заобиколите.

Понякога компютърът не разбира намерението ви. По-скоро той изпълнява само инструкциите, които са му дадени. В допълнение към алгоритмичните и кодиращи недостатъци, липсата на ресурси е друга често срещана причина.

Локалният хардуер като RAM и CPU цикли влияе на производителността на приложението, както и други ресурси като мрежовата честотна лента. Освен това обърнете внимание, че проблемите с локалната операционна система често влияят на производителността на приложението.

Как да подобрим производителността на приложението на Java – 9 стъпки

Преди да разгледаме по-дълбоко всяка конкретна стъпка, искахме да ви дадем преглед на високо ниво по отношение на това как да подобрите работата на Java приложенията, както следва:

  1. Извършете тестване на профили и натоварвания – профилирането на вашето приложение за Java ще ви помогне да разкриете точки на болка и затруднения.
  2. Почистете кода и ревизирайте алгоритмите – чистият код е по-лесен за поддържане, редактиране, четене и усъвършенстване; ревизирането на вашите алгоритми намалява тавтологичните обаждания на функции.
  3. Избягвайте рекурсия, когато е възможно – рекурсията е необходимо зло в някои случаи, въпреки че трябва да се използва пестеливо.
  4. Надстройте системния хардуер – лошата производителност на приложението може да не се корени в лош код и алгоритми; Вместо това основната причина може да е свързана със системата, изпълняваща приложението.
  5. Увеличете LAN и WAN честотна лента – не всички функции взаимодействат с местния хардуер; ако приложението ви говори с отдалечени системи, мрежовата инфраструктура може да е виновна.
  6. Внимавайте операционната си система – разхвърляните операционни системи се нуждаят от поддръжка, за да стартират приложения, доколкото могат.
  7. Използвайте StringBuilder за подобрена ефективност – струните са почти неизбежни в повечето приложения, но операцията „+ =“ е много неефективна.
  8. Използвайте кеширането за подобрена производителност – кеширането е един от най-добрите начини за намаляване на излишните екземпляри и извиквания на функции.
  9. Фаворизирайте стека над грамадата – стекът е по-ефективен по отношение на системните ресурси, тъй като се поддържа и освобождава паметта, която обединените обекти заемат.

С това казано, да се задълбочим малко по-задълбочено във всеки метод, за да подобрим производителността на приложението на Java.

1. Извършете тестване на профили и натоварвания

Първата стъпка към подобряване на производителността на Java приложения е да се идентифицират областите за подобрение. Без да знаете къде са най-големите проблеми, да се опитате да ускорите приложението е като хвърляне на стрела в дартс, докато е със завързани очи. За щастие има софтуерни инструменти, които събират данни относно производителността на приложението.

Първият инструмент, който бихме препоръчали да използвате, е софтуер за профилиране на Java. Един такъв пример е YourKit, което е решение, което е подходящо както за предприятия, така и за отделни потребители. YourKit предлага различни лицензи като корпоративни, академични, отворен код и опции на място.

Характеристиките му включват, но не се ограничават до следното:

  • Профилиране на производителността на процесора
  • Профилиране на производителността на паметта
  • Откриване на изтичане на памет
  • Анализ на нишки и синхронизация
  • Тестване на уеб, база данни и I / O производителност

Този инструмент е проектиран да се използва в локални системи, отдалечени системи, проекти, които в момента се разработват, и дори производствен софтуер. YourKit обаче не е единственият качествен Java-профилер и има силна конкуренция от други решения като EJ-Technologies, което създаде JProfiler.

Този инструмент е много подобен на YourKit и предоставя опции за тестване на локални и отдалечени сесии, офлайн задействания, сравнения на моментни снимки, проследяване на заявки (HTTP, RMI, уеб услуга, EJB, AWT събития, стартиране на нишки и т.н.) и създаване на персонализирана сонда сред много други функции. накрая, JProfiler също така разполага с инструменти за хардуер, конци, телеметрия и база данни.

2. Почистете кода и ревизирайте алгоритмите

Софтуерният изходен код е като първия проект на роман – той никога не е перфектен след първата итерация и изисква значителни ревизии, преди да бъде окончателно полиран. Първо и най-важното, трябва да се стремите да напишете чист код, наситен с коментари, за да можете да навигирате в текста си и лесно да си спомните защо всеки обект е бил инстанциран и защо всяка функция се е наричала.

Въпреки че поддържането на кода чист няма да доведе до ускоряване на приложението на Java, това ви помага по-ефективно да изрежете ненужния код и да потърсите слабости и излишъци във вашите алгоритми. Чистият код прави процеса на отстраняване на грешки също по-гладък и ви помага да коригирате грешки (като течове на паметта), които сте идентифицирали след профилиране и зареждане на теста на вашия софтуер.

3. Избягвайте рекурсията, когато е възможно

Рекурсията е основна програмна стратегия, в която дадена функция се обажда, за да реши проблем. Рекурсията не е непременно зло, но е меч с две остриета. Той има предимства и практическа употреба. Например, рекурсията прави кода по-чист и по-компактен и намалява тавтологичните повторения на контурите и функциите.

Тъй като рекурсията намалява сложността и обема на кода, тя помага да се направи Java приложение по-лесно за поддържане. За съжаление, тези предимства идват с цената на изпълнение на приложението. Рекурсионните и функционалните обаждания са скъпи по отношение на скоростта и производителността, тъй като изискват поп и push функции на стека.

По-ефикасно решение за рекурсия, от друга страна, е примката. Операциите на цикли могат да бъдат по-трудни за четене и се състоят от повече знаци и изходен код, отколкото рекурсия, но те са за предпочитане, когато ефективността на приложението трябва да бъде максимална. Не винаги е практично да се откажете от рекурсия, но смекчаването й колкото е възможно повече ще помогне за подобряване на производителността на Java приложенията.

4. Надстройте системния хардуер

На пръв поглед може да изглежда, че приложението на Java с ниска ефективност трябва да бъде причинено от проблем със софтуера. Въпреки че може да изглежда контраинтуитивно, първопричината за лоша производителност може да е проблем с хардуера. Независимо дали използвате Java приложение локално или отдалечено, системата, в която работи Java приложението, може да няма достатъчно системни ресурси, за да изпълни кода задоволително.

Най-лесният компонент за надграждане, който обикновено влияе директно върху работата на софтуера, е RAM. С разширяването на обема на паметта в компютъра си, намалявате шанса на системата да изчерпи място за съхранение на данни от приложението и сте принудени да се върнете към използването на твърдия диск като импровизирана RAM памет. Тази практика е известна като файл със страници и макар да има практическа употреба, файловете на страниците са по-нежелателни за приложения с висока производителност от RAM, тъй като процесът на четене и запис е по-бавен на твърд диск.

Освен това, ако вашето приложение Java взаимодейства значително с твърдия диск (като например архивиране на данни или приложение за синхронизиране), надстройката на твърдия диск може да подобри производителността на системата. Например, можете да надстроите до устройство с по-високи RPM за по-бързи процедури за четене и запис. Имайте предвид обаче, че най-бързите твърди дискове са SSD (Solid State Drives) и не съдържат движещи се части. И накрая, някои системи, но не всички, са способни да разширят и процесора, въпреки че не е толкова лесно да се надгражда като RAM.

5. Увеличете LAN и WAN честотната лента

Въпреки че локалният и сървърният хардуер са ключов компонент на Java приложенията, включително Java уеб приложенията, това не е единственото потенциално препятствие. Независимо дали хоствате уеб приложения на Java локално в локална мрежа, в интранет или отдалечено, честотната лента играе решаваща роля по отношение на наличността и производителността на вашите приложения – особено по време на пиково натоварване.

Най-общо казано, честотната лента на LAN обикновено е изобилна и евтина, докато WAN честотната лента е скъпа и с недостиг. Въпреки това, другият трафик на LAN може да изтласка локалната мрежа, към която е свързан сървърът, работещ с уеб приложения на Java. Този проблем може да се реши по един от двата начина.

Първо можете да изберете да надстроите превключватели и локална мрежова инфраструктура до Gigabit Ethernet или 10Gigabit Ethernet решение, за да облекчите задръстванията в мрежата. Като алтернатива можете да приложите QoS (Quality of Service) политика, която дава приоритет на трафика към и от сървъра, хостващ Java приложения, над други видове трафик.

Освен това, в допълнение към увеличаването на честотната лента на WAN (което може да изисква избор на различен ISP), можете да внедрите балансиране на натоварването, за да се възползвате по-добре от излишните ISP връзки. Не забравяйте, че лошо работещите приложения на Java може да не са непременно причинени от проблеми със софтуера и могат да бъдат засегнати от претоварване на мрежата.

6. Подредете операционната си система

Операционните системи изискват поддържането и поддръжката да вървят с максимална производителност и да използват ефективно ресурсите на системата. Необезпокояваната операционна система има тенденция да се забавя и да се чувства мудна. Например, може да имате много невидими процеси, работещи във фонов режим, за които дори не сте знаели.

Освен това процедурата за инсталиране на много приложения автоматично добавя нов софтуер в списъка с приложения, които стартират при стартиране. Тези приложения не само причиняват система да се зарежда по-бавно, но също така свиват жизненоважни системни ресурси като RAM и CPU цикли, които иначе биха могли да бъдат използвани за стартиране на Java приложение.

Подрязването на необходимите и нежелани процеси и приложения ще помогне да подредите операционната си система, както и пускането в системата за почистване на системния регистър. Почистващият регистър може да смекчи и елиминира DLL грешки и грешки по време на изпълнение, като премахва грешни записи в системния регистър и регенерира структурите на индексите.

Освен това, друга задача по домакинство – която трябва да се използва пестеливо – е дефрагментиране на вашия твърд диск. С течение на времето, тъй като файловете непрекъснато се записват и изтриват от твърд диск, те могат да се превърнат в развихряща се хаотична каша. Дефрагментният инструмент закръгля всичките ви данни и ги пренаписва в съседни блокове, което намалява времето на твърдия диск за четене на информация.

Но бъдете предупредени: процесът на дефрагментация е много взискателен и облага данъка върху твърдия диск. Ако го дефрагментирате ежедневно, седмично или дори месечно, ще намалите драстично живота на вашия твърд диск. По-разумната и практична честота е около два до три пъти годишно.

7. Използвайте StringBuilder за подобрена ефективност

Низовете са често срещан тип данни в огромната част от приложенията – те са доста трудни за избягване или игнориране. За съжаление, конкатенацията на струни е толкова неефективна, колкото е честа. Може да изглежда, че най-добрият начин за свързване на низовете е с операцията „+ =“, но това е прекалено използвана операция, която е диво неефективна.

Проблемът е, че операцията „+ =“ отделя изцяло нов низ всеки път, когато се използва, което може да създаде много излишни и ненужни низови данни. Въпреки че използването на тази операция от време на време няма да доведе до спиране на приложението ви Java, всяка малка операция се добавя. Представете си колко пъти тази неефективност може да бъде увеличена в цикъл?

За щастие има по-ефективна алтернатива. Най- StringBuilder обектът е проектиран като ефективна алтернатива на основните операции за свързване. Влезте в навика да използвате този тип данни, вместо да използвате мързеливата стенограма на операцията „+ =“, ако искате да подобрите ефективността на Java приложенията.

8. Използвайте кеширането за подобрена производителност

Кеширането е един от най-ефективните начини за повишаване на ефективността на Java приложенията. Основната концепция на кеширането е да консолидира множество обаждания и функции в един ресурс за многократна употреба. Въпреки че има много форми на кеширане, когато повечето хора тук думата „кеширане“, първото нещо, което ни хрумва, е технологията на базата данни.

Данните, съдържащи се в база данни, не само могат да се кешират локално, за да се запази честотната лента, но също така може и големият обем на връзки към базата данни, който иначе би забавил приложението. Въпреки това, имайте предвид, че кеширането не трябва да се използва прекомерно. Може би интуитивно мислите, че всичко трябва да се кешира в случай, че трябва да го използвате отново в близко бъдеще. Трябва обаче да се уверите, че данните и връзките, които кеширате, са достатъчно многобройни, за да видите печалба в производителността.

9. Предпочитайте стека над грамадата

За подобрена производителност на приложението Java, съхранявайте данните си в стека, вместо на купчината. Защо питаш? Защото използва по-ефективно паметта и премахва данни, които вече са изпълнили своята цел. Не само, че стекът използва по-ефективно ресурсите, но също така държи под контрол над главата. Най-добрият начин за предпочитане на стека над купището е да се избегнат инстанциални класове за опаковане.

Точно както използването на рекурсия, не винаги е възможно (или дори възможно) да се откаже от използването на клас на обвивка. Но като общо правило, трябва по подразбиране да използвате примитивни типове данни като “int”, за разлика от Integer. Броят на постиженията на производителността, които можете да извлечете от използването на тази тактика, зависи от множество фактори. Независимо от това, предпочитането на стека е добро ръководство за намиране на пътя към най-обикновения и най-ефективен Java код.

На пазара има инструменти, които ще ви помогнат успешно да актуализирате Java кръпки. Един такъв инструмент е SolarWinds Patch Manager.

SolarWinds Patch Manager

Можете да изтеглите напълно функциониращ 30-дневен безплатен пробен период

SolarWinds Patch ManagerDownload 30-дневна БЕЗПЛАТНА пробна версия

Свързани: Най-добри инструменти за управление на пластирите

В допълнение, трябва да проверите SolarWinds Инструмент за наблюдение на Java за сървъри на приложения със сървър & Монитор на приложения за подобряване на производителността. Можете да изтеглите напълно функциониращ 30-дневен безплатен пробен период.

SolarWinds Инструмент за мониторинг на Java за сървъри на приложения със SAMDownload 30-дневна БЕЗПЛАТНА пробна версия

Заключителни мисли

Ако бавното, пълзещо приложение на Java накара кръвта ви да заври, поемете дълбоко въздух и не забравяйте да не чукате юмруци по клавиатурата си – това само ще влоши нещата. Вместо това поемете дълбоко въздух и използвайте един от гореспоменатите методи за ускоряване на работата на Java приложението.

Ако имате лични истории или анекдоти относно ускоряването на Java приложения, ние ви каним да коментирате по-долу.

About the author

Comments

  1. ivnost – StringBuilder е по-ефективен от String, когато става дума за конкатенация на низове. Използвайте кеширането за подобрена производителност – кеширането може да намали времето за зареждане на данни и да подобри производителността на приложението. Предпочитайте стека над грамадата – стекът е по-бърз от грамадата, когато става дума за изпълнение на функции. В крайна сметка, за да подобрите ефективността на приложението на Java, трябва да се фокусирате върху оптимизирането на кода, използването на подходящи инструменти за тестване и профилиране, както и на подобряването на системните ресурси. Следвайки тези стъпки, ще можете да намалите стреса, свързан с лошата производителност на приложението и да се наслаждавате на благословията на живота в дигиталната ера.

Comments are closed.