Наскільки щвидко працює Java Reflection API
Моя попередня замітка присвячена викорисатанню Java Reflection API. На основі цієї технології працює багато фішок мови Java. Наприклад Serialization та Enterprise Java Beans. Фактично всі вони полегшують дуже сильно життя розробнику ПО з використанням Java. Однак, вже доволі давно я прочитав в Developing without EJB про те, що все що базується на основі цієї технології працює не дуже швидко. Тести я дуже люблю, тому вирішив перевірити, наскільки це твердження правдиве. А незодавно в мене з'явилась хвилинка часу, для цього.
Методика тестування
За основу для написання тесту я взяв свій невадалий тест для перевірки швикдості виклику методу в java.
Однак тоді виникла проблема з тим, що JIT від Sun дуже добре передбачає такі речі, як розрахунки та виконує їх миттєво. Тому в якості методу, який я викликаю, я вирішив використовувати щось складніше ніж простий інкремент. Вирішив використовувати суму випадкових чисел, де кожне наступне число отримується за формулою:
rand = (max*rand+min)%(max-min);
Перший член такоъ послідовності береться на основі миттєвого таймштампу. Такий генератор випадкових чисел хоч і є дуже брудним, однак працює доволі непогано для широкого діапазону значень max та min.
..Читати даліМагія відображень.
Ніколи не замислювались, яким чином прицюють IDE, що дозволяють на льоту підхоплювати список методів та полів класу, з усіма правилами доступу та списком параметрів. Коли вперше побачив таку штуку, це здавалось фактично ідеалом. Не знаю як там в з іншими мовами програмування, а для Java є досить проста технологія, що дозволяє роботи такі цікаві штуки, як доступ до властивостей та методів будь-якого класу, там самим відкриваючи можливості легкого написання інтегрованих середовищ для розробки, різноманітних відлогоджувачів, середовищ для тестування. Сьогодні хочу розповісти про чудову можливість, що присутня в мові java - Java Reflection API.
Для того, щоб цікавіше було розбиратись з усим цим, пропоною в процесі роботи поставити собі за мету розробку такого "велосипеду" - простої автоматизованої системи тестування коду написаного на java. Звичайно ж системи простої, однак основні принципи роботи Reflection API та систем автоматизованого тестування зрозуміти можна і на невеликому прикладі.
..Читати даліНевдалий тест для Java
Декілька днів тому писав про дослідження швидкості виклику метода в мові php. І в кінці статті сказав, що цікаво було б подивитись на швидкодію всього цього щастя в інших мовах. І так як мені легше за все було створити аналогічний тест на java, то цим і зайнявся. Ну ось хочу поділитись результатами з Вами.
Замітка написана частково для того, щоб розвіяти міф про низьку швидкодію java, яким часто намагаються маніпулювати прихильники php (які на java жодного рядку програмного коду не писали і жодних замірів швидкодіє не проводили) і не тільки php в холіварах. Сподіваюсь, Вам буде цікаво.
Написанння тесту
Тест я вирішив для економії часу спростити. Оцінював лише час виконання без виклику методів, через виклик статичного метода звичайного метода, та метода, що звертається до статичних даних. Деякі тести для java написати не можливо (тут немає аналога $GLOBALS та функцій), а деякі повторювати було нецікаво.
..Читати даліJava native compiler
Безліч змін в житті разом з радістю принесли і деякі тимчасові клопоти. Ну ніяк не можу увійти в звичний графік та встигати займатись всим тим, чим займався до переїзду та одруження. Основна причина цього - небажання шукати для всього цього час :) Ну до деяких справ я повертаюсь. Ну що ж. Спробую потрошку повертатись і до ведення блога.
Ну а тепер до справи. Всі звикли до того, що Java - інтерпретована мова програмування, що потребує для виконання попередньо встановленої віртуальної машини. Якщо Ви до цього часу не стикались з Java і нічого не знали, то тепер будете знати. Скільки я колись мав проблем, завдяки любові до цієї мови: от приходжу до університету здавати чесно зроблені лаболаторні роботи, а тут тобі сюрприз - невдається запустити, бо віртуальної машини немає в адиторії.
І ось зовсім нещодавно шукаючи спосіб зібрати *.exe файл з *.cpp коду під Linux наштовхнувся на чудову річ, якої мені колись так не вистачало. Це JavaNativeCompiler - програма, що дозволяє створювати бінарні виконувані файли, компілюючи програмний код написаний мовою java. Ось так розвіявся міф, котрий для мене декілька років був реальністю.
..Читати далі



