Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Java виртуальная машина отличия от clr


Автор: DenWPF 18.4.2011, 09:34
Мне тут не нужен холивар, мне интересует на сколько сильно отличается CLR от JAVA вирт. машины ( кстати как она называется?).

К примеру в java какие типы бывают? так же ссылочные и значимые?
Как они размещаются?? вот такого рода интересует информация.

Автор: Skynin 18.4.2011, 10:47
Отличается сильно. Потому что CLR вообще не виртуальная машина, она не выполняет байт-код (CIL) а компилирует в нативный при первом же вызове.

JVM существует несколько. Самая известная - HotSpot от Sun.
У Oracle в итоге их сейчас две, еще JRockit

У IBMовской название не помню, погуглите.

У Гугла, та что в Андроиде - Dalvik VM, в отличие от трех упомянутых - регистровая, а не стековая.

Кстати CIL для CLR - также стековый.

Цитата

К примеру в java какие типы бывают? так же ссылочные и значимые?

Какой-то непонятный контекст вопроса.

Вас интересует работа JVM и CLR или язык программирования?

Цитата
вот такого рода интересует информация.

На русском о CLR есть - Джеффри Рихтер, "CLR via C#"
О стандарте Sun JVM не встречал такого уровня книг, тем более  - спецификаций. Только на английском.


Автор: DenWPF 18.4.2011, 11:09
Сам язык не интересует, по сути я его знаю.

А вот как правильно писать, этого я не знаю...вот и хочется какую то литературу(русс) что бы не наступать на грабли, и не жрать память на ровном месте.

Автор: kemiisto 18.4.2011, 11:26
Цитата(DenWPF @  18.4.2011,  08:34 Найти цитируемый пост)
К примеру в java какие типы бывают? так же ссылочные и значимые?

Да, только значимые называются примитивными (http://en.wikipedia.org/wiki/Java_syntax#Primitive_types).

Цитата(DenWPF @  18.4.2011,  08:34 Найти цитируемый пост)
Как они размещаются?

Значения примитивных типов могут быть: 
  • Полями объекта и храниться непосредственно там, в полях объекта. В таком случаем, они будут хранится там же, где объект (см. ниже).
  • Локальными переменными и храниться на стеке.

Объекты (objects) размешаются в куче. НО! Начиная с 6.14 http://java.dzone.com/articles/escape-analysis-java-6-update штуку под названием http://en.wikipedia.org/wiki/Escape_analysis. Так что объект может оказаться и на стеке. И, соответственно, значения примитивных типов данных его полей концептуально тоже окажутся на стеке. В CLR, по-моему, escape analysis отсутствует.

Ссылки на объекты (object references) либо на стеке, либо в куче. Первое - для локальных переменных и параметров, второе - для объектов, которые являются полями других объектов.

В методы все параметры передаются по значению. Только в случае объектов по значению передаются ссылки на объекты. Поэтому формально можно сказать, что сами объекты передаются по ссылке.

Цитата(DenWPF @  18.4.2011,  08:34 Найти цитируемый пост)
кстати как она называется?

JVM.

Автор: DenWPF 18.4.2011, 11:38
JVM имеет свой подАсемблеровский язык по типу IL в CLR?


Цитата

она не выполняет байт-код 


вот это можно пояснить?

Автор: kemiisto 18.4.2011, 12:24
Цитата(DenWPF @  18.4.2011,  10:38 Найти цитируемый пост)
JVM имеет свой подАсемблеровский язык по типу IL в CLR?

Имеет. И именно код на этом языке JVM и исполняет. А CLR преобразует MSIL код в нативный исполняемый код для платформы посредством JIT-компилятора, а затем исполняет полученный машинный код.

Добавлено через 48 секунд
http://en.wikipedia.org/wiki/Java_bytecode

Автор: Skynin 18.4.2011, 12:26
Цитата

А вот как правильно писать, этого я не знаю...вот и хочется какую то литературу(русс) что бы не наступать на грабли

Тогда Джошуа Блох "Java. Эффективное программирование"
Там он касается вопросов связанных с устройством JVM

Цитата
JVM имеет свой подАсемблеровский язык по типу IL в CLR?

Естественно. А чем по Вашему занимается javac ? 

Так же свой байт-код имеет и питоновская VM.

Цитата
вот это можно пояснить?

http://ru.wikipedia.org/wiki/Интерпретатор
http://ru.wikipedia.org/wiki/Компилятор

JVM выполняет байт-код, и при определенных условиях его компилирует в нативный код.
CLR сразу компилирует байт-код в нативный. Не умея его выполнять.

Запрос к гуглу:
является ли CLR интерпретатором

Ответы:
http://habrahabr.ru/blogs/net/107585/ - CLR — это sort of virtual machine, но это не интерпретатор. Еще раз повторюсь: MS.NET это НЕ ИНТЕПРЕТАТОР БАЙТКОДА. Специальный компилятор JIT постепенно преобразует байткод программы в нативный код
http://crypto.pp.ua/2011/01/jit-kompilyator-i-clr/ Среда CLR — это не интерпретатор. Она не производит повторную трансляцию кода IL при каждом его выполнении. ... CLR в действительности компилирует код IL в машинный код, прежде чем выполнять его, т.е. осуществляет JIT-компиляцию.

По поводу названия.
набираем 
java -showversion

У меня ответ:
java version "1.6.0_24"
Java™ SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot™ Client VM (build 19.1-b02, mixed mode, sharing)

™ - это торговая марка.

JVM - это НЕ торговая марка, НЕ имя личное, как и "автомобиль".

P.S.
Упреждая возможный вопрос - а что такое javac

http://www.skipy.ru/technics/likbez.html

Автор: DenWPF 18.4.2011, 14:16
Skynin, спасибо, довольно понятно, тебе надо сеть и разобраться)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)