Как Вы улучшили бы Дальвик? Виртуальная машина Android

У меня была похожая проблема: мне приходилось ждать существования контроля и проверять интервалы Поскольку в JavaScript нет реального сна, ожидания или паузы, а использование await / async не поддерживается должным образом в Internet Explorer, я принял решение, используя setTimeOut и ввод функции в случае успешного поиска элемента. Вот полный пример кода, так что каждый может воспроизвести и использовать его для своего собственного проекта:

<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script type="text/javascript">
        var ElementSearchStatus = {
            None: 0,
            Found: 1,
            NotFound: 2,
            Timeout: 3
        };

        var maxTimeout = 5;
        var timeoutMiliseconds = 1000;

        function waitForElement(elementId, count, timeout, onSuccessFunction) {
            ++count;
            var elementSearchStatus = existsElement(elementId, count, timeout);
            if (elementSearchStatus == ElementSearchStatus.None) {
                window.setTimeout(waitForElement, timeoutMiliseconds, elementId, count, timeout, onSuccessFunction);
            }
            else {
                if (elementSearchStatus == ElementSearchStatus.Found) {
                    onSuccessFunction();
                }
            }
        }

        function existsElement(elementId, count, timeout) {
            var foundElements = $("#" + elementId);
            if (foundElements.length > 0 || count > timeout) {
                if (foundElements.length > 0) {
                    console.log(elementId + " found");
                    return ElementSearchStatus.Found;
                }
                else {
                    console.log("Search for " + elementId + " timed out after " + count + " tries.");
                    return ElementSearchStatus.Timeout;
                }
            }
            else {
                console.log("waiting for " + elementId + " after " + count + " of " + timeout);
                return ElementSearchStatus.None;
            }
        }

        function main() {
            waitForElement("StartButton", 0, maxTimeout, function () {
                console.log("found StartButton!");
                DoOtherStuff("StartButton2")
            });
        }

        function DoOtherStuff(elementId) {
            waitForElement(elementId, 0, maxTimeout, function () {
                console.log("found " + elementId);
                DoOtherStuff("StartButton3");
            });
        }
    </script>
</head>
<body>
    <button type="button" id="StartButton" onclick="main();">Start Test</button>
    <button type="button" id="StartButton2" onclick="alert('Hey ya Start Button 2');">Show alert</button>
</body>
</html>
17
задан Seki 13 June 2015 в 09:40
поделиться

3 ответа

  1. Better garbage collection: compacting at minimum (to eliminate memory fragmentation problems experienced today), ideally less CPU intensive at doing the collection itself (to reduce the "my game frame rates suck" complaints)
  2. JIT, as you cite
  3. Enough documentation that, when coupled with an NDK, somebody sufficiently crazy could compile Dalvik bytecode to native code for an AOT compilation option
  4. Make it separable from Android itself, such that other projects might experiment with it and community contributions might arrive in greater quantity and at a faster clip

I'm sure I could come up other ideas if you need them.

18
ответ дан 30 November 2019 в 13:40
поделиться

Одной из основных проблем Dalvik является производительность, о которой я слышал ужасно, но мне больше всего хотелось бы добавить больше языков.

У JVM есть сообщество проекты, запускающие Python и Ruby на платформе, и даже специальные языки, такие как Scala, Groovy и Closure, разработанные для этого. Было бы неплохо увидеть их (и / или другие) на платформе Dalvik. Sun также работает над машиной Да Винчи, расширением JVM для динамической типизации, что свидетельствует о значительном отходе от философии «один язык для всех», которой Sun придерживается в течение последних 15 лет.

0
ответ дан 30 November 2019 в 13:40
поделиться
  1. JIT. То, что это не помогает, - это полная чушь. Вы можете более избирательно подходить к тому, какой код вы используете JIT, но при 1/10 производительности собственного кода всегда будет ограничивать

  2. Достойный сборщик мусора. У современных сборщиков мусора нет большого заикания.

  3. Улучшенный анализ кода. Есть много случаев, когда не нужно производить выделение / освобождение, удерживать блокировки и так далее. Это позволяет вам писать чистый код, а не выполнять оптимизацию, с которой машина лучше.

Теоретически большинство языков более высокого уровня (Java, Javascript, python, ...) должны быть в пределах 20% от производительности собственного кода для большинства случаи. Но это требует, чтобы поставщик платформы потратил на разработку более 100 человеко-лет. Sun Java становится лучше. Они тоже работали над этим 10 лет.

3
ответ дан 30 November 2019 в 13:40
поделиться
Другие вопросы по тегам:

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