Что должен знать разработчик Scala о Java и/или JVM?
Итак, примерно до 6 месяцев назад большая часть моей работы (большая обработка графа) состояла из Python и С++. До этого момента и даже сейчас я вообще не писал никакой Java. Я видел язык и был знаком с синтаксисом (пришедшим с фона C/С++), и мне понравилась идея JVM, но никогда фактически написал любое значительное количество Java.
Когда я подобрал Scala, мне понравилось, OOP и функциональные возможности программирования все в одном, и это было на JVM было здорово. Я постоянно стремился улучшить свой Scala и играл с Аккой и все еще люблю его. Тем не менее, порой, возможно, это просто я слишком недооцениваю его, но я чувствую, что должен узнать больше о Java и/или JVM.
Я слышал от многих, что Scala следует рассматривать как отдельный язык Java, как С++ to C. Возможно, вы можете чувствовать то же самое, и, возможно, изучение Java более или менее не связано с обучением Scala, но я чувствую, что узнал больше о JVM (например, компиляция JIT, стирание стилей) было бы полезно?
Мысли?
Ответы
Ответ 1
-
JVM выполняет Bytecode, и определенно полезно знать, как это работает, так же, как иногда полезно знать, как работают вызовы метода C/С++ или как инициализируются классы; потому что иногда это имеет значение и не может быть отвлечено.
-
Java является основным языком для JVM, и полезно иметь возможность читать Java до некоторой степени, если вам нужно напрямую использовать Java-классы. И это может произойти довольно часто; всего несколько примеров:
- вам нужно использовать некоторую стороннюю библиотеку Java (и есть тонны)
- Работа с Свойствами
- вам нужно сделать что-то особенное в Swing, которое не поддерживается оболочкой Scala -Swing
- также источники, объясняющие материал для 1), скорее всего, будут использовать примеры Java
Но мой совет - не изучать его заранее - вы подберете его, когда вам это понадобится.
Ответ 2
Купить эту книгу сейчас: Производительность Java. Он был выпущен только в октябре прошлого года и является сокровищницей информации для всех, кто хочет понять JVM. Если вы станете разработчиком Scala, вы должны, по крайней мере, понять параметры сборки мусора и JVM.
Ответ 3
Сверху моей головы
-
примитивы, автобоксинг и как специальные массивы java;
-
стирать и проявлять
-
как скомпилированы логически хвостовые рекурсивные вызовы в источнике scala
-
установка -client, -сервер на вашей платформе и когда вы хотите попробовать 32 бит: например. JAVA_HOME и "предпочтения Java" в OS X. Я думаю, что openJDK должен работать везде, где вы используете ту же версию Oracle JDK, но IntelliJ предупреждает вас использовать только официальный Oracle JDK. Я видел очень изолированные сообщения о том, что у 3d графических библиотек были проблемы с openJDK, а также части openJDK, такие как шрифты, имеют проблемы с лицензированием.
-
настройка классов классов в REPL, как опция компилятора, и в SBT
-
Переключатели Hotspot, XMX, XMS (настройки кучи), наиболее распространенные сборщики мусора, вызовы метода inlining
-
java.util.concurrent
-
возможные проблемы с двоичной совместимостью с кодом java и scala, скомпилированным в JDK 6 и 7.
Ответ 4
Я не знаю точно, что вам нужно, но на SO есть несколько похожих вопросов, посмотрите.
Кроме того, здесь хорошие статьи для модели памяти Java
Я подумал, что лучше копать на языке Java, писать код, читать книги, специфичные для Java, для лучшего понимания того, как все работает.
Ответ 5
Существует множество инструментов, связанных с JVM. Если вы хотите понять, как работают ваши программы (по производительности или по другим причинам), то стоит упомянуть их. Два полезных инструмента:
Оба они особенно полезны для мониторинга и опроса длительных процессов.
Ответ 6
Я думаю, что вы будете знать больше о JVM при программировании Scala. Я имею в виду, что у вас появятся дополнительные вопросы: "Почему это решение идет медленно и быстро?" - один из способов ответить на этот вопрос - проверить байт-код