
- •Конспект лекций по курсу «Сети эвм» Часть 2 Сурков д.А.
- •Сравнительная характеристика технологий .Net и Java
- •Общее для Java и .Net.
- •Управление памятью в .Net
- •Процедурные типы данных (делегаты)
- •Динамические массивы
- •Многозадачность
- •1: Добавление в очередь ThreadPool нового делегата, который будет запускаться в отдельном потоке (из пула свободного потока). Делегат отработал – поток обратно в пул.
- •Исключительные ситуации
- •Шаблоны в с# (появились недавно в .Net 2.0)
- •В с# в шаблонах введено понятие итератора.
- •Массивы
- •Метод Get в SystemArray
- •Средства удалённого вызова .Net Remoting
- •Пользовательские атрибуты
- •Inherited – будем ли создавать атрибут для наследника.
- •Защищённые информационные системы. Технология “Эльбрус”
- •Защищенная файловая система
Конспект лекций по курсу «Сети эвм» Часть 2 Сурков д.А.
Сравнительная характеристика технологий .Net и Java 1
Общее для Java и .Net. 3
Управление памятью в .Net 6
Процедурные типы данных (делегаты) 13
Динамические массивы 15
Многозадачность 18
Исключительные ситуации 22
Шаблоны в С# (появились недавно в .Net 2.0) 23
Массивы 29
Метод Get в SystemArray 30
Средства удалённого вызова .NET Remoting 31
Пользовательские атрибуты 32
Защищённые информационные системы. Технология “Эльбрус” 34
Защищенная файловая система 38
Сравнительная характеристика технологий .Net и Java
-
Технология Java изначально разрабатывалась для встраивания в переносимые устройства, и лишь потом была преобразована для переносимого ПО в настольных компьютерах, позднее для серверного ПО. .Net – сразу для настольных компьютеров и серверов.
-
Обе технологии используют понятие промежуточного кода (для Java – Java-байт код, .Net – IL)
-
Обе среды используют автоматическое управление памятью.
-
Обе среды используют средства безопасности и контроля, которые позволяют использовать в Internet.
Основное преимущество .Net – более высокая продуктивность во всех сферах (более высокая производительность программного кода):
а) более высокоуровневый промежуточный язык. Промежуточный Java-байт код был разработан для создания виртуальных Java-машин. Java-байт код является упрощением всех команд процессора, а модель виртуальной Java-машины – пересечение всех архитектур. В виртуальной Java-машине ограничено количество ресурсов (их 4):
1)на стек
2)на динамическую память
3)на текущую исполняемую инструкцию
4)вспомогательный регистр
Промежуточный язык IL среды .Net принципиально был разработан не для интерпретации, а для динамической компиляции.
Пример программы на промежуточном языке IL, который стандартизирован, универсальный, платформонезависимый Assembler:
. assembly exern mscorlib {} // будут использоваться сборки (assembly), внешняя
. assembly hello {} // mscorlib
. method static public void main ( ) cil managed // 3
{ . entrypoint
. maxstack 1
ldstr “Hello world!”
call void [mscorlib] System.Console:: WriteLine (class System.String)
ret
}
3 – объявляется статическая функция main с атрибутом cil (common intermediate language), managed – код может инспектироваться во время работы
entrypoint – точка входа в функцию
maxstack – сколько элементов стека будет использоваться
ldstr – загружает на стек (исполняющие системы Java и .Net являются стековыми) указатель на строку
далее вызывается функция WriteLine для вывода этой строки на экран
ret – выход из процедуры
Для виртуальных методов – директива virtual.
Когда запускается программа, то исполняющая система загружает промежуточный код и преобразовывает в двоичную систему.
В промежуточном коде операция сложения двух чисел в Assembler – функция add (она одинакова для сложения целых и вещественных чисел).
б) в Java нет деления на размерные типы и ссылочные, а в .Net – есть. Следовательно, для платформы Java стек организован следующим образом: все элементы стека имеют фиксированный размер (8 байт). При этом, в этом элементе хранится признак типа (либо это число, либо это указатель), или само значение, или ссылка на объект. Из-за этого при передаче параметров возьмет в качестве параметра функцию рисования прямоугольника (принимает две точки). Элементом стека такой объект быть не может, этот объект выделяется в динамической памяти (heap).
Передача Point в .Net: Point в .Net является не ссылочным типом, а размерным. Следовательно, он может передаваться следующим образом:
Но если объект достаточно большой, его выгодней передавать через указатели (как в Java).
void DrawPoint (Point p1, Point p2)
{
Point temp = new Point (p1);
}
Для Java
Для .Net
среда Java является многоязыковой, .Net - полиязыковой. Это обеспечивается благодаря тому, что в .Net стандартизирован промежуточный язык IL; в .Net разработана общая система типов (CTS), стандартизированы базовые и структурные типы данных, стандартизированы представления данных. Существует стандарт CLS (Common Language Specification) – набор правил, типов данных для межъязыковых вызовов (для доступа к программам, написанных на многих языках). Согласно CLS, программы могут обмениваться только ограниченным набором данных (если целые числа, то только знаковые).
CLS – исполняющая система (вызывает динамический компилятор, базовую библиотеку, сборщик мусора).
В Java нет межъязыкового взаимодействия.
6) отличия в организации взаимодействия с подпрограммами, написанными на Assembler целевого процессора (на С, С++, Assembler). В Java это организуется так: виртуальная Java-машина предоставляет API JNI-набор процедур прикладного программирования, который получает, например, по символическому имени адрес процедур, находит по имени какой-то объект или адрес параметра на стеке по его имени. Требуется специальное программирование, чтобы организовать вызов dll-библиотеки из программы, написанной на Java. Этот вызов работает медленно.
В .Net это решено по-другому: средства вызова разных процедур встроены в саму вызывающую систему, преобразование параметров осуществляется автоматически. Вызов из dll-библиотеки быстрее.