// A vframeArray is an array used for momentarily storing off stack Java method activations // during deoptimization. Essentially it is an array of vframes where each vframe // data is stored off stack. This structure will never exist across a safepoint so // there is no need to gc any oops that are stored in the structure.
class LocalsClosure; class ExpressionStackClosure; class MonitorStackClosure; class MonitorArrayElement; class StackValueCollection;
// A vframeArrayElement is an element of a vframeArray. Each element // represent an interpreter frame which will eventually be created.
class vframeArrayElement {
friend class VMStructs;
private:
frame _frame; // the interpreter frame we will unpack into
int _bci; // raw bci for this vframe bool _reexecute; // whether we should reexecute this bytecode
Method* _method; // the method for this vframe
MonitorChunk* _monitors; // active monitors for this vframe
StackValueCollection* _locals;
StackValueCollection* _expressions; #ifdef ASSERT bool _removed_monitors; #endif
// Returns the on stack word size for this frame // callee_parameters is the number of callee locals residing inside this frame
int on_stack_size(int callee_parameters,
int callee_locals, bool is_top_frame,
int popframe_extra_stack_expression_els) const;
// Unpacks the element to skeletal interpreter frame void unpack_on_stack(int caller_actual_parameters,
int callee_parameters,
int callee_locals,
frame* caller, bool is_top_frame, bool is_bottom_frame,
int exec_mode);
// this can be a ResourceObj if we don't save the last one... // but it does make debugging easier even if we can't look // at the data in each vframeElement
class vframeArray: public CHeapObj<mtCompiler> {
friend class VMStructs;
private:
// Here is what a vframeArray looks like in memory
// Allocates a new vframe in the array and fills the array with vframe information in chunk void fill_in(JavaThread* thread, int frame_size, GrowableArray<compiledVFrame*>* chunk, const RegisterMap *reg_map, bool realloc_failures);
// Returns the owner of this vframeArray
JavaThread* owner_thread() const { return _owner_thread; }
// Returns the size of the frame that got deoptimized
int frame_size() const { return _frame_size; }
// Unpack the array on the stack passed in stack interval void unpack_to_stack(frame &unpack_frame, int exec_mode, int caller_actual_parameters);
// Deallocates monitor chunks allocated during deoptimization. // This should be called when the array is not used anymore. void deallocate_monitor_chunks();
// Accessor for register map
address register_location(int i) const;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.