• Почему поток не отрабатывает задуманного в Java?

    Vamp
    @Vamp
    Jake Taylor, не нашел в документации явного указания, но данное поведение вполне ожидаемое и логичное, иначе писать тесты было бы намного сложнее. Впрочем, junit с оставшимися в живых потоками тоже ничего не делает - он просто вызывает System.exit() по завершении тестов и jvm сама всех уничтожает. По крайней мере консольный и IDEA'вский junit лаунчеры именно так и делают.

    где тогда лучше тестировать код? Через public static void main?


    Тестируйте так, как вам удобно. Просто при тестировании через junit нужно помнить об этой особенности, только и всего.
  • Php Comet + Sokil\Mongo, почему class '\MongoCollection' not found, хотя mongodb на php поставлен?

    Vamp
    @Vamp
    LakeForest, ещё нужно поставить alcaeus/mongo-php-adapter. Как оказалось, sokil/php-mongo написан с использованием устаревшего php модуля mongo и с новым модулем mongodb работать не будет без прослойки, обеспечивающей совместимость нового модуля со старым.
  • Зачем указывают ssl_dhparam в конфиге nginx? Какой риск если его убрать из конфига?

    Vamp
    @Vamp
    ky0, могу только посочувствовать этим несчастным, застрявшим в прошлом десятилетии.
  • Где новичку найти OpenSource проекты?

    Vamp
    @Vamp
    В крупных опенсорс проектах всегда есть тикеты джуниорского уровня. Иногда такие тикеты даже помечаются отдельным тегом "good first issue".

    охреневать от того насколько там всё непонятно, и далеко от ваших представлений об Open Source.


    Так это наоборот плюс. У человека даже не будет шанса попробовать примерить розовые очки, если начнет карьеру с жестокого и беспощадного опенсорса. А если сможет выжить в таких условиях, значит есть потенциал. Я бы при приеме на работу отдавал предпочтение кандидатам с реальным опытом участия в опенсорсе, чем кандидатам, прошедшим 100500 модных курсов.
  • Зачем нужны типы данных byte и short в Java?

    Vamp
    @Vamp
    Орхан Гасанлы, JVMS 2.11.1:

    For the majority of typed instructions, the instruction type is represented explicitly in the opcode mnemonic by a letter: i for an int operation, l for long, s for short, b for byte, c for char, f for float, d for double, and a for reference. Some instructions for which the type is unambiguous do not have a type letter in their mnemonic. For instance, arraylength always operates on an object that is an array. Some instructions, such as goto, an unconditional control transfer, do not operate on typed operands.

    Given the Java Virtual Machine's one-byte opcode size, encoding types into opcodes places pressure on the design of its instruction set. If each typed instruction supported all of the Java Virtual Machine's run-time data types, there would be more instructions than could be represented in a byte. Instead, the instruction set of the Java Virtual Machine provides a reduced level of type support for certain operations. In other words, the instruction set is intentionally not orthogonal. Separate instructions can be used to convert between unsupported and supported data types as necessary.

    ...

    Note that most instructions in Table 2.11.1-A do not have forms for the integral types byte, char, and short. None have forms for the boolean type. A compiler encodes loads of literal values of types byte and short using Java Virtual Machine instructions that sign-extend those values to values of type int at compile-time or run-time. Loads of literal values of types boolean and char are encoded using instructions that zero-extend the literal to a value of type int at compile-time or run-time.


    То есть для большинства операций над short, byte, bool тупо нет соответствующего опкода, потому что дизайн байткода не позволяет сделать индивидуальные операции каждому типу. Поэтому jvm оперирует на стеке и в локальных переменных int'ом, если это не long или double.

    JVMS 2.6.2:

    At any point in time, an operand stack has an associated depth, where a value of type long or double contributes two units to the depth and a value of any other type contributes one unit.


    Согласно процитированному требованию, все примитивы занимают ещё больше памяти на 64-битных системах - как long. Это если jvm не применяет какие-либо оптимизационные трюки.

    Inside the Java Virtual Machine, Bill Venners:

    The basic unit of size for data values in the Java virtual machine is the word--a fixed size chosen by the designer of each Java virtual machine implementation. The word size must be large enough to hold a value of type byte, short, int, char, float, returnAddress, or reference. Two words must be large enough to hold a value of type long or double. An implementation designer must therefore choose a word size that is at least 32 bits, but otherwise can pick whatever word size will yield the most efficient implementation. The word size is often chosen to be the size of a native pointer on the host platform.

    The specification of many of the Java virtual machine's runtime data areas are based upon this abstract concept of a word. For example, two sections of a Java stack frame--the local variables and operand stack-- are defined in terms of words. These areas can contain values of any of the virtual machine's data types. When placed into the local variables or operand stack, a value occupies either one or two words.


    Примитивы, являющиеся полями объекта, могут и правда занимать минимально необходимое количество места в хипе, но и тут есть нюансы, связанные с memory aligment. Смотрел запись доклада с какой-то java конференции, где как раз рассказывали про этот момент в реализации hot spot. К сожалению, ссылку на доклад найти не смог.
  • Зачем нужны типы данных byte и short в Java?

    Vamp
    @Vamp
    Применительно к jvm это справедливо только для массивов примитивных типов. Для простых целочисленных примитивов внутри jvm есть только два типа - int и long. Так что насчёт экономии памяти тут большие нюансы.
  • Не могу установить соединение по AMQP между двумя контейнерами, в чем может быть дело?

    Vamp
    @Vamp
    Это полный лог исключений? Судя по коду, ещё должно быть AMQPConnectionException.
  • Как положить в лист миллиард объектов?

    Vamp
    @Vamp
    Владимир Коротенко, конечно, без прогнозов и планирования никакой новый проект не начинается. Однако, всё не предусмотришь и за всем не уследишь. И для более точных прогнозов неплохо бы знать предел возможностей платформы, изучением которого как раз и занимается ТС.
  • Как положить в лист миллиард объектов?

    Vamp
    @Vamp
    Василий Банников, в настоящем хайлоаде самые невероятные сценарии как раз срабатывают в первую очередь и если в коде размер коллекции явным образом не ограничен, то обязательно наступит момент, когда коллекция переполнится. Так что эксперимент ТС вполне себе практический и добытые знания пригодятся в будущем.
  • Как организовать переадресацию с cas сервера?

    Vamp
    @Vamp
    Oauth2 работает по точно такому же принципу. Без идентификации источника ничего не получится, какое бы дополнение вы ни взяли.
  • Apache Kafka как сделать управляющий канал?

    Vamp
    @Vamp
    Перебалансировка не производится, если консюмер подписан на конкретные партиции вручную. Так что если агент упадет, то никто не перехватит его сообщения.

    Более подробно смотрите в доке.
  • Не рано ли изучать Rust?

    Vamp
    @Vamp
    MiniDeveloper, соглашусь с Сергей Горностаев. Вот прям буквально - подберите список языков, которые вы предпочли бы изучить, зайдите на сайт с вакансиями, ограничьте поиск по своему городу, по порядку вбивайте каждый язык и приступайте к изучению того языка, на который выпало максимальное количество вакансий. Это что касается "дальнейшего трудоустройства".

    Далее, как только изучите выбранный язык на хорошем уровне, то можно будет отвлечься и на другие языки. Проблем с этим быть не должно, так как все императивные языки похожи друг на друга и вам не нужно будет тратить время на освоение тысячи мелочей, одинаковых во всех языках, и можно сразу сосредоточиться на самом интересном. Реально сложный в изучении только первый язык. Причём неважно какой он будет.

    Изучать непопулярный язык с целью заработать на нём - это лотерея. Если не повезёт и вас сразу не возьмут ни в одно из 5 мест, куда требуется rust, то с трудоустройством будут явные проблемы.

    Я похожим образом выбирал фреймворк для PHP проекта - выбирал из самых популярных в моём регионе и не прогадал.
  • Какой подход для валидатора правильней?

    Vamp
    @Vamp
    Алексей Уколов, так можно сказать про вообще любой антипаттерн. Я тоже не видел чтобы кто-то умер от спагетти кода, синглтонов и магических констант.
  • Как написать программу работающую со сборщиком мусора?

    Vamp
    @Vamp
    Мне казалось комментарий к коду вполне ясно описывает, что System.gc() не позволяет управлять gc. Но судя по вашему комментарию, мне это и правда только казалось...
  • Как написать программу работающую со сборщиком мусора?

    Vamp
    @Vamp
    Если быть точным, то не jvm решает, а сборщик мусора.

    Hotspot, например, честно триггерит сборку (если не используется опция -XX:+DisableExplicitGC). Но вот произойдёт ли она на самом деле - зависит от сборщика.

    Точно могу сказать, что при использовании сборщика epsilon вызов System.gc() никогда не приведёт к сборке :)
  • Как добавить HTTP заголовки к SOAP запросу?

    Vamp
    @Vamp
    Раз запрос технически соответствует документации, значит проблема административная и решить её можно только запросом в техподдержку. Спросите у них почему с вашим токеном запросы отклоняются.
  • Какие есть инструменты для реверса JVM?

    Vamp
    @Vamp
    Зачем реверсить JVM? Её исходники и так доступны.