Главная » Статьи » Java » Java Ranger Basic

День 20/21
JDK, Hardware

JDK

Для разработчика вполне нормально иметь несколько версий JDK (Java Development Kit). Напимер, если у одного заказчика клиент на Java 1.6, а у другого – на 1.8, то разумно поставить две JDK и писать на нужном.

В IntelliJ IDEA выбрать нужную версию для данного проекта можно из меню File -> Project Structure в подменю Project, или нажав Ctrl + Alt + Shift + S.
Тут же можно выбрать версию языка. Но версию языка можно выбрать не старше, чем версия JDK. Это весьма странный ход и так делают крайне редко. Но это может быть нужно если у нас проект от клиента, который использует только Java 1.5 и не хочет переходить на версию выше, потому что все хорошо работает много лет. Тогда можно работать на старшей версии JDK, но на такой же версии языка, потому что там компилятор работает быстрее (его переписывают и оптимизируют в каждой версии).

Внутри class-файлов при компиляции, в виде некоторого числа, компилятор указывает версию языка, под какой он этот класс компилировал. Это значит, что class-файл знает версию Джавы, на которой он скомпилирован. Если при запуске JVM обнаруживает более новую версию у компилятора у файла, то она не имеет права его запускать, и должна упасть по какому-то исключению. Потому что для этого класса данная JVM устаревшая и она не может знать, какие новые трюки там придумали и потому она не может быть уверена, что она корректно запустит те байткоды.

В Джаве есть версии языка (Java 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8), а есть версии класс-файлов (например, 50.1 – две цифры, разделенные точкой). Когда компилятор компилирует файл, то мы можем указать, в какую версию компилировать этот файл. То есть, в класс-файле написан уровень используемого языка. Но тут работает полностью обратная совместимость. Из-за этого получается, что в IDE с одной стороны, нужно указывать, какую версию брать IDE для подчеркивания синтаксиса, а с другой стороны, компилятору надо явно указывать, под какую версию компилировать.

Computer Architecture

Архитектура компьютера – концептуальная структура вычислительной машины, определяющая проведение обработки информации и включающая методы информации в данные и принципы взаимодействия технических средств и программного обеспечения.
Бывают x86 и x64 архитектуры. x86 – это старые компьютеры, у них базовая единица – 32 bit, у x64 – 64 bit.

В компьютере есть три важных места, где учитываются биты, если спуститься на уровень железа: CPU, RAM, ALU. В компьютере есть процессор (CPU, Central processing unit), ОЗУ память (RAM, Random-access memory) – их связывают два многокабельных провода – шина адресов (от CPU к RAM) и шина данных (от RAM к CPU). Каждый кабель в такой шине – это один бит (по проводу удобно различать два состояния – есть напряжение или нет). И там их больше восьми, они передают не байтами, так как пересылать байтами – невыгодно, потому что базовый тип – int уже состоит из 4 байт. В ядре есть ALU (АЛУ – Арифметико-логическое устройство), там есть наборы каких-то электрических компонентов, которые умеют складывать, вычичтать, делить, умножать два числа. Напряжением подаются биты одного числа, второго числа и на выходе получаем биты суммы, разности и т.д. При этом есть базовый размер числа, с которым происходит работа. Это три независимых числа – шина данных, шина адресов и размерность регистров процессора. Желательно, чтобы шина данных и размерность регистров совпадали, ведь если одновременно по 32 проводам передали int, то очень хорошо, чтобы за один такт он был записан. Шина адресов и шина данных уже не очень связаны.

Celeron берет Pentium и начинает его удешевлять. Там бывало, что шина в два раза меньше, чем размер регистра. Процессор считает по 32 бита, а шина 16 бит, тогда int передается за два раза. Работает медленней, зато дешевле.
Так сложилось, что в бытовых компьютерах где-то до 2009 года базовой размерностью была 32 бита, а сейчас – 64 бита. То есть все три числа совпадают.
На этом уровне байтов нет. То, что байт состоит из 8 бит – просто договоренность.

RAM

Массивы используют модель RAM, Random Acces Memory – память с произвольным доступом. Это означает, что чтение и запись в ячейку по произвольному адресу не зависит от адреса.
Типичный пример системы без RAM – это бабина магнитофона. Чтобы прочитать звук через 20 минут, нужно перемотать кассету.

Жесткий диск довольно быстро читает и пишет, если байты идут подряд (при последовательной записи скорость может достигать десятков мегабайт в секунду). Но перемещение головки винчествера занимает примерно 5 мс и если читать случайные байты огромного файла на жестком диске, то получится читать только около 200 байт в секунду. Яркий пример – пережатие видео, там приходится читать байты через определенное время видео. Тем не менее, можно сказать, что это еще очень медленный random access.

ОЗУ – это память с произвольным доступом, хотя это тоже не совсем верно, потому что почти всегда (за счет разных оптимизаций) прочитать следующий байт намного быстрее, чем прочитать случайный байт через миллион ячеек. Но там уже разница в десятки раз.



В следующей теме мы рассмотрим: Recursion, Graph Theory

Источник: http://becomejavasenior.com/courses/?utm_source=Java+Email+Courses&utm_campaign=aa710df388-JavaRangerBasicIntro&utm_medi
Категория: Java Ranger Basic | (06.10.2015) W
Просмотров: 356 | Теги: Basic, ranger, java | Рейтинг: 0.0/0
Всего комментариев: 0
avatar