Подтвердить что ты не робот

Является ли использование дженериков в Java влиять на производительность?

Общие понятия были в Java с версии 5. Каковы последствия использования дженериков в Java-приложении и объясните причины их влияния на производительность?

4b9b3361

Ответ 1

Generics - это функция времени компиляции. Это не влияет на работу приложения.

Как и большинство вопросов производительности; гораздо важнее написать четкий и простой код, и это часто дает очень хорошую производительность.

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

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

Ответ 2

Это влияет на производительность приложения и как?

Нет, это не повлияет на производительность, поскольку оно даже не существует во время выполнения.

От официальной тропы:

Когда генерируется родовой тип, компилятор переводит эти типы с помощью метода типа erasure - процесса, в котором компилятор удаляет всю информацию, связанную с параметрами типа и аргументами типа в классе или методе.


Как я проиллюстрировал здесь, обе эти программы переводят на тот же байт-код:

import java.util.*;

class Test {
    public static void main(String[] args) {
        List<String> l = new ArrayList<String>();
        l.add("hello");
        System.out.println(l.get(0).length());
    }
}

 

import java.util.*;

class Test2 {
    public static void main(String[] args) {
        List l = new ArrayList();
        l.add("hello");
        System.out.println(((String) l.get(0)).length());
    }
}

Ответ 3

Да, это влияет на производительность, потому что компилятор создает типы-роли.

Например:

List<String> strings = ...
String first = strings.get(0);

станет:

List strings;
String first = (String)string.get(0);

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

Ответ 4

Общие характеристики не влияют на производительность выполнения. Однако они могут положительно повлиять на эффективность вашего развития. Благодаря генерикам вы получаете дополнительные проверки во время компиляции, так что вы можете быстрее обнаруживать определенные ошибки.