2013-12-03 7 views
0

Так что я относительно новичок в Java и просто прочитал this действительно интересную статью в Википедии об анализе побега. Тем не менее, единственный раз, когда упоминается, что распределение стека используется, когда объект не выходит из вызова метода. Это кажется несколько ограниченным; но опять же, я не могу думать ни о каком другом времени, я бы хотел, чтобы объект был выделен для стека. Поэтому мне интересно:Распределение ячеек Java Manual

1) Есть ли другой момент, когда было бы целесообразно выделить объект для стека?
2) Есть ли способ вручную выделить объект в стек, а не в кучу?
2.5) Если есть, может ли это сделать быстрее (для объектов, которые не уклоняются от метода), вместо того, чтобы анализировать бегство, нужно выяснить это? Или можно каким-то образом сказать Java что-то вроде «В этом методе мне нужен каждый объект, находящийся в куче, не потрудись проверить, может ли он быть в стеке»?

Спасибо!

ответ

1
  1. Да. В случае необходимости. Вы знакомы с рекурсией? Если нет, см 1.
  2. новой строки ("Foo")

2,5 ... Что? Почему вы пытаетесь оптимизировать фазу компиляции? В чем смысл?

+0

1. В рекурсии, как только метод заканчивается, как возвращенный объект передается вызову более раннего метода, если он выделен стеку? 2. Я думал, что создает ссылку на String, которая хранится в куче. 2.5 Для оптимизации, но действительно больше из любопытства. – Sherz

+0

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

+0

Это имеет смысл. А для 2 и 2,5? – Sherz