Как виртуальная машина работает?

Используйте это:

 Geocoder geocoder = new Geocoder(this, Locale.getDefault());
 List
addresses = geocoder.getFromLocation(MyLat, MyLong, 1); String cityName = addresses.get(0).getAddressLine(0); String stateName = addresses.get(0).getAddressLine(1); String countryName = addresses.get(0).getAddressLine(2);

. Более подробный пример карты Google можно найти по ссылкам ниже: http://www.demoadda.com/demo/android/load-googlemap_107

А также для фоновых обновлений местоположения: http://www.demoadda.com/demo/android/download-android-background-location-update-service-demo_21

18
задан Seki 11 June 2015 в 12:07
поделиться

5 ответов

Вероятно, ваш вопрос должен быть озаглавлен как «Как работают динамические языки ?».

Все просто, они хранят информацию о типе переменной вместе с ней в памяти. И это делается не только в интерпретируемых или JIT-скомпилированных языках, но и в языках с исходной компиляцией, таких как Objective-C.

7
ответ дан 30 November 2019 в 09:25
поделиться

В большинстве языков виртуальных машин переменные можно представить себе как указатели (или ссылки) на память в куче, даже если сама переменная находится в стеке. Для языков, которые имеют примитивные типы (например, int и bool в Java), они также могут храниться в стеке, но им нельзя назначать новые типы динамически.

Игнорирование примитивных типов, все переменные, которые существуют в стеке их фактические значения хранятся в куче. Таким образом, если вы динамически переназначаете им значение, исходное значение игнорируется (и память очищается с помощью некоторого алгоритма сборки мусора), а новое значение выделяется в новом бите памяти.

2
ответ дан 30 November 2019 в 09:25
поделиться

Чтобы ответить на часть ваших вопросов, я бы порекомендовал технический доклад Google о python , где будут даны ответы на некоторые из ваших вопросов, касающихся динамических языков; например, что такое переменная (это не указатель и не ссылка, а в случае python метка).

1
ответ дан 30 November 2019 в 09:25
поделиться

Ключ ко многим из того, «как виртуальные машины обрабатывают такие переменные», на самом деле сводится к метаданным ... Сохраненная и затем обновленная метаинформация дает виртуальной машине гораздо лучшую обработку как распределять и затем делать правильные вещи с переменными.

Во многих случаях это тип накладных расходов, которые действительно могут мешать производительности. Однако современные реализации и т. Д. Прошли долгий путь в правильном направлении.

Что касается ваших конкретных вопросов - рассмотрение переменных как обычных объектов и т. Д. Сводится к переназначению / переоценке метаинформации при новых назначениях - это почему x может смотреть в одну сторону, а затем в другую.

1
ответ дан 30 November 2019 в 09:25
поделиться

The VM has nothing to do with the language. Any language can run on top of a VM (the Java VM has hundreds of languages already).

A VM enables a different kind of "assembly language" to be run, one that is more fit to adapting a compiler to. Everything done in a VM could be done in a CPU, so think of the VM like a CPU. (Some actually are implemented in hardware).

It's extremely low level, and in many cases heavily stack based--instead of registers, machine-level math is all relative to locations relative to the current stack pointer.

With normal compiled languages, many instructions are required for a single step. a + might look like "Grab the item from a point relative to the stack pointer into reg a, grab another into reg b. add reg a and b. put reg a into a place relative to the stack pointer.

The VM does all this with a single, short instruction, possibly one or two bytes instead of 4 or 8 bytes PER INSTRUCTION in machine language (depending on 32 or 64 bit architecture) which (guessing) should mean around 16 or 32 bytes of x86 for 1-2 bytes of machine code. (I could be wrong, my last x86 coding was in the 80286 era.)

Microsoft used (probably still uses) VMs in their office products to reduce the amount of code.

The procedure for creating the VM code is the same as creating machine language, just a different processor type essentially.

VMs can also implement their own security, error recovery and memory mechanisms that are very tightly related to the language.

Some of my description here is summary and from memory. If you want to explore the bytecode definition yourself, it's kinda fun:

http://java.sun.com/docs/books/jvms/second_edition/html/Instructions2.doc.html

2
ответ дан 30 November 2019 в 09:25
поделиться
Другие вопросы по тегам:

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