|
|
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Делаем слегка запутанный цикл, чтобы JIT не зверствовал и считаем среднее по средним итерациям для int и long: микротест Код: sql 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Запускается всё с "Нужный\путь\java.exe -server -Xshare:off -jar test.jar". share:off, т.к. share:on - ненадёжная вещь, которая не влияет на скорость. server, т.к. клиентская VM есть только в 32-разрядной версии и, к тому же, на ней всё ещё более кисло: Код: plaintext 1. 2. 3. 4. Athlon II X2 250 3ГГц/6Гб, Windows 7 SP1. Учитывая, что из JRE серверная JVM выпилена, начинаю понимать, почему народ считает яву тормозом. Ну и, собственно, вопрос: разброс производительности воспроизводится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 15:08 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Странное что-то. У мну всё норм: Код: java 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 15:18 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
http://ru.wikibooks.org/wiki/Java/Типы_данных int 32 бит от -2147483648 до 2147483647 long 64 бит от -9223372036854775808 до 9223372036854775807 на 32 битном проце: int - 1 инструкция long - 2 инструкции (и два регистра) Что и видим, на 64 битов - скорость почти одинаковая. На 32 битов от сильного падения до чуть меньше двухкратного кол-во занимаемых регистров значительно более важно. Возможно, что > двух раз разница, это именно не возможность вписать код в доступные регистры процессора. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 15:21 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Хм ... Если у вас - Intel, то похоже на косяк JIT для AMD-процов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 15:24 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Можно тупой вопрос, а что Вас удивляет? А то я, если честно, вообще как-то всю глубину проблемы не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 15:28 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevint 32 бит от -2147483648 до 2147483647 long 64 бит от -9223372036854775808 до 9223372036854775807 на 32 битном проце: int - 1 инструкция long - 2 инструкции (и два регистра)1. Я, как бы, в курсе; 2. Забыл упомянуть, но по контексту и объёму памяти должно было быть понятно, что и проц и винда - 64-разрядные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 15:28 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovХм ... Если у вас - Intel, то похоже на косяк JIT для AMD-процов. Какой нафиг JIT??? Клиентская JVM это раз. Она интерпретирует до упора. JIT компилирует методы целиком - это два. Test.main(), который запускается 1 раз он компилировать не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 15:30 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevА то я, если честно, вообще как-то всю глубину проблемы не понял.Сравните (мой) цифры для Client и Server 32-разрядной JVM. Ясен перец, что просадка будет, но ведь не настолько же ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 15:30 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovЗапускаем и для long получаем неслабую такую просадку на 32-разрядной JVM и при чем тут нижеследующее? Basil A. Sidorov2. Забыл упомянуть, но по контексту и объёму памяти должно было быть понятно, что и проц и винда - 64-разрядные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 15:30 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovЯсен перец, что просадка будет, но ведь не настолько же ... Насколько? сложение чисел - одна машинная операция vs две машинные операции. Два раза деление, остаток от деления - тут разница должна быть больше плюс, возможно, не вписываемся в регистры. Тогда кроме арифметики получаем еще и задержку на лишний доступ в память, в оптимизированном варианте Теперь осталось переписать данный код на C, скомпилировать в 32-битный ASM и сравнить ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 15:34 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov2. Забыл упомянуть, но по контексту и объёму памяти должно было быть понятно, что и проц и винда - 64-разрядные. Скорее всего из-за этого тормоза. У меня 32х битная винда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 15:36 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, в рамках такого тонкого теста я-бы форсировал CompileThreshold. И для полноты теста я-бы смотрел матрицу вида JRE6/JRE7/JRE8 и по вертикали W32/Win32_x64/Linux32/32_x64. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 15:46 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovСравните (мой) цифры для Client и Server 32-разрядной JVM. Ясен перец, что просадка будет, но ведь не настолько же ... Сервер запускает JIT компиляцию, клиент нет. Что удивляет? BlazkowiczJIT компилирует методы целиком - это два. Test.main(), который запускается 1 раз он компилировать не будет. Не правда. JIT, ссуко, умный. Почти как суслик. Он в динамике методы перекомпилирует и перелинковыет (переинлайневает). AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 17:33 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevНе правда. JIT, ссуко, умный. Почти как суслик. Он в динамике методы перекомпилирует и перелинковыет (переинлайневает). AFAIK У Василия в тесте один метод. Хрен там чего JIT перелинкует и перекомпилирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 17:36 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
BlazkowiczУ Василия в тесте один метод. Хрен там чего JIT перелинкует и перекомпилирует. Будет время, запущу с логом. Но AFAIK современным JRE это пофиг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 17:40 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevБудет время, запущу с логом. Но AFAIK современным JRE это пофиг Был не прав. Чего-то там компиляет. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 17:51 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Перенёс пузомерочные циклы в отдельные методы, изменил протоколирование, увеличил число циклов: пузомерка+ Код: sql 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. С 32-разрядными JVM всё гораздо гораздее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Выводы (для 64-разрядной Windows 7) остаются прежними: 1. Серверная JVM изначально исполняет гораздо более оптимальный код; 2. Если метод вызывается несколько раз, то серверная JVM может ускорить выполнение ещё на 15-30 процентов; 3. Клиентская JVM тоже оптимизирует повторные вызовы, но чисто косметически - не более трёх процентов. полный протокол запусков Код: plaintext 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 1. По возможности, не использовать 32-разрядную JRE на 64-разрядной системе. 2. Если установлен 32-разрядный JDK или из него "выдрана" JRE, то поменять порядок строк в jre\lib\i386\jvm.cfg. Было: Код: plaintext 1. 2. Код: plaintext 1. 2. P.S. Удочка приложена, поэтому запуски на других OS/JVM оставляются тем, у кого есть другие OS/JVM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 18:16 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovПо возможности, не использовать 32-разрядную JRE на 64-разрядной системе. Спасибо . Для меня ценное замечание. Никогда не об этом не знал/не думал. В принципе, с учетом, что в 64 разрядном режиме даже регистров процессора общего назначения почти в 2-а раза больше - удивляться не чему. Слабое место x86 архитектуры, мало кол-во регистров общего назначения, наконец пофиксили. Х.з. правда как ))) Опять небось префексов наплодили. Даже на 32-битный HEX код с префиксами смотреть без слез было нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 18:20 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Дык, в соседнем топике я давал ссылку на спецификации AMD64. Для "интересующихся" основное изложено в первом томе, ну и можно ещё посмотреть второй. Достаточно пробежаться по диагонали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 18:24 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovПо возможности, не использовать 32-разрядную JRE на 64-разрядной системе.когда ещё был сан и ещё задолго до этого они сами писали об этом :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 23:06 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Ubuntu 12.04.5 LTS Linux HELLBOT 3.5.0-54-generic #81~precise1-Ubuntu SMP Tue Jul 15 04:05:58 UTC 2014 i686 i686 i386 GNU/Linux java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) Client VM (build 24.51-b03, mixed mode) Код: powershell 1. 2. 3. 4. 5. 6. Код: powershell 1. 2. 3. 4. 5. 6. Код: powershell 1. 2. 3. 4. 5. 6. 7. 8. Код: powershell 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 10:03 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
А аб чем топег?Basil A. SidorovУчитывая, что из JRE серверная JVM выпилена, начинаю понимать, почему народ считает яву тормозом. А может, эт самое, тормоз тот кто пишет такие специально замудреные, запутаные циклы? И да, где exeшник на C, чтобы сравнить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 10:55 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Kenny FartmanА может, эт самое, тормоз тот кто пишет такие специально замудреные, запутаные циклы?Тормоз тот, кто не знаком с возможностями оптимизации JIT.И да, где exeшник на C, чтобы сравнить?Если я захочу сравнивать це и жабу - перейду в "Программирование". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 12:09 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 14:10 |
|
||
|
Числодробительность
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovKenny FartmanА может, эт самое, тормоз тот кто пишет такие специально замудреные, запутаные циклы?Тормоз тот, кто не знаком с возможностями оптимизации JITВот именно. Может быть кое-кто не знаком с условиями когда JIT начинает применяться к коду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 17:43 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38808625&tid=2126229]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
173ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
82ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 529ms |

| 0 / 0 |
