Одного разу зустрілися JMeter і незнайомка...


Кадр з фільму «Будинок біля озера». Зустріч (www.kinopoisk.ru)

Джим ще не знав, як підійти до неї, з чого почати розмову і на якій мові його вести. Але він бачив багато, володів мовами і мав в рукаві не один козир. І будучи впевненим допомоги вірних друзів (це ми з вами) і забувши про сумніви, йшов на зустріч долі.

Нижче розповідь про те, як Джим завойовував знову і знову серце незнайомій системи. Не подумайте, що незнайомок було кілька. Вона була одна, єдина, але така різна, і від того історії будуть слідувати одна за одною.

Читати далі →

NIO: між Сциллою і Харибдою?

Одним з широко висвітлюватимуться властивостей фреймворку java.NIO є неблокируемость, що означає здатність до паралельного виконання операцій вводу-виводу і обчислень. Якщо додаток, запросившее читання файлу, має обчислювальну задачу, яку можна обробити до отримання даних з файлу, то стає можливим одночасне виконання цих операцій. У разі відкладеного запису, можливостей для паралелізму ще більше, так як при записі, на відміну від читання, додаток не очікує надходження даних.
Читати далі →

Викликаємо Java код з Love2D


Всім доброго часу доби!
Виникла потреба вбудувати рекламу в свою гру на Love2D. Вирішив показувати банер після виграшу гравця і тут виникли труднощі: банер викликається Java кодом програми, а виграш визначається Lua коді. Пов'язує їх код на Сі, туториалов, як додавати свої методи движок не було, і довелося копирсатися в коді самостійно. Репозиторій Love2D для Android лежить ось тут.
Читати далі →

Пишемо обгортку для FUSE на Java Native Runtime

У статті я розповім як реалізувати файлову систему в юзерспейсе на Java, без рядка ядерного коду. А також покажу як зв'язати Java і нативний код без написання коду на C, при цьому зберігаючи максимальну продуктивність.



Цікаво? Ласкаво просимо під кат!

Читати далі →

Прискорюємо додаток Android за допомогою Golang

image

Розробка мобільних додатків — це завжди компроміс між тим, що хочеться зробити, і тим, що дозволяє зробити платформа пристрою. У цій статті розповідається про те, як збільшити можливості програми Android за допомогою Golang.

Читати далі →

Легкотравний виклик Java методів з нативного коду

Існує досить багато додатків під Android, які поєднують C++ і Java код. Де Java виступає обгорткою/прошарком, а C++ виконує всю брудну роботу. Мабуть, яскравим прикладом можуть служити ігри. У зв'язку з цим часто доводиться викликати Java код з нативного для доступу до системних властивостей і плюшок, які надає система (переключиться на іншу активність, послати або завантажити що-небудь з інтернету). Причин багато, а одна проблема: кожен раз доводиться писати в кращому випадку 5 рядків коду і пам'ятати, яку сигнатуру функції потрібно запхати в параметр. Потім ще потрібно перевести ці параметри в потрібний тип. Стандартний приклад з туториалов:

long f (int n, String s, float g); 

Рядок-сигнатура для даного методу буде (ILjava/lang/String;F)J.

Зручно Вам це все запам'ятовувати? А перекладати З-рядки в jstring? Мені — ні. Мені хочеться писати:

CallStaticMethod<long>(className, "f", 1, 1.2 f); 


Читати далі →

Hello from android qt

Ця стаття про те, як подружити мови Java та C++ в одному додаток для операційної системи Android.

На С++ написано величезну кількість коду. Мені хотілося б якось використати цей код в свої додатки, але чомусь у мене процес використання викликав якийсь дискомфорт. Скоріше всього, це банально, було пов'язано з тим, що основою моєї робочої середовищем є Android Studio, в якій робота з нативним кодом, скажімо так, не найкраща. Але думка про те, щоб комфортно розробляти додаток з нативною частиною не залишав мене ніколи. Тому я вирішив спробувати схрестити всю міць бібліотеки Qt і додаток, написане на рідному для Android мовою Java.

Читати далі →

Доріг чи native метод? «Секретна» розширення JNI

    
Для чого Java-програмісти вдаються до native методів? Іноді, щоб скористатися сторонньою DLL бібліотекою. В інших випадках, щоб прискорити критичний алгоритм за рахунок оптимізованого коду на C або асемблері. Наприклад, для обробки потокового медіа, для стиснення, шифрування і т.п.
 
Але виклик native методу не безкоштовний. Часом, накладні витрати на JNI виявляються навіть більше, ніж виграш в продуктивності. А все тому, що вони включають в себе:
 
     
  1. створення stack frame;
  2.  
  3. перекладання аргументів відповідно до ABI ;
  4.  
  5. огортання посилань в JNI хендла (
    jobject
    );
  6.  
  7. передачу додаткових аргументів
    JNIEnv*
    і
    jclass
    ;
  8.  
  9. захоплення і звільнення монітора, якщо метод
    synchronized
    ;
  10.  
  11. «ледачу» лінковку нативной функції;
  12.  
  13. трасування входу і виходу з методу;
  14.  
  15. переклад потоку зі стану
    in_Java
    в
    in_native
    і назад;
  16.  
  17. перевірку необхідності safepoint;
  18.  
  19. обробку можливих винятків.
  20.  
Але найчастіше native методи прості: вони не кидають винятків, не створюють нові об'єкти в купі, не оминають стек, не працюють з хендлов і не синхронізовані. Чи можна для них не робити зайвих дій?
 
Так, і сьогодні я розповім про недокументованих можливостях HotSpot JVM для прискореного виклику простих JNI методів. Хоча ця оптимізація з'явилася ще з перших версій Java 7, що дивно, про неї ще ніхто ніде не писав.
 
Читати далі →