Это просто простой теоретический вопрос из любопытства. Я всегда был как мальчик-поклонник джава. Но одна вещь заставляет меня задаться вопросом, почему Java не предоставляет механизм для создания объектов в стеке? Не было бы более эффективным, если бы я мог просто создать небольшой объект Point (int x, int y) в стеке вместо кучи, как создание структуры на С#. Есть ли какая-то особая причина безопасности в этом ограничении в java?:)
Создание объектов в стеке в java?
Ответ 1
Стратегия здесь заключается в том, что вместо утечки этого решения в язык Java позволяет JVM/Hotspot/JIT/runtime решать, где и как он хочет выделять память.
В настоящее время проводятся исследования, использующие "анализ побега", чтобы выяснить, какие объекты на самом деле не нужно переходить на кучу и стек. Я не уверен, что это уже превратило его в универсальную JVM. Но если это произойдет, это будет контролироваться временем выполнения (вещь -XX: что-то), а не разработчиком.
Поверхность этого заключается в том, что даже старый код может извлечь выгоду из этих будущих улучшений без его обновления.
Если вам нравится вручную управлять этим (но при этом компилятор проверяет, что он остается "безопасным" ), взгляните на Rust.
Ответ 2
Это будет ориентировочно приходить на Java, для этого нет реального набора ETA, поэтому вы можете только надеяться, что он появится на Java 10.
Предложение называется "Типы значений", и вы можете следовать ему в списке рассылки Project Valhalla.
Я не знаю, были ли какие-либо предварительные причины, почему это было не на языке в первую очередь, возможно, первоначально это считалось ненужным или просто не было времени для его реализации.
Ответ 3
Общей проблемой было бы инициализировать некоторую глобальную ссылку с помощью объекта, созданного в стеке. Когда метод, который создал объект, выходит из того, на что вы указываете?
Этот объект, созданный в стеке на Java, выполняется просто за вашей спиной, используя анализ удаления, который гарантирует, что выше сценарий не возникает.