How to programmatically determine if  an object is ready to be destroyed?

Dear All,
How can I programmatically determine that whether an object is ready to be garbage collected? I know that the garbage collection process is not guaranteed to occur until the JVM is close to running out of memory. Yet, it is also said that an object is ready for garbage collection if there are no more references to it. Therefore, I am wondering if we have means to know whether an object is ready to be garbage collected, even though that may not happen yet.
For example, if I define such a simple class structure:
public class A
B b = new B();
public void methodA()
b.printB();
public static void main(String[] args)
A a = new A();
a.methodA();
class B {
public void printB() {
System.out.println("from B");
Here I am assuming the object b (of type B) is ready for garbage collection BEFORE the object a (of type A), because the object b is declared and created as a field within object a. Is this assumption true? If yes, how can I verify that during runtime?
Thank you very much for any help!
-- SunnyDay

1. It seems that the System.gc() should be called to make sure garbage collection is performed so that all those WeakReference objects are put into the ReferenceQueue (suppose no strong references to those
objects to which the weak references are pointing). Is all of this guaranteed to happen? That is, is it guaranteed that those weakly referenced objects are being garbage collected and their WeakReference objects are put into the queue, whenever the System.gc() is called?
No, it is not guaranteed. Though it seems to be true for current implementation of JVM, where System.gc() usually does Full GC. However, you should not rely on this and it can be in fact changed in future implemenations.
2. The WeakReference description says the garbage collector may enqueue the newly-cleared weak reference "AT SOME TIME AFTER" the weak reference is cleared. If this happens to be the case, how can I know which
object is deleted first in my example (e.g., if the weak reference of object A is put into the queue before that of B, it may falsely indicate object A is destroyed beofore B)?
Yes, it is quite possible for weak reference to be enqueued in different order.
3. Suppose System.gc() is called and an object's weak reference is put into the queue, can I still know which object is being destroyed at this moment?
You can't. In fact, java threads may be stopped while GC is running. GC may free memory for multiple objects at once (which in fact happens with Mark-Sweep algorithm). So, "destroyed at the moment" does not make sense from this perspective.
If can gave us more details on what you are originally trying to do, probably we could find another solution.

Similar Messages

  • How can we determine an  type object

    On object coming from JSP
    i have to check whether itis integer or string or any other object how can i do that
    Thanks in advance

    Using <objectName>.getClass().getName() method returns the full qualified class name.
    e.g.
    String str = "Dhananjay";
    String className = str.getClass().getName();
    System.out.println(className);
    This will print
    java.lang.String
    (Dhananjay Singh)

  • How can you determine the absolute path to a dynamically created NetStream object?

    We are trying to implement video captioning with a freeware component, ccforflash. This requires us to provide an absolute or relative path  to our NetStream object. How can we determine this path in Flash CS5 AS3?
    From the CCforFlashCS5 documentation:
    "2. Object name and path
    Type the name and path.  This is the instance name of the object with which CCforFlashAS3 will synchronize. It must be spelled correctly, since CCforFlashAS3 will query the object with this name for timing information in order to synchronize the captions. The path must also be included; either relative to the CCforFlashAS3 component (i.e. this.parent) or the absolute path from the main level of the movie (root)."

    It would be easier if the NetStream object was created on an easily identifiable place on the timeline. This player has an MVC architecture. The NetStream object is created in a subclass to Model class, which is itself a subclass of the EventDispatcher object. The View class access it via an interface.
    As you can guess, it's not that straightforward to determine where the NetStream object is located on the timeline. This is compounded by the fact that the NetStream object does not have a name property.
    I've tried methods like these, but they only work for the DisplayObject class:
    public static function displayObjectPath( avDisplayObject : DisplayObject ) :String
    var lvPath:String = "";
    do
    if( avDisplayObject.name ) {
    // var obj_name:String = (avDisplayObject.name == 'root1') ? 'root' : avDisplayObject.name;
    if (avDisplayObject.name != 'root1') {
    lvPath = avDisplayObject.name
       + ( lvPath == "" ? "" : "." + lvPath );
    } else {
    trace("displayObjectPath() NO NAME avDisplayObject="+avDisplayObject);
    } while( avDisplayObject = avDisplayObject.parent );
    return lvPath;
    } // displayObjectPath
    private  function showChildren(d:DisplayObjectContainer):void {
    trace("showChildren()");
    if (d.numChildren>0) {
    for (var c:Number = 0; c < d.numChildren; c++) {
    trace("showChildren c=",c," name=",d.getChildAt(c).name);

  • How do I determine the size of an object on a particular layer?

    Whether it's a rectangle, circle, line, etc. how do I determine what the size of an object is on a particular layer?

    Right click on the rulers and set the scale to pixels in the dialog
    Go to View>new guide and select the position of the guide lines along horizontal and vertial axes
    Window>info brings up the Info Palette. The information in the right lower corner provides a readout of any selection that you make, e.g. with the marquee tool
    View>grid allows one to bring up a non-printable grid which is useful for orientation. The grid can be set up with subdivisions to suit via Edit>preferences>guides and grid
    You can open a duplicate layer at the top of the stack, then using the brush tool create a straight line for visual projection. The layer can be deleted at any time. To create a straight line, click on the begin point, hold down the shift key, and click on the end point
    Hope that one of these options is useful for your purpose. Please post your progress.

  • How can we determine exactly what server an RMI object is bound to?

    We have RMI objects that bind to a server in a cluster. How can we determine for
    monitoring purposes what server a RMI object is currently bound to /executing
    on?
    We have tried the most of the Mbeans but can't find one that returns runtime info
    for startup classes or RMI objects.
    We have a new monitoring requirement we are trying to satisfy.

    try get the value of PKEY_OfflineAvailability using shell property system APIs (SHGetPropertyStoreFromParsingName or ShellFolderItem.ExtendedProperty)
    Visual C++ MVP

  • EEWB :  how to determine the business object and the extension type ?

    Hi,
    I ask myself how to determine the business object and the extension type to use to add new fields in a new tab of a specific transaction ? what means each business object, does that correspond to a specific transaction ?
    I need to add a new tab in the ‘BaMI’ business activity in transaction CRMD_ORDER just after the tab 'Actions' at header level.
    Could you help me please to determine which business object and extension type I have to select during creation of the project and which business object category I have to select during creation of the extension (wizard) ?
    Thanks for your help,
    Marie

    Marie,
    In order to determine what type of transaction you are extending, you will need to look at the customizing for the transaction.
    In the IMG:
    Goto:
    Customer Relationship Management->Transactions->Basic Settings->Define Transaction Types.
    You will then choose the transaction defined that you want to extend.  If you display the details of the transaction you will find an attribute called:
    "Leading Transaction Category".  This tells you the general context in which the transaction is used.  The other item to view is the assignment of business transaction categories found in the maintenance screen.
    This information general corresponds to one of the options that the EEWB will give you on the transaction type.
    As far as extensions go, my recommendation is the following:
    - Use CUSTOMER_H Customer Header Extensions for any new fields at the header level.
    - Use CUSTOMER_I Customer Item Extensions for any new fields at the item level.
    Unless you have a specific requirement to extend a segment of the transaction, I recommend placing all new fields in these segments.  The CUSTOMER_H & CUSTOMER_I segments are considered "standard" segments, that are already built into all the necessary API structures. 
    Let me know if you have any further questions.
    Good luck,
    Stephen

  • How to determine a View Object Type (read only or Updatable) ADF B.C 10.1.3

    Hi all,
    in scott Schema by ADF B.C 10.1.3, I created an entity object like emp
    and created view object EmpView from emp and dept entities
    and Application Module
    and when draging EmpView and dropping it in jspx
    while running I got an error :
    JB0-25003 your EmpView View Object has no Type
    How to determine a View Object Type (read only or updatable) in B.C ?
    Thanks

    Hi,
    this should not require any manual confiuration. Can you select the ApplicationModule in the model, right click on it and run the ADf BC tester ? Check if he ViewObject runs if not added to JSF
    Frank

  • How do I get an activeX object reference from a LabVIEW ActiveXContainer ref?

    How do I get an activeX object reference from a LabVIEW ActiveXContainer ref?
    I'm trying to control an ActiveX object (a Web Browser) from another VI and need to get the object reference programmatically. I can get the LabVIEW ActiveXContainer reference, but am lost on how to get the reference for the object _inside_ the container.

    Hi Lee,
    The reference to the container is actually also accessing the object inside the container. Use the Property Node and Invoke Node to access properties and launch methods for the object. I've attached a small example that passes the reference to a SubVI and invokes a method inside the SubVI.
    - Philip Courtois, Thinkbot Solutions
    Attachments:
    WebContainer.zip ‏21 KB

  • How Can I Determine the Size of the 'My Documents' Folder for every user on a local machine using VBScript?

    Hello,
    I am at my wits end into this. Either I am doing it the wrong way or it is not possible.
    Let me explain. I need a vb script for the following scenario:
    1. The script is to run on multiple Windows 7 machines (32-Bit & 64-Bit alike).
    2. These are shared workstation i.e. different users login to these machines from time to time.
    3. The objective of this script is to traverse through each User Profile folder and get the size of the 'My Documents' folder within each User Profile folder. This information is to be written to a
    .CSV file located at C:\Temp directory on the machine.
    4. This script would be pushed to all workstations from SCCM. It would be configured to execute with
    System Rights
    I tried the script detailed at:
    http://blogs.technet.com/b/heyscriptingguy/archive/2005/03/31/how-can-i-determine-the-size-of-the-my-documents-folder.aspx 
    Const MY_DOCUMENTS = &H5&
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(MY_DOCUMENTS)
    Set objFolderItem = objFolder.Self
    strPath = objFolderItem.Path
    Set objFolder = objFSO.GetFolder(strPath)
    Wscript.Echo objFolder.Size
    The Wscript.Echo objFolder.Size command in the script at the above mentioned link returned the value as
    '0' (zero) for the current logged on user. Although the actual size was like 30 MB or so.
    I then tried the script at:
    http://www.experts-exchange.com/Programming/Languages/Visual_Basic/VB_Script/Q_27869829.html
    This script returns the correct value but only for the current logged-on user.
    Const blnShowErrors = False
    ' Set up filesystem object for usage
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objShell = CreateObject("WScript.Shell")
    ' Display desired folder sizes
    Wscript.Echo "MyDocuments : " & FormatSize(FindFiles(objFSO.GetFolder(objShell.SpecialFolders("MyDocuments"))))
    ' Recursively tally the size of all files under a folder
    ' Protect against folders or files that are not accessible
    Function FindFiles(objFolder)
    On Error Resume Next
    ' List files
    For Each objFile In objFolder.Files
    On Error Resume Next
    If Err.Number <> 0 Then ShowError "FindFiles:01", objFolder.Path
    On Error Resume Next
    FindFiles = FindFiles + objFile.Size
    If Err.Number <> 0 Then ShowError "FindFiles:02", objFile.Path
    Next
    If Err.Number = 0 Then
    ' Recursively drill down into subfolder
    For Each objSubFolder In objFolder.SubFolders
    On Error Resume Next
    If Err.Number <> 0 Then ShowError "FindFiles:04", objFolder.Path
    FindFiles = FindFiles + FindFiles(objSubFolder)
    If Err.Number <> 0 Then ShowError "FindFiles:05", objSubFolder.Path
    Next
    Else
    ShowError "FindFiles:03", objFolder.Path
    End If
    End Function
    ' Function to format a number into typical size scales
    Function FormatSize(iSize)
    aLabel = Array("bytes", "KB", "MB", "GB", "TB")
    For i = 0 to 4
    If iSize > 1024 Then iSize = iSize / 1024 Else Exit For End If
    Next
    FormatSize = Round(iSize, 2) & " " & aLabel(i)
    End Function
    Sub ShowError(strLocation, strMessage)
    If blnShowErrors Then
    WScript.StdErr.WriteLine "==> ERROR at [" & strLocation & "]"
    WScript.StdErr.WriteLine " Number:[" & Err.Number & "], Source:[" & Err.Source & "], Desc:[" & Err.Description & "]"
    WScript.StdErr.WriteLine " " & strMessage
    Err.Clear
    End If
    End Sub
    The only part pending, is to achieve this for the 'My Documents' folder within each User Profile folder.
    Is this possible?
    Please help.

    Here are a bunch of scripts to get folder size under all circumstances.  Take your pick.
    https://gallery.technet.microsoft.com/scriptcenter/site/search?query=get%20folder%20size&f%5B0%5D.Value=get%20folder%20size&f%5B0%5D.Type=SearchText&ac=2
    ¯\_(ツ)_/¯

  • How do I find out what object is "instance 0xfc78f70"

    At the point of, or after an exception, the debugger tells me there is a problem, such as:
    -[__NSCFArray length]: unrecognized selector sent to instance 0xfc78f70
    *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray length]: unrecognized selector sent to instance 0xfc78f70'
    Given that this might be an NSArray, I've put code *Everywhere* all around my NSArray items such as....
                element = [m_UserDetail objectForKey:@"education"];
                if ( [element isKindOfClass:[NSString class]] ) {
                    if ( [element length] || [element1 length] )
                        return 20.0f;
                    else
                        return 0.0f;
                else if ( [element isKindOfClass:[NSArray class]] ) {
                    if ( [element count] )
                        return 20.0f;
                    else
                        return 0.0f;
    And I still get the error.
    Analyse tells me there are no memory leaks, so I am expecting that no objects are going out of scope, as fixing things for Analyse has usually resolved problems like that in the past.
    How do I determine what object, or what module this is in.  BT tells me nothing useful:
    *** First throw call stack:
    (0x32a818bf 0x368eb1e5 0x32a84acb 0x32a83945 0x329de680 0x3148cadd 0x42309 0x5686b 0x37c0c50f 0x32a4d577 0x329d90cf 0x37b803fb 0x16ebb 0x3ad79 0x37c43c39 0x37b9b6e9 0x37b9b6b3 0x37b9b5d5 0x33ab6901 0x33aab5a1 0x33aab695 0x33aab29f 0x33aab1d5 0x32a55b03 0x32a552cf 0x32a54075 0x329d74dd 0x329d73a5 0x38118fed 0x31322743 0x13055 0x13014)
    terminate called throwing an exception(lldb) bt
    * thread #1: tid = 0x1c03, 0x32c7e32c libsystem_kernel.dylib`__pthread_kill + 8, stop reason = signal SIGABRT
        frame #0: 0x32c7e32c libsystem_kernel.dylib`__pthread_kill + 8
        frame #1: 0x36feaf5a libsystem_c.dylib`pthread_kill + 54
        frame #2: 0x36fe3fea libsystem_c.dylib`abort + 94
        frame #3: 0x37f47f6a libc++abi.dylib`abort_message + 46
        frame #4: 0x37f4534c libc++abi.dylib`_ZL17default_terminatev + 24
        frame #5: 0x368eb2e2 libobjc.A.dylib`_objc_terminate + 146
        frame #6: 0x37f453c4 libc++abi.dylib`_ZL19safe_handler_callerPFvvE + 76
        frame #7: 0x37f45450 libc++abi.dylib`std::terminate() + 20
        frame #8: 0x37f46824 libc++abi.dylib`__cxa_rethrow + 88
        frame #9: 0x368eb234 libobjc.A.dylib`objc_exception_rethrow + 12
        frame #10: 0x329d7544 CoreFoundation`CFRunLoopRunSpecific + 404
        frame #11: 0x329d73a4 CoreFoundation`CFRunLoopRunInMode + 104
        frame #12: 0x38118fec GraphicsServices`GSEventRunModal + 156
        frame #13: 0x31322742 UIKit`UIApplicationMain + 1090
        frame #14: 0x00013054 Iris3D`main + 60 at main.m:13
    (lldb)
    This reason, "'-[__NSCFArray length]: unrecognized selector sent to instance " in other web postings at stack-overflow suggest checking NSLog statements, and I've also done that as well.
    I've checked every "length" statement in my program (126) occurrances, and every NSLog statement (110) occurrances, making sure they all begin with a string format, @" .." and everything looks good.
    ====
    Background
    =========
    I'm merging information from 3 individual tab-bar tableViewControllers into a single tab-bar item with a single TVC using 3 sections, and everything LOOKS clean, but when I introduce the module with the merged tab, to the tab-bar, I get this error, even when I select a tab that was previously working and then select a table element in the WORKING module, I get the crash.
    It is a fairly complicated app, and I go through the same routines multiple times where everything works, and then "Nth" time through the same code, it crashes. If I can identify what object is getting the erroneous message, I can probably figure out where to add additional checks to the data to make sure I really have an adday, dictionary or string element.
    Thanks!

    Use the '+' at the bottom left of the Breakpoint Navigator to add an Exception breakpoint.  This should stop your program in the debugger when the error happens.

  • How can I determine at runtime the type and specs of the DAQ card a computer has installed?

    I am creating a voltmeter with a record button for use in systems without LabView installed (stand alone exe's are used). My program allows users to select the scan rate on channels they have selected to view. I want to be able to determine the capabilities of the card (max sampling rate, # of channels avaliable, etc...) within LabView at runtime. Any help would be appriciated.
    Thanks...

    Is there a similar type of function for NI-DAQmx? I'm trying to figure out how to programmatically query a card's number of AI channels, AO channels, CTRS's etc, without having to build up my own hard-coded table.

  • How to dynamically determine Receivers within BPM

    I’m trying to design a way to determine my receivers within my BPM process during runtime.   My Scenario is as follows:
    SAP IDOC
        V
      XI
                 XI uses JAVA Mapping MT1 to determine vendors and if customer receives PIDX
                             JAVA Mapping MT2 to creates the PIDX output file if required
      V
    SENDs to required Vendor (PIDX if required otherwise email)
    My problem is how to dynamically determine the appropriate receiving vendor for my PIDX.
    I can not use the condition editor on the standard Receiver Determination because the output message (PIDX) doesn't have specific enough information to determine the vendor.
    Other than the customer number there are no other values and we don't want to use customer number because each vendor can have multiple customer numbers (hundreds).
    I've tried various attempts but none seem to work.  This could also be because I have limited knowledge of BPMs and this is my first complex development.  Below are the different attempts I've made at dynamically determining the receiver.  Any input would be appreciated.
    Receiver Scenario 1 
      I developed an interface mapping with MT1 as input and the SAP Receiver Determination as output.  The problem is for me to use this, the interface mapping had to reference the PIDX output (MT2 instead of MT1) which has no data that I can use to determine the receiver.
    Receiver Scenario 2
    I added a receiver step right before my send step and used the receiver list.  This appears to send the PIDX to everyone in the list and there is no way to evaluate or eliminate a name from the list. 
    Receiver Scenario 3
    I created a context object in the Integration Builder and assigned it to a field in MT1.  I then added a switch step with a branch for each vendor.  Within each specific branch there is a Send step that has the context object name I created in the "Send Context" field.  However, on the configuration side I’m unable to access the context object which I created on the design side.  Whenever I open the condition editor and select the radiobutton for "Context Object" the list  does not include the context object I created in the Integration Builder.

    Hi,
    Try using the enhaced receiver determination concept.
    Maybe based on certain field values you can write a UDF which calculates the receiver.
    Try this Blog out
    Link : [
    http://help.sap.com/saphelp_nw70/helpdata/en/43/a5f2066340332de10000000a11466f/frameset.htm]
    Regards,
    Abhishek
    Award if helpful.

  • How do I determine the size of an event queue?

    Hi,
    I'd like to be able to programmatically determine how many events are in queue so that I can change how they are processed based on how far behind the loop is.
    Is there a way to easily do this in labview? 
    I suppose I could create an identical parallel event loop that just counts the events as they come in, and then subtract the ones that get processed by the main event loop, but it seems like there should be an easier way.
    I'm using LV 8.1
    Thanks,
    Greg

    So you are recomending running two event loops, one waiting for the faster events and one waiting for the slower events?
    I wouldn't put it that way.
    Any event that takes 'long' (eg. a significant amount of time), should be processed in a consumer loop.
    So the event arives in the normal event structure, and is than feed to a consumer loop via a queue.
    In the LabVIEW examples there is a framework example called 'Produces/consumer with events' (or something like that).
    If you have a specific type of event generating very fast and you are only interested in the last a notifier might be usefull.
    Ton
    Free Code Capture Tool! Version 2.1.3 with comments, web-upload, back-save and snippets!
    Nederlandse LabVIEW user groep www.lvug.nl
    My LabVIEW Ideas
    LabVIEW, programming like it should be!

  • How to RELIABLY compare two File objects?

    Hi java community!
    I have two File objects and I need to know whether they both point to the same file on the system. First, I tried using the equals() method of the File object, but later I found that this often returns false even when file being pointed to by both objects is the same file.
    For example:
      public static void main(String[] args) throws Exception {
        File mFileA = new File("C:\\PROGRA~1\\MYPROG~1\\MYDATA~1.TXT");
        File mFileB = new File("C:\\Program Files\\My Program\\My Data File.txt");
        DataInputStream mInputA = new DataInputStream(new BufferedInputStream(new FileInputStream(mFileA)));
        DataInputStream mInputB = new DataInputStream(new BufferedInputStream(new FileInputStream(mFileB)));
        System.out.println("Contents of file A:");
        while (mInputA.available() > 0) {
          System.out.println(mInputA.readLine());
        System.out.println("\nContents of file B:");
        while (mInputB.available() > 0) {
          System.out.println(mInputB.readLine());
        System.out.println("\nAre file A and file B the same file?");
        System.out.println(mFileA.equals(mFileB) ? "Yes" : "No");
      }Running this gives the following output:
    Contents of file A:
    First line of the file.
    Second line of the file.
    Third and final line of the file.
    Contents of file B:
    First line of the file.
    Second line of the file.
    Third and final line of the file.
    Are file A and file B the same file?
    NoIt seems that the different representation of the paths (short 8.3 file names, vs. long file names) is confusing Java into believing that they are two separate files, even though the example above confirms that they are in fact the same file by showing the contents from input streams derived by the two File objects (which are, needless to say, identical).
    So, does anyone know how to reliably determine whether two File objects point to the same file?
    Cheers,
    Martin

    sabre150 wrote:
    Bren_McGuire wrote:
    Thanks guys.
    I'd just found it too right after I made this post. :p95% of the time the promised Dukes never arrive so thanks for the Dukes.Ditto

  • How can I determine which image was clicked in 3D carousel?

    I have been modifying some 3D carousel code that I found in hopes that I can get it such that when image "resolv2.jpg" (or any of my other images) is clicked on at the front of my carousel, it goes to a specific webpage. By just replacing "moveBack(event.target) from the toggler section of the code with "navigateToURL:(newURLRequest('http://google.com'), the target DOES sucessfully go to google when clicked on. However, I want to modify this code by altering the else statement to say something to the effect of "else if event.target (clicked on object) is 'resolv2.jpg' THEN go to google". So essentially, my question is how can I determine which image was clicked? Here is the entire code with the area I was altering bolded:
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" applicationComplete="init();" backgroundGradientColors="[#000033, #000033]" backgroundGradientAlphas="[1.0, 1.0]">
    <mx:Script>
              <![CDATA[
    //Import Papervision Classes
                   import org.papervision3d.scenes.*;
                   import org.papervision3d.cameras.*; 
                   import org.papervision3d.objects.*;
                   import org.papervision3d.objects.primitives.*;
                   import org.papervision3d.materials.*;
                   import org.papervision3d.materials.shadematerials.*;
                   import org.papervision3d.materials.utils.MaterialsList;
                   import org.papervision3d.lights.*;
                   import org.papervision3d.render.*;
                   import org.papervision3d.view.*;
                   import org.papervision3d.events.*;
                   import org.papervision3d.core.*;
                   import org.papervision3d.lights.PointLight3D;
                   import flash.filters.DropShadowFilter;
                         import caurina.transitions.*;
                         private var numOfItems:int = 5;
                         private var radius:Number = 600;
                         private var anglePer:Number = (Math.PI*2) / numOfItems;
                         //private var dsf:DropShadowFilter = new DropShadowFilter(10, 45, 0x000000, 0.3, 6, 6, 1, 3);
                   public var angleX:Number = anglePer;
             public var dest:Number = 1;
                   private var theLight:PointLight3D;
            //Papervision Engine
                   private var viewport:Viewport3D; 
                   private var scene:Scene3D; 
                   private var camera:Camera3D;
                   private var renderer:BasicRenderEngine;
             private var planeArray:Array = new Array();
             [Bindable]
             public var object:Object;
             private var arrayPlane:Object;
             private var p:Plane;
             //Initiation function           
             private function init():void 
             viewport = new Viewport3D(pv3dCanvas.width, pv3dCanvas.height, false, true); 
             pv3dCanvas.rawChildren.addChild(viewport); 
             viewport.buttonMode=true;
             renderer = new BasicRenderEngine();
             scene = new Scene3D(); 
             camera = new Camera3D();
             camera.zoom = 2; 
             createObjects(); 
             addEventListeners();
    //Create Objects function          
              private function createObjects():void{
              for(var i:uint=1; i<=numOfItems; i++)
                        /* var shadow:DropShadowFilter = new DropShadowFilter();
                        shadow.distance = 10;
            shadow.angle = 25; */
                        var bam:BitmapFileMaterial = new BitmapFileMaterial("images/resolv"+i+".jpg");
                        bam.oneSide = false;
                        bam.smooth = true;
            bam.interactive = true;
                        p = new Plane(bam, 220, 200, 2, 2);
                        p.x = Math.cos(i*anglePer) * radius;
                        p.z = Math.sin(i*anglePer) * radius;
                        p.rotationY = (-i*anglePer) * (180/Math.PI) + 270;
                        scene.addChild(p);
                        //p.filters=[shadow];
                        p.extra={pIdent:"in"};
                        p.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, toggler);
            planeArray[i] = p;
              // create lighting
            theLight = new PointLight3D();
            scene.addChild(theLight);
            theLight.y = pv3dCanvas.height;
              private function toggler(event:InteractiveScene3DEvent):void
                            // if the cube's position is "in", move it out else move it back
                            if (event.target.extra.pIdent == "in")
                                    moveOut(event.target);
                            else
                                   moveBack(event.target);
                    private function moveOut(object:Object):void
                              trace(object +" my object");
                            // for each cube that was not selected, remove the click event listener
                            for each (var arrayPlane:Object in planeArray)
                                    if (arrayPlane != object)
                                            arrayPlane.removeEventListener(InteractiveScene3DEvent.OBJECT_PRESS, toggler);
                            //right.enabled=false;
                            //left.enabled=false;
                            // move the selected cube out 1000 and rotate 90 degrees once it has finished moving out
                            Tweener.addTween(object, {scaleX:1.2, time:0.5, transition:"easeInOutSine", onComplete:rotateCube, onCompleteParams:[object]});
                            Tweener.addTween(object, {scaleY:1.2, time:0.5, transition:"easeInOutSine", onComplete:rotateCube, onCompleteParams:[object]});
                            // set the cube's position to "out"
                            object.extra = {pIdent:"out"};
                            // move the camera out 1000 and move it the to same y coordinate as the selected cube
                            //Tweener.addTween(camera, {x:1000, y:object.y, rotationX:0, time:0.5, transition:"easeInOutSine"});
                    private function moveBack(object:Object):void
                            // for each cube that was not selected, add the click event listener back
                            for each (var arrayPlane:Object in planeArray)
                                    if (arrayPlane != object)
                                            arrayPlane.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, toggler);
                            // move the selected cube back to 0 and rotate 90 degrees once it has finished moving back
                            Tweener.addTween(object, {scaleX:1, time:0.5, transition:"easeInOutSine", onComplete:rotateCube, onCompleteParams:[object]});
                            Tweener.addTween(object, {scaleY:1, time:0.5, transition:"easeInOutSine", onComplete:rotateCube, onCompleteParams:[object]});
                            // set the cube's position to "in"
                            object.extra = {pIdent:"in"};
                            // move the camera back to its original position
                            //Tweener.addTween(camera, {x:0, y:1000, rotationX:-30, time:0.5, transition:"easeInOutSine"});
                            //right.enabled=true;
                            //left.enabled=true;
                    private function goBack():void
                            // for each cube that was not selected, add the click event listener back
                            for each (var arrayPlane:Object in planeArray)
                                    if (arrayPlane != object)
                                            arrayPlane.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, toggler);
                    private function rotateCube(object:Object):void
                            //object.rotationX = 0;
                            //Tweener.addTween(object, {rotationZ:0, time:0.5, transition:"easeOutSine"});
              private function addEventListeners():void{
        this.addEventListener(Event.ENTER_FRAME, render);
    //Enter Frame Listener function             
    private function render(e:Event):void{ 
                     renderer.renderScene(scene, camera, viewport);
                     camera.x = Math.cos(angleX) * 800;                                                  
                     camera.z = Math.sin(angleX) * 800;
    private function moveRight():void
              dest++;
              Tweener.addTween(this, {angleX:dest*anglePer, time:0.5});
              //goBack();
    private function moveLeft():void
              dest--;
              Tweener.addTween(this, {angleX:dest*anglePer, time:0.5});
              //goBack();
              ]]>
    </mx:Script>
              <mx:Canvas width="1014" height="661">
              <mx:Canvas id="pv3dCanvas" x="503" y="20" width="400" height="204" borderColor="#110101" backgroundColor="#841414" alpha="1.0" backgroundAlpha="0.57"> 
              </mx:Canvas>
              <mx:Button x="804" y="232" label="right" id="right" click="moveRight(),goBack()"/>
              <mx:Button x="582" y="232" label="left"  id="left"  click="moveLeft(),goBack()" />
              </mx:Canvas>
    </mx:Application>

    Your answer may be correct, but I am very much a beginner to actionscript, and I was wondering moreso if it is possible to determine the root/url (i.e. images/resolv2.jpg)? Or even if InteractiveScene3DEvent calls a variable that holds this url? However, specifically, I'm just wondering if the actionscript itself could determine the url in a line of code such as "if object == BitmapFileMaterial("/images/resolv2.jpg"); "? Also, here's a copy of InteractiveScene3DEvent in more detail if you think that will help:
    public class InteractiveScene3DEvent extends Event
                         * Dispatched when a container in the ISM recieves a MouseEvent.CLICK event
                        * @eventType mouseClick
                        public static const OBJECT_CLICK:String = "mouseClick";
                         * Dispatched when a container in the ISM receives an MouseEvent.MOUSE_OVER event
                        * @eventType mouseOver
                        public static const OBJECT_OVER:String = "mouseOver";
                         * Dispatched when a container in the ISM receives an MouseEvent.MOUSE_OUT event
                        * @eventType mouseOut
                        public static const OBJECT_OUT:String = "mouseOut";
                         * Dispatched when a container in the ISM receives a MouseEvent.MOUSE_MOVE event
                        * @eventType mouseMove
                        public static const OBJECT_MOVE:String = "mouseMove";
                         * Dispatched when a container in the ISM receives a MouseEvent.MOUSE_PRESS event
                        * @eventType mousePress
                        public static const OBJECT_PRESS:String = "mousePress";
                         * Dispatched when a container in the ISM receives a MouseEvent.MOUSE_RELEASE event
                        * @eventType mouseRelease
                        public static const OBJECT_RELEASE:String = "mouseRelease";
                         * Dispatched when the main container of the ISM is clicked
                        * @eventType mouseReleaseOutside
                        public static const OBJECT_RELEASE_OUTSIDE:String = "mouseReleaseOutside";
                         * Dispatched when a container is created in the ISM for drawing and mouse interaction purposes
                        * @eventType objectAdded
                        public static const OBJECT_ADDED:String = "objectAdded";
                        public var displayObject3D                                        :DisplayObject3D = null;
                        public var sprite                                                            :Sprite = null;
                        public var face3d                                                            :Triangle3D = null;
                        public var x                                                                      :Number = 0;
                        public var y                                                                      :Number = 0;
                        public var renderHitData:RenderHitData;
                        public function InteractiveScene3DEvent(type:String, container3d:DisplayObject3D=null, sprite:Sprite=null, face3d:Triangle3D=null,x:Number=0, y:Number=0, renderhitData:RenderHitData = null, bubbles:Boolean=false, cancelable:Boolean=false)
                                  super(type, bubbles, cancelable);
                                  this.displayObject3D = container3d;
                                  this.sprite = sprite;
                                  this.face3d = face3d;
                                  this.x = x;
                                  this.y = y;
                                  this.renderHitData = renderhitData;
    Thank you so much!

Maybe you are looking for