На чем написана java
Перейти к содержимому

На чем написана java

  • автор:

На чем была написана Java?

Собственно стало интересно и гугл не смог дать мне ответа. Везде пишут что разрабатывался с оглядкой на C++, но вот на чем собственно написан(или с помощью чего) нигде не оговаривается. Так же интересно на чем пишут JVM для новых ОС или устройств. Кто знает расскажите, интересно ведь.

Отслеживать
Viacheslav
задан 17 ноя 2011 в 15:23
Viacheslav Viacheslav
715 3 3 золотых знака 11 11 серебряных знаков 23 23 бронзовых знака
Странно, что никто не упомянул то, что помимо кода на c и c++ у jvm есть ещё ассемблерные вставки
6 июл 2015 в 18:31

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Действительно интересный вопрос, поискал нашел ответ, который меня в принципе удовлетворил: What is java written in

Отслеживать
ответ дан 17 ноя 2011 в 15:33
Sergii Kozlov Sergii Kozlov
2,468 16 16 серебряных знаков 13 13 бронзовых знаков
Да почти все языки так или иначе написано на С++ и(или) на С ^^
17 ноя 2011 в 15:56
Только не «языки», а их интерпретаторы, компиляторы и т.д.
17 ноя 2011 в 17:52

Естественно, интерпретаторы, виртуальные машины, компиляторы, в том числе JIT, пишутся на С или С++ (во всяком случае, их ядра) как на языках, дающих наибольшую скорость выполнения программ.

Отслеживать
ответ дан 17 ноя 2011 в 17:17
23.9k 2 2 золотых знака 37 37 серебряных знаков 69 69 бронзовых знаков
Разве Java интерпретатор? Там JIT компиляция вроде.
17 ноя 2011 в 17:23

Это сильно зависит от используемого JDK . В ответе на stackoverflow есть примеры JDK , написанных на Java .

17 ноя 2011 в 17:54

Это скорее экзотика. Теоретически можно написать на любом языке, средства которого это позволяют. Наиболее распространенный вариант — С/С++ по указанным мною причинам.

На чем написана java

Java virtual machine (JVM) — это программа, предназначенная для выполнения других программ. В ее основу заложена простая идея, которая всегда будет одним из величайших примеров кодирования в стиле «kung fu».

Для чего используется JVM
JVM имеет две основные функции:

  1. Позволяет запускать Java-приложения на любых устройствах или операционных системах (принцип — «Написал один раз, запускай везде»)
  2. Управляет и оптимизирует память, используемую приложением

В 1995 году, когда Java появилась, все компьютерные программы были написаны под определенные операционные системы, и управлять памятью приходилось разработчику программного обеспечения. Так что появление JVM было революцией.

Рисунок 1: Общее представление JVM
Существует техническое определение JVM, а также его повседневная формулировка:

  • Техническое определение: JVM — это спецификация программного обеспечения, которое выполняет код и предоставляет среду выполнения для этого кода
  • Повседневная формулировка: JVM — это способ запуска наших Java-приложений. Мы настраиваем параметры JVM, а затем полагаемся на ее автоматическое управление ресурсами программы во время выполнения

Когда разработчики говорят о JVM, обычно имеют в виду процесс, запущенный на устройстве, который предоставляет и контролирует использование ресурсов Java-приложения. Спецификация JVM описывает требования для разработки программы, которая выполняет эти задачи.

Кто разрабатывает и поддерживает JVM?

JVM активно используется и разрабатывается очень сильными программистами как корпоративное ПО, а так же как ПО с открытым кодом. Проект OpenJDK является потомком решений компании Sun Microsystems для open-source версии Java. Компания Oracle и другие продолжают развитие OpenJDK.

Сборка мусора

До Java память программы контролировалась программистом. В Java же памятью управляет виртуальная машина через процесс, называемый сборкой мусора, который непрерывно определяет и устраняет неиспользуемую память в программах. Сборка мусора происходит внутри работающей JVM.

В ранний период Java подвергалась критике, так как не была «Close to the metal» как C++ и поэтому не была такой быстрой. Особенно спорным был процесс сборки мусора. С тех пор были предложены и использованы различные алгоритмы и подходы, которые значительно улучшили сборку мусора.

Что значит “Close to the metal»?

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

Три части JVM

Глобально JVM состоит из трех частей: спецификация, реализация и экземпляр. Рассмотрим каждую из них.

1. Спецификация JVM

Первая часть JVM — спецификация в которой не определены детали реализации JVM, что обеспечивает максимальную свободу творчества при ее создании:

«Для правильной реализации виртуальной машины Java, вам лишь необходимо уметь читать class-файлы и правильно выполнять указанные в нем операции»

Себастьян Бах однажды писал о создании музыки похожим образом:
«Все что вам нужно делать, это нажимать нужную клавишу в нужное время»

Таким образом, все что JVM должна делать — это корректно запускать Java-программы. Звучит просто, но это колоссальная задача, особенно, если учитывать мощь и гибкость языка Java.

JVM как виртуальная машина

JVM – это виртуальная машина, которая запускает Java-программы в портативном режиме. Термин «Виртуальная машина» означает, что JVM является абстракцией фактической машины, такой как сервер, на которой работают программы. Независимо от операционной системы или технического обеспечения, JVM создает предсказуемую среду для запускаемых внутри нее программ.

2. Реализация JVM

Существует множество различных реализаций спецификации JVM как коммерческих, так и с открытым исходным кодом. JVM HotSpot от проекта OpenJDK является эталонной реализацией и содержит одну из наиболее тщательно проверенных в мире кодовых баз. HotSpot также является самой широко используемой JVM.

Почти все лицензированные JVM созданы, как ответвление от OpenJDK и HotSpot JVM, включая лицензионный JDK от Oracle. Разработчики, создающие лицензированные продукты на основе OpenJDK, зачастую мотивируются желанием увеличить производительность для определенных операционных систем. Обычно пользователи загружают и устанавливают JVM, как часть среды выполнения Java (JRE).

3. Экземпляр JVM

После того как спецификация JVM реализована и выпущена, вы можете загрузить ее как приложение. Загруженная программа является экземпляром виртуальной машины.

В большинстве случаев, говоря о JVM, имеют в виду экземпляр JVM, который работает в среде разработки. Вы можете сказать: «Привет Макс, сколько памяти использует JVM на этом сервере?» или «Я не могу поверить, я сделал зацикленный вызов, и переполнение стека сломало мою JVM. Ошибка новичка!»

Что такое программная спецификация?

Спецификация программного обеспечения – это читаемый человеком проектный документ, описывающий, как должна работать программная система. Цель спецификации – создать четкое описание и требования к коду для разработчиков.

Загрузка и выполнение class-файлов в JVM

Мы говорили о роли JVM в запуске Java-приложений, но как она выполняет свою функцию? При выполнении Java-приложений JVM зависит от загрузчика классов и механизма выполнения.

Загрузчик классов в JVM

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

Загрузчик классов Java является частью JVM, которая загружает классы в память и делает их доступными для выполнения. Загрузчики классов используют технику ленивой загрузки (lazy-loading) и кэширования, чтобы сделать загрузку классов максимально эффективной.

Любая виртуальная машина Java включает в себя загрузчик классов. Спецификация JVM описывает стандартные методы для запросов и управления загрузчиком во время работы, но за выполнение этих возможностей отвечает конкретная реализация JVM.

Механизм выполнения в JVM
Как только загрузчик классов выполнил свою работу, JVM начинает выполнять код каждого класса.

Выполнение кода включает управление доступом к системным ресурсам. Механизм выполнения JVM стоит между работой программы, с ее запросами на файловые, сетевые ресурсы и ресурсы памяти, и операционной системой, которая обеспечивает эти ресурсы.

Управление системными ресурсами
Системные ресурсы могут быть разделены на две больших категории: память и все остальное.

Вспомните, что JVM отвечает за очистку неиспользуемой памяти, а сборщик мусора — это механизм, который эту очистку осуществляет. JVM также отвечает за распределение и поддержание ссылочной структуры, которую разработчик принимает как должное. Например, при использовании ключевого слова new, механизм выполнения JVM осуществляет запрос к операционной системе на выделение памяти.

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

Эволюция JVM: прошлое, настоящее, будущее

В 1995 году JVM представила две революционных концепции, которые с тех пор стали стандартом в современной разработке: «Написал один раз, запускай везде» и автоматическое управление памятью. В то время совместимость ПО была смелой концепцией, но сейчас это незаменимое удобство. Точно так же, в то время разработчики должны были сами управлять программной памятью, нынешнее поколение живет с автоматической сборкой мусора.

Изначально виртуальная машина Java предназначалась только для Java, но сегодня она может поддерживать разные скриптовые и другие языки программирования, включая Scala, Groovy и Kotlin. Глядя вперед, трудно увидеть будущее, в котором JVM не является заметной частью развития разработки программного обеспечения.

КАК ПОЯВИЛСЯ JAVA?

��Изначально канадский инженер Джеймс Гослинг и его единомышленники хотели создать язык программирования с C – подобным синтаксисом, который в то же время должен быть более простым по сравнению с C/C++.

☕Java разработала компания Sun Microsystems в начале 90-х годов XX века. На ранних этапах разработки язык назывался Oak. Затем его переименовали в честь сорта кофе Java и в честь этого оставили чашку в логотипе.

��Создатели планировали использовать Java для программирования бытовой электроники, однако практически сразу после выпуска версии 1.0 в 1995 году язык стали использовать разработчики серверного и клиентского ПО.

✏Создатели реализовали принцип WORA: write once, run anywhere или «пиши один раз, запускай везде». Многие исследования называют его языком программирования №1 среди разработчиков.

✅В ЧЕМ ПРЕИМУЩЕСТВА JAVA?

• Кроссплатформенность. У Java есть специальная программа, исполняющая код, — виртуальная машина Java или Java Virtual Machine. Написали программный код один раз — работает с любой аппаратной платформой или операционной системой: от смарткарт до приложений для умных домов.
• Комьюнити. Java — достаточно распространённый язык: им пользуется большое количество разработчиков, и решение практически любой проблемы, которая может возникнуть при работе с Java, уже кто-то придумал.
• Надёжность. Язык Java строго типизирован. То есть любая переменная или выражение имеет определённый тип уже на момент компиляции, что упрощает выявление каких-либо проблем. Компилятор сам подсказывает программисту, где тот допускает ошибку, и не даёт её совершить.
• Объектно-ориентированность. Все библиотеки, написанные когда-либо для Java, — это классы, которые отвечают за функциональность языка. Любое приложение на Java — набор классов, описывающих разные объекты.
• Относительная простота. C Java не так просто подружиться, как с Python, но он гораздо проще языка С или С++.
• Гибкость. На Java можно разработать программу любой сложности: интернет-магазин, банковские приложения, высоконагруженные системы и даже искусственный интеллект.

✅ГДЕ ПРИМЕНЯЮТ JAVA?

Подавляющее большинство крупных компаний так или иначе используют Java, и очень много серверных приложений для корпораций написаны на этом языке.
• Например, речь идёт о программах для финансовых организаций, которые обеспечивают проведение транзакций, фиксацию торговых операций.
• На Java также написано много веб-приложений. Популярные фреймворки используются для создания разных приложений в вебе: от ecommerce-проектов до крупных порталов, от образовательных платформ до правительственных ресурсов.
• Популярная компьютерная игра Minecraft написана на Java.
• Мобильная разработка — ещё одна область использования Java. На этом языке пишут приложения для устройств, работающих под управлением ОС Android. На Java также создают клиентские приложения.
То есть на Java можно писать разные типы приложений: веб, мобильный и десктопный софт, игры и так далее. Традиционно у этого языка сильные позиции в промышленном программировании, в сегменте крупных компаний.

Материал подготовил педагог по направлению «Мобильной разработке» Ложкин Роман Александрович.

Стоит ли изучать С и С++ после Java

Аватарка пользователя Дух айтишной эмо школы

Разбираемся, зачем переходить с Java на С или С++, зачем учить С-языки и какие плюсы и минусы присущи С и С++ по сравнению с Java.

Java — отличный язык программирования, который проверен и временем, и количеством программ, которые на нём написаны. Java часто рекомендуют в качестве первого языка программирования, потому что он решает большинство проблем в написании ПО и потому что он максимально понятен.

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

В этой статье разбираемся, зачем переходить с Java на С или С++, зачем учить именно С-языки и какие плюсы и минусы присущи С и С++ по сравнению с Java.

Зачем переходить на C/C++ после Java

За некоторыми исключениями C++ считается чем-то вроде надстройки Java, но это не значит, что при переходе с Java на C++ будет просто: вам нужно будет изучить новые концепции языка и новый синтаксис.

Основное преимущество C++ заключается в том, что он не обременяет новичка концепциями объектов. Также C++ лучше поддерживает более поздние классы, которые используются в написании операционных систем и построении компиляторов. Написание ОС в Java осложняется тем, что JVM сама по себе является подобием ОС.

Если вам нужно написать код, который управлял бы железом устройства, изучение байт-кода JVM не рекомендуется: он плохо переводится на язык ассемблера. Код Java “живет” в JVM, которая отрывает программу от железа.

Java присуща негибкость: например, код отличается многословным синтаксисом, который нелегко сократить. Код на Java, кажется, имеет другой стиль разработки, который поощряет крупные и сложные решения, тогда как более мелкие и простые были бы эффективнее.

C/C++, с другой стороны, ужасно беспорядочные языки, которые наполнены устаревшими функциями. Хуже того, из-за этого беспорядка можно выстрелить себе в ногу, написав отличный код, но не учтя нюансов его работы, о которых вы никогда и не слышали.

Однако код на C/C++ более гибкий, и как только вы его изучите, вы поймёте, что можете решить проблему множеством способов. В Java при этом обычно поощряется один способ решения задачи.

Кроме того, в процессе изучения C/C++ вы научитесь работе с указателями, стеком, производительностью, изучите процесс компиляции и системное программирование.

Резюмируя, вот причины, по которым вам стоит перейти с Java на C/C++:

  1. Вам нужно написать программу, которая тесно взаимодействовала бы с железом.
  2. Вы хотите изучить низкоуровневый язык программирования.
  3. Вы хотите следить за последними обновлениями в языках программирования.
  4. Вам хочется писать на “гибком” языке программирования, который предложил бы несколько решений проблемы.
  5. Вы хотите писать лаконичный код.

Зачем учить С

Обычно С предлагают учить перед С++, потому что кажется, что сперва нужно изучить менее развитый язык и понять концепции низкого уровня вроде malloc и free. И, конечно, эта точка зрения имеет право на жизнь.

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

Ещё один существенный плюс С — его низкоуровневость. Если вы собираетесь писать операционную систему или драйвера для устройств, если вы хотите разрабатывать мобильные приложения, стоит присмотреться к С, а не к С++, потому что первый язык существенно выигрывает в производительности и скорости.

То же касается и геймдева: если игра требует быстрых вычислений, С станет отличным инструментом.

Однако у пути от менее развитого языка к более развитому есть существенные минусы. Вы можете обнаружить, что многие выражения C — это худшая версия выражений C++.

C — это низкоуровневый язык, который будет подталкивать вас к использованию небезопасных абстракций низкого уровня. Если вы сможете соблюдать типовую безопасность, проблем не возникнет.

Также способ управления памятью в C сильно отличается от C++, даже несмотря на то, что он построен на низкоуровневых абстракциях. Как ни странно, проще понять управление памятью через конструкции std::move() и std::unique_ptr в С++, чем malloc/free в C. Ещё один нюанс низкоуровневого С — сложность массивов.

Также в C++ есть выражения, которые были заимствованы из более современных языков и которых нет в C.

Оптимальный вариант — начать обучение с C++, а затем немного поработать с C, чтобы понять нюансы работы низкоуровневого языка.

Плюсы в пользу C после Java

  • C — относительно простой язык с меньшим количеством функций, чем в C++.
  • Изучение C углубит понимание концепций низкоуровневого программирования, таких как управление памятью и указатели.
  • Код C легче переносить на разные платформы.

Минусы изучения C после Java

  • В С меньше принципов ООП. C — это процедурный язык, и в нем не так сильно используется объектно-ориентированное программирование (ООП), как в Java или C++.
  • В языке C отсутствуют современные функции и библиотеки, аналогичные тем, что уже есть в Java и C++.

Зачем учить С++

C++ — это язык, который лучше всего для жесткого контроля над управлением памятью. Также здесь играет огромную роль производительность программ.

С++ отлично подойдёт для высокопроизводительных вычислений, при которых вы не можете позволить себе расходы на память, но вам нужно, чтобы все работало как можно быстрее. C++ лучше подходит для высокопроизводительных численных вычислений, чем Java в целом. При этом учтите, что кривая обучения C++ очень большая.

Java, с другой стороны, не зависит от платформы и имеет большую поддержку библиотек (синтаксический анализ XML и т. д.). Java — это интерпретируемый язык, с которым вам не нужно беспокоиться об управлении памятью.

Недостатком Java является относительно плохая настройка производительности. В Java нет особого контроля над распределением памяти, и часто возникает нехватка высокопроизводительных числовых пакетов.

Что касается синтаксиса, в Java код очень подробный: всё должно быть классом, и каждый класс должен находиться в отдельном файле, и так далее. Однако и синтаксис C++ тоже непрост в изучении, так может быть препятствием в переходу с одного языка на другой.

Плюсы в пользу C++ после Java

  • Как и Java, C++ является объектно-ориентированным и поддерживает классы, объекты и наследование.
  • C++ предлагает более широкий набор функций, включая низкоуровневые манипуляции с памятью, шаблоны и стандартную библиотеку шаблонов (STL).
  • C++ широко используется в разработке игр, системном программировании и приложениях, где производительность критична.

Минусы изучения C++ после Java

  • C++ может быть сложнее в изучении из-за обширного набора функций.
  • Хотя C++ предлагает контроль над управлением памятью, это также может привести к увеличению количества ошибок.

Заключение

Эта статья была написана на основе советов опытных программистов, которые больше 10 лет кодят на Java и С-языках. Надеемся, материал получился исчерпывающим и помог вам решить, стоит ли переходить с Java на С и С++.

Приглашаем вас присоединиться к дискуссии. Какие аргументы в пользу С/С++ мы забыли упомянуть? Или, может быть, есть и другие языки, которые закрывают проблемы Java, но на которые перейти было бы удобнее, чем на С-языки? Напишите в комментариях! ?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *