|
|
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Почему создать новый примитив быстрее, чем изменить существующий? Всегда думал, что на самом деле все наоборот, мол изменить переменную быстрее, чем создавать новую. Вот решил проверить: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Результат: Код: java 1. 2. Почему так получается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 21:21:36 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
а вот так запусти:) Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Ох уж эти бенчмарки на java......:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 21:41:16 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
кстати изменить примтив нельзя:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 21:42:32 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
забыл ник, после компиляции разве будет разный байт код? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 21:43:32 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. Эм, и в чем причина? )) Что за бенчмарки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 21:46:19 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
rdm, ну попробуй) А вообще поясни что ты имел ввиду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 21:46:36 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
забыл никкстати изменить примтив нельзя:) А где мне про это почитать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 21:47:42 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
забыл никrdm, ну попробуй) А вообще поясни что ты имел ввиду. Я имел ввиду, что нет разницы между объявлением переменной вне цикла и внутри тела цикла. Компилятор выдаст один байт код. Вроде бы даже цикла будет такой Код: java 1. 2. 3. 4. 5. 6. Компилятор или JVM сам заменит на StringBuffer/Builder, что память не расходовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 21:51:53 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
Паша01 Код: java 1. 2. 3. Эм, и в чем причина? )) Что за бенчмарки? Бенчмарк - это то что вы написали, это когда ты меряешь производительность чего-либо. Так вот, я буквально два дня назад описывал, почему бенчмарки в java так тяжело написать правильно http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1012487&msg=14088086 В твоем случае, вообще непонятно что ты меряешь:) Изменить примитив нельзя, в этом и есть его отличие от объекта, создается он не в куче а на стеке, короче он в любом случае создается, поэтому и время исполнения должно быть примерно одинаковым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 21:54:31 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
rdmКомпилятор или JVM сам заменит на StringBuffer/Builder, что память не расходовать. Что-то ты не в ту оперу залез, мы вроде другое обсуждаем. Смотри с ArrayList: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Результат: Код: java 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 21:57:20 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
rdmЯ имел ввиду, что нет разницы между объявлением переменной вне цикла и внутри тела цикла. Компилятор выдаст один байт код. Верно для примтивов, неверно для объектов, коим как раз и является String rdmВроде бы даже цикла будет такой Код: java 1. 2. 3. 4. 5. 6. Компилятор или JVM сам заменит на StringBuffer/Builder, что память не расходовать. Тоже верно, только при чем тут это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 21:58:15 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 22:01:05 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
Паша01, у меня с эррей листами - такой результат d2 = 8900 d1 = 7652 d3 = 7604 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 22:03:21 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
забыл ник, я думаю верно для все неизменяемого. ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 22:03:51 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
Паша01забыл никИзменить примитив нельзя Как так?! А почему?! Ну потому что примитив это ячейка в памяти, у нее нет состояния, она размещена на стеке а не в куче, как в случае с объектом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 22:05:38 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
забыл ник, а если изменить содержимое ячейки памяти, на которую ссылается переменная, то значение данной переменной не изменится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 02:59:34 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
Думаю, если бы ты задумался, почему, к примеру, Integer может быть null, а int - нет, что такое куча и стек, об intern-значениях объектов, то подобный вопрос не возникал бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 04:20:03 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
IDVsbruck, Да, а какие конкретно мысли, связанные с описанными тобой понятиями, избавили бы меня от подобного вопроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 05:47:24 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
забыл никНу потому что примитив это ячейка в памяти, у нее нет состояния, она размещена на стеке а не в куче, как в случае с объектом Ячейка в памяти на то и нужна, чтобы хранить изменяемое состояние, и не важно, на стеке она или в куче. То, что вы написали, не поддается определению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 08:37:25 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
забыл никИзменить примитив нельзя, в этом и есть его отличие от объекта, создается он не в куче а на стеке, короче он в любом случае создается, поэтому и время исполнения должно быть примерно одинаковым. Хотелось Бы прояснить: 1) Почему нельзя изменить примитив? Ведь, если создается переменная, то с ней связывается область в памяти. Соответственно, если изменяется содержимое этой области, то изменяется и значение переменной. 2) ИМХО, время доступа к элементу, расположенному на стеке должно быть быстрее, чем к элементу в куче. Или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 10:09:11 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
Дорогие юниоры, перестаньте бредить. И начните с терминологии. Переменная - он же ячейка памяти. Локальная переменная - на стеке. Поле класса - в куче. Примитив - тип переменной. "создать новый примитив" = "создать новый не ссылочный тип переменной" - нельзя в Java создать новый тип. "изменть примитив" = "изменить тип переменной" - нельзя в Java изменить тип переменной. Статическая типизация. "изменить значение примитива" - это сокращение от "изменить значение переменой примитивного типе" - это просто операция присвоение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 11:22:57 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
Если под словом "примитив" подразумевать примитивный тип данных, а не переменную этого типа, тогда вообще бессмысленно сравнивать "примитив" с объектом, так как "объект" является экземпляром типа данных "класс", а не типом данных. Что дает основания предполагать, что под "примитивом" в тексте подразумевалась таки "переменная" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 12:03:00 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz"изменить значение переменой примитивного типе" - это просто операция присвоение. Ясно, значит неправильно сформулировал вопрос, вот почему удивился ответу выше. А во время этой операции присвоения нового значения переменной примитивного типа просто переписывается значение ячейки памяти, ничего нового не создается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 12:15:44 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
вникающийЕсли под словом "примитив" подразумевать примитивный тип данных, а не переменную этого типа, тогда вообще бессмысленно сравнивать "примитив" с объектом, так как "объект" является экземпляром типа данных "класс", а не типом данных. Что дает основания предполагать, что под "примитивом" в тексте подразумевалась таки "переменная" Отлично! Поэтому когда имеете ввиду "переменную", то и писать стоит про "переменную". А не про "примитив". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 12:16:01 |
|
||
|
Почему создать новый примитив быстрее, чем изменить существующий?
|
|||
|---|---|---|---|
|
#18+
Паша01Ясно, значит неправильно сформулировал вопрос, вот почему удивился ответу выше. А во время этой операции присвоения нового значения переменной примитивного типа просто переписывается значение ячейки памяти, ничего нового не создается? Здесь так много факторов, что сложно перечислить все сразу. Лично вам стоит отложить ненадолго Java и изучить основы ассембелера. Чтобы понять, что такое стэк, как вообще работают инструкции. Стоит так же почитать о компиляторах, как именно они преборазовывают код к инструкции уровня ассемблера. А вот после этого, когда появиться понимание основ, вы можете посмотреть как выглядит байкт код после компиляции, и оценить что вызвало разницу. Дело в том что код, который вы привели изначально, после компиляции может быть оптимизировать и достаточно сильно отличатся. И после этого стоит почитать статьи о micro-benchmarking в Java. Дело в том что существует 100500 разных факторов, которые могут влиять на ваш тест. JIT, GC, Server/Client JVM и т.п. Их все стоит учитывать если вам интересны реальные замеры. В первом приближении, стоит написать два метода и сравнить их байткод. Найти разницу и посмотреть в чем именно она заключается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 12:31:28 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38199998&tid=2129684]: |
0ms |
get settings: |
14ms |
get forum list: |
25ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
51ms |
get topic data: |
17ms |
get forum data: |
5ms |
get page messages: |
95ms |
get tp. blocked users: |
2ms |
| others: | 275ms |
| total: | 498ms |

| 0 / 0 |
