Передача и возврат параметров в функции — как сильно влияет на производительность?
Кто-нибудь делал тесты или читал статейки по этому поводу? Сильно ли замедляет обработку большого кол-во данных при передачи строк в другие функции и возврата их назад. К примеру не просто 1 передача, а 2, 3, 4? Раньше никогда даже и не задумывался об этом, но когда речь идет о миллиардах записей и все таки хочется иметь нормальную структуру программы, которую можно гибко использовать, ежели плодить макароны))
private_tm: я думаю он достаточно разбирается в вопросе. Он предложил другую формулировку, если её более строго перефразировать, то получится - в Java методы могут принимать в качестве параметров или возвращать в качестве результата лишь примитивы и ссылки.
Therapyx: конкретно по вашему вопросу - вы не заметите различий. В Java строки константны. Так что при необходимости модификации все равно будут создаваться новые объекты. Создание ссылки и помещение ее в стек занимает пару тактов процессора. При миллиарде записей на это уйдет менее секунды на современном процессоре.
При простых вычислениях узким горлом может оказаться сам вызов функции (что к строкам не относится, т.к. итерация по паре элементов уже будет дороже стоить, чем вызов функции). Но по слухам JIT неплохо работает и инлайнит горячие участки.
Так что я бы вот что посоветовал: пишите код для людей.
Влияет, но не напрямую, а за счет того, что будет больше классов, да и каждый класс будет "весить" больше тем, чем больше в нем функций, поэтому не доводите до крайностей, любое архитектурное разделение должно быть объяснимо практическими задачами.
ну "вес" это совсем не проблема. Тут опять же вопрос в другом. Суть в том, что делать ли просто все столбиком и очень оптимизированно, но будет ОЧЕНЬ не удобно в дальнейшем, но и время может тоже конкретно сэкономить или же все красивенько и логически разложить, но эти строки придется передавать в 1 функцию, оттуда опять будет развлетвение, оттуда пойдет опять же в др. класс итд)) и вот этот путь передачи - это и есть собственно вопрос, как именно он будет влиять на производительность в жаве.
Therapyx: Что значит не проблема, а то что все это загрузится в ОЗУ, да и процессору каждый байт памяти выделить это работа, к тому же данные структурированы, а не просто "сырые" байты.
время может тоже конкретно сэкономить или же все красивенько и логически разложить
Эти вопросы и решаются из практических задач, очень часто в Java все делают чрезмерно гибкое, из-за этого и код писать неудобно и быстродействие плохое.
Что значит не проблема, а то что все это загрузится в ОЗУ, да и процессору каждый байт памяти выделить это работа, к тому же данные структурированы, а не просто "сырые" байты.
Это работа одноразовая, она займет 1 секунду и не будет потом мешать никак, я же говорю про целые дни работы)
п.с. программа, считывающая и обрабатывающая данные много не занимает, все таки 2016 на дворе, 1/1000000-ая занятость оперативки как-то может повлиять на летальный исход производительности?
Therapyx: Как минимум при каждом вызове метода будет мешать.
1/1000000-ая занятость оперативки
Откуда эта цифра, похоже просто из ваших эмоций, чем больше нулей, тем лучше, а эмоции это атрибут скорее офисной "блондинки", а не профессионала! Произведите замеры на своем коде и сделайте выводы, я произвел кое-какие, и буду делать это дальше, вас убеждать не буду, мне это невыгодно, меньше конкурентов!
Rou1997: цифра рандомная, как и высказывания, что код программы на пару кб, будет "мешать".
- Раз в чем-то убеждать не выгодно, то зачем вы вообще тут на сайте сидите? странно получается))
Therapyx: Нет, не рандомные, еще раз, я проводил замеры на своем коде и не только на своем. На сайте сижу, прежде всего, для себя - от скуки, и для тренировки своих навыков и в частности понимания, ну и попутно помогаю тем, кто способен принять помощь, а к вам у меня встречный вопрос: зачем вы здесь спросили про производительность, если все равно ничего оптимизировать не собираетесь?
Rou1997:
- оптимизирую и собираюсь)
- дак тренируя свои навыки вы решаете проблемы других людей, тем самым передавая это понимание и другим людям. А это из верхнего поста - не выгодно для вас.
- Можно поинтерисоваться тогда, как проводились тесты на вашем и коде других людей? В ситуации схожей с моей, где выбор идет на 2-3 функции больше + 2 передачи ссылок, ежели такое же кол-во строк кода, с тем же функционалом, только в макаронной форме(другими словами, 1 строка выполняется полным функционалом в 1 функции, ежели тот же функционал делиться на 2-3 функции, передавая эту строку по ним, т.е. опять же 2-3 раза).
Therapyx:
"А это из верхнего поста - не выгодно для вас."
Бывают ошибки, в целом они достаточно редки и малозначительны что я лично могу ими пренебречь, и я в таких случаях не стану настойчиво уговаривать если сам не уверен в правильности.
По тестам чуть позже отвечу, подавляющее большинство всех тестов производительности - "сферические в вакууме" и не учитывают важных условий которые будут в реальности.
Rou1997: просто у меня шеф написал такое, что пздц. Куча модулей и плагинов используя кучу технологий для обработки данных. Я посидел денька 2 и написал пару важных функций на чистой жаве, используя хеши - это дало 20-кратную производительность, это да.
А вот насчет этого, что-что а человек выше мне ясно напомнил, как я и писал, аш весь ассемблер вспомнил)) и да, передача ссылок - это 1-2 такта. Дак вот я просто сейчас очень не уверен, что 1-2 такта за операцию сыграют значительную роль.
Представьте пусть даже 3 такта на миллиард записей. это (10 в 9 степени * 3). Тоже самое и у процессоров нашего поколения это (10 в 9 степени *3) + умножить на число ядер. Конечно все не использует это ясно. Но при условии 1го ядра это 1 секунда в теории, на практике думаю это не будет превышать 1-й минуты. 1 Минута или удобство, читаемость и дальнейшая легкая модификафия. Ну тут даже думать не надо.
Поэтому и спрашиваю о ваших тестах, конечно если цифры другие, то будет о чем задуматься.