Неэффективно ли передавать большие объекты в качестве параметров в Java? - PullRequest
31 голосов
/ 29 июля 2011

Скажем, например, у меня есть класс A, который создает экземпляр довольно большого объекта B. Неэффективна ли передача B в качестве параметра методу в классе C?

То есть он просто передает ссылку или также сдвигает память объекта?

Спасибо.

Ответы [ 8 ]

60 голосов
/ 29 июля 2011

Он просто передает ссылку. Важно понимать, что значение любого выражения в Java равно никогда объекту. Это только когда-либо ссылка или примитивное значение.

Это относится не только к передаче параметров - важно понимать типы возвращаемых данных, массивы, простое присвоение и т. Д.

13 голосов
/ 29 июля 2011

Java может передавать в метод только два вида значений:

  • примитивные значения (int, char, double, ...) или
  • ссылки на объекты

Невозможно передать весь объект "по значению".

Это означает, что вам не нужно беспокоиться о том, насколько велик ваш объект.что вы "проходите мимо".

7 голосов
/ 29 июля 2011

Это не неэффективно, потому что в метод передается только ссылка на объект.

5 голосов
/ 19 августа 2013

Пока ваши вызовы являются локальными (тот же размер JVM), размер объекта не должен иметь значения, однако, когда ваше приложение использует удаленные вызовы, такие как RMI / Web Service (через JVM), большие объекты способны значительно замедлить ваше приложение.из-за огромного количества данных, которые будут маршалироваться / демаршалироваться, и задержки сети, связанной с каждым удаленным вызовом.

3 голосов
/ 29 июля 2011

Как уже говорили другие, в Java у вас есть только передача по значению. Эти значения являются только примитивами и ссылками. Самый большой примитив или ссылка может быть 8-байтовым. ИМХО, нет такой вещи, как большой аргумент.

2 голосов
/ 29 июля 2011

Нет ничего лучше, чем сдвиг памяти ... он просто передает фактическую ссылку ... и само слово ссылки обозначает некоторый адрес ... так что нет проблем ... его эффективнее, чем передача параметров, которая действительно делает код более сложным ... может бытьвот почему SUN добавил его в Java ...

1 голос
/ 29 июля 2011

Java передает ссылки на объекты по значению . С точки зрения производительности не имеет значения, является ли ссылка на объект, передаваемая в C, большой или нет.

1 голос
/ 29 июля 2011

Это просто передать ссылку в качестве значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...