Я должен посмотреть на байт-код, который является продуктом компилятором Java?

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

    function myFunction () {
  var promises = [];
  var promise = undefined;
   fetch("https://jsonplaceholder.typicode.com/albums").then(first_response => {
       first_response.json().then(function(value) {
            for (var i = 0; i < value.length; i++){
              promise = fetch("https://jsonplaceholder.typicode.com/users/?id="+value[i].id)
                  .then(second_response => second_response.json())
                  .then(value => console.log(value))   
              promises.push(promise)
            }
        Promise.all(promises).then(function(){ console.log("Done!");});
       });
   });
}

https://codepen.io/Shajith/pen/vPGGPJ?editors=0010

6
задан Boune 29 April 2009 в 04:46
поделиться

4 ответа

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

Это может быть Хорошо, так как просмотр байт-кода может помочь понять, как исходный код Java будет скомпилирован в байт-код Java. Кроме того, это может дать некоторые идеи о том, какую оптимизацию будет выполнять компилятор, и, возможно, некоторые ограничения по объему оптимизации, которую может выполнить компилятор.

Например, если выполняется конкатенация строк, javac оптимизирует объединение для использования StringBuilder и выполнения добавления методов для объединения String s.

Однако, если выполняется объединение строк в цикле, новый StringBuilder может быть создан на каждой итерации, что приводит к возможному снижению производительности по сравнению с ручным созданием StringBuilder вне цикла и выполнением только добавления внутри цикла .

К вопросу о JIT. Компиляция точно в срок будет зависеть от реализации JVM, поэтому не очень легко узнать, что на самом деле происходит с байт-кодом, когда он конвертируется в собственный код, и, более того, мы не можем сказать, какие части JITted (по крайней мере, не без некоторых специфичных для JVM инструментов, чтобы увидеть, какой тип JIT-компиляции выполняется - я не знаю каких-либо особенностей в этой области, поэтому я просто размышляю.)

Тем не менее, JVM все равно выполнит байт-код, способ его выполнения более или менее непрозрачен для разработчика, и опять же, специфичен для JVM. Могут быть некоторые трюки с производительностью, которые одна JVM выполняет, а другая нет.

Когда дело доходит до вопроса просмотра сгенерированного байт-кода, он сводится к изучению того, что на самом деле происходит с исходным кодом, когда он компилируется. Байт-код. Возможность видеть виды оптимизаций, выполняемых компилятором, а также понимать, что существуют ограничения на то, как компилятор может выполнять оптимизацию.

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

JVM-специфичны. Могут быть некоторые трюки с производительностью, которые одна JVM выполняет, а другая нет.

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

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

JVM-специфичны. Могут быть некоторые трюки с производительностью, которые одна JVM выполняет, а другая нет.

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

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

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

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

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

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

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

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

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

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

17
ответ дан 8 December 2019 в 05:57
поделиться

That depends entirely on what you're trying to do. If you're trying to optimize a method/module, looking at the byte code is going to be a waste of your time. Always profile first to find where your bottlenecks are, then optimize the bottlenecks. If your bottleneck seems as tight as it possibly can be and you need to make it faster, you may have no choice but to rewrite that in native code and interface with JNI.

Trying to optimize the generated bytecode will be of little help, since the JIT compiler will do a lot of work, and you won't have much of an idea of exactly what it's doing.

4
ответ дан 8 December 2019 в 05:57
поделиться

I wouldn't think so. Short of having to debug the javac compiler or wanting to know as a matter of interest, I cannot think of one good reason why someone would care what bytecode gets generated.

Knowing bytecode won't make you a better Java programmer any more than knowing how an internal combustion engine works will make you a better driver.

Think in terms of abstractions. You don't need to know about the actions of quarks or atoms when trying to calculate the orbits of planets. To be a good Java programmer, you should probably learn ... um .. Java. Yes, Java, that's it :-)

1
ответ дан 8 December 2019 в 05:57
поделиться

Unless you're developing a high-capacity server of some sort, you'll likely never need to examine the bytecode, except out of curiosity. Source code that adheres to acceptable coding practices in your organization will provide ample performance for most applications.

Don't fret over performance until you've found issues after load-testing your application (or the entire customer service force lynches you for that screen that takes "forever" to load). Then, hammer away at the bottlenecks and leave the rest of the code alone.

Bytecode requires a modest learning curve to understand. Sure, it never hurts to learn more, but pragmatism suggests putting it off until it's necessary. (And should that moment come, I recommend finding someone to mentor you.)

0
ответ дан 8 December 2019 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: