comparison agent/src/share/classes/sun/jvm/hotspot/runtime/sparc/SPARCFrame.java @ 6725:da91efe96a93

6964458: Reimplement class meta-data storage to use native memory Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author coleenp
date Sat, 01 Sep 2012 13:25:18 -0400
parents 1d7922586cf6
children
comparison
equal deleted inserted replaced
6724:36d1d483d5d6 6725:da91efe96a93
1 /* 1 /*
2 * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
421 } 421 }
422 if (getFP().addOffsetTo(INTERPRETER_FRAME_VM_LOCAL_WORDS * VM.getVM().getAddressSize()).lessThan(getSP())) { 422 if (getFP().addOffsetTo(INTERPRETER_FRAME_VM_LOCAL_WORDS * VM.getVM().getAddressSize()).lessThan(getSP())) {
423 return false; 423 return false;
424 } 424 }
425 425
426 OopHandle methodHandle = addressOfInterpreterFrameMethod().getOopHandleAt(0); 426 Address methodHandle = addressOfInterpreterFrameMethod().getAddressAt(0);
427 427
428 if (VM.getVM().getObjectHeap().isValidMethod(methodHandle) == false) { 428 if (VM.getVM().getObjectHeap().isValidMethod(methodHandle) == false) {
429 return false; 429 return false;
430 } 430 }
431 431
442 // figure out how to express this. 442 // figure out how to express this.
443 Address bcx = addressOfInterpreterFrameBCX().getAddressAt(0); 443 Address bcx = addressOfInterpreterFrameBCX().getAddressAt(0);
444 444
445 Method method; 445 Method method;
446 try { 446 try {
447 method = (Method) VM.getVM().getObjectHeap().newOop(methodHandle); 447 method = (Method)Metadata.instantiateWrapperFor(methodHandle);
448 } catch (UnknownOopException ex) { 448 } catch (UnknownOopException ex) {
449 return false; 449 return false;
450 } 450 }
451 int bci = bcpToBci(bcx, method); 451 int bci = bcpToBci(bcx, method);
452 //validate bci 452 //validate bci
742 // }; 742 // };
743 // 743 //
744 // private: 744 // private:
745 // 745 //
746 // // where LcpoolCache is saved: 746 // // where LcpoolCache is saved:
747 // constantPoolCacheOop* interpreter_frame_cpoolcache_addr() const { 747 // ConstantPoolCache** interpreter_frame_cpoolcache_addr() const {
748 // return (constantPoolCacheOop*)sp_addr_at( LcpoolCache.sp_offset_in_saved_window()); 748 // return (ConstantPoolCache**)sp_addr_at( LcpoolCache.sp_offset_in_saved_window());
749 // } 749 // }
750 // 750 //
751 // // where Lmonitors is saved: 751 // // where Lmonitors is saved:
752 // BasicObjectLock** interpreter_frame_monitors_addr() const { 752 // BasicObjectLock** interpreter_frame_monitors_addr() const {
753 // return (BasicObjectLock**) sp_addr_at( Lmonitors.sp_offset_in_saved_window()); 753 // return (BasicObjectLock**) sp_addr_at( Lmonitors.sp_offset_in_saved_window());
785 public int getInterpreterFrameBCI() { 785 public int getInterpreterFrameBCI() {
786 // FIXME: this is not atomic with respect to GC and is unsuitable 786 // FIXME: this is not atomic with respect to GC and is unsuitable
787 // for use in a non-debugging, or reflective, system. Need to 787 // for use in a non-debugging, or reflective, system. Need to
788 // figure out how to express this. 788 // figure out how to express this.
789 Address bcp = addressOfInterpreterFrameBCX().getAddressAt(0); 789 Address bcp = addressOfInterpreterFrameBCX().getAddressAt(0);
790 OopHandle methodHandle = addressOfInterpreterFrameMethod().getOopHandleAt(0); 790 Address methodHandle = addressOfInterpreterFrameMethod().getAddressAt(0);
791 Method method = (Method) VM.getVM().getObjectHeap().newOop(methodHandle); 791 Method method = (Method)Metadata.instantiateWrapperFor(methodHandle);
792 return bcpToBci(bcp, method); 792 return bcpToBci(bcp, method);
793 } 793 }
794 794
795 public Address addressOfInterpreterFrameExpressionStack() { 795 public Address addressOfInterpreterFrameExpressionStack() {
796 return addressOfInterpreterFrameMonitors().addOffsetTo(-1 * VM.getVM().getAddressSize()); 796 return addressOfInterpreterFrameMonitors().addOffsetTo(-1 * VM.getVM().getAddressSize());