Details on JRockit adaptive optimization

Hello,
I'm currently doing some research regarding the adaptive optimization system in Java VMs.
I've looked through the various white papers available on JRockit, but couldn't find any detailed technical information about the approach JRockit takes in terms of sampling to identify hot methods, initial code generation and progressive optimization.
Does anyone know if and where such information is publicly available?
My main interest lies in the progressive optimization; does it use a number of predefined optimization levels like other VMs (such as JikesRVM) do, or does it use a more profile-guided approach which causes different optimizations to be applied depending on which method is being recompiled?
Any comments, pointers to related work and/or papers or suggestions are highly appreciated.
Kenneth
PS: In case (part of) the answers or comments you might have are not suitable for this forum, please email me at kenneth [dot] hoste (at) ugent [dot] be.

Hi
Short answer:
JRockit uses a similar (I think) type of adaptive optimization. When a method is first invoked we do a quick JIT compilation of it (JRockit currently never runs byte code interpreted). After that, we sample "hot" methods regularly. When one method is sampled enough times, it is considered hot and we re-compile it in the background with a lot of optimizing. The first JIT compilation must be extremely quick, but the second optimization can take several seconds of working in the background since no thread is actually waiting for it. When the optimized method is done we just swap it in.
There are a lot of neat things that are possible with this approach of optimizing in runtime (we don't do all of it though). One example is that you could sample not only hot methods but actually hot code sections and optimize register allocation for those sections. You could also sample branching, for example to see which block of an if/else statement that is run more often and optimize for that assumption. Also, devirtualization is possible as we know things in runtime that we couldn't know if we compiled everything before.
Hope that this helps
Kind Regards
/Mattis Castegren, JRockit Sustaining Engineering

Similar Messages

  • Details on HotSpot adaptive optimization

    (I'm sorry about crossposting, but I think this forum is better suited for my particular question)
    Hello,
    I'm currently doing some research regarding the adaptive optimization system in Java VMs.
    I've looked through some documentation available on HotSpot, and searched this forum, but couldn't find any detailed technical information about the approach HotSpot takes in terms of sampling to identify hot methods, initial code generation and progressive optimization.
    Does anyone know if and where such information is publicly available? Guidelines as to where to look in the available source code are also appreciated...
    My main interest lies in the progressive optimization; does it use a number of predefined optimization levels like other VMs (such as JikesRVM) do, or does it use a more profile-guided approach which causes different optimizations to be applied depending on which method is being recompiled?
    Any comments, pointers to related work and/or papers or suggestions are highly appreciated.
    Kenneth

    Hi
    Short answer:
    JRockit uses a similar (I think) type of adaptive optimization. When a method is first invoked we do a quick JIT compilation of it (JRockit currently never runs byte code interpreted). After that, we sample "hot" methods regularly. When one method is sampled enough times, it is considered hot and we re-compile it in the background with a lot of optimizing. The first JIT compilation must be extremely quick, but the second optimization can take several seconds of working in the background since no thread is actually waiting for it. When the optimized method is done we just swap it in.
    There are a lot of neat things that are possible with this approach of optimizing in runtime (we don't do all of it though). One example is that you could sample not only hot methods but actually hot code sections and optimize register allocation for those sections. You could also sample branching, for example to see which block of an if/else statement that is run more often and optimize for that assumption. Also, devirtualization is possible as we know things in runtime that we couldn't know if we compiled everything before.
    Hope that this helps
    Kind Regards
    /Mattis Castegren, JRockit Sustaining Engineering

  • Adaptive Optimization Vs JIT Compilation

    Hello All
    In the below link it is stated that Adaptive Optimization improves the preformance by compiling only frequently used methods.
    Now even in JIT compilation I believe there is threshold that is set , like only if a method has been invoked 400 times the JIT compilations will happen. So my understanding is even in JIT compilation only frequently used methods are compiled.
    But I know I am certainly missing something here as the link is from Oracle.
    Could some one please clarify ? Any insight is higly appreciated.
    http://www.oracle.com/technetwork/java/whitepaper-135217.html#hotspot
    Thanks

    Thanks for the reply but I think HotSpot is only the name of the JVM that has the new technology built into it.Sun have been calling it a technology for ten years, including one of the links you cited.
    The new technology should be the AdaptiveOptimization.Try telling Sun. It's not your decision.
    My question is what is the difference between AdaptiveOptimization and JIT Compilation.Considering you just made up the former name, it's really up to you to tell us.
    I googles a lot but did not get many resources and also were not clear.I find that very difficult to believe.
    For some reason I thought this -XX:CompileThreshold was also available on VMs that had JIT compilersVMs such as what? The whole -XX thing is Sun's, now Oracle's, and they stopped shipping JITs ten years ago, as I already said above.

  • Add Proxy server details to File Adapter

    On my current project, we are integrating SAP ECC to SAP Sourcing using standard integration.  Nice and simple, however the SAP Sourcing system is set up in a separate network. 
    Unfortunately we need to get out over the internet and the technical team insist we have to go via the proxy server.
    is there a way to add the proxy server and connection details within the FTP adapter?   has anyone done this before?

    I agree with Shabarish.
    You need to chose another way, like trusted networking.
    An alternative idea, is to use a shell script from your PI OS. Get File, Put file into a PI OS directory (with nfs, for example), and run a shell script like follow (for send file to destination server):
    #!/bin/sh
    ftp -n <proxy server addres> <<END_SCRIPT
    quote USER '<userid>'
    quote PASS '<password>'
    open <remoteserver>
    <user>
    <password>
    mput <filename>

  • It there a way to enable debugging to view SQL details for database adapter

    The adapter guide seems to allude to the possibility with the following statement:
    "To monitor performance, you can enable debug logging and then watch the SQL for various inputs."
    There is no information, however, to indicate how to enable this feature. It would be nice to be able to view details in domain.log.
    Thanks,
    RM

    The switch to tab feature is only available when you are typing in the Location (a.k.a. Awesome) bar. Clicking on a bookmark will always open the bookmarked page in either the current tab or a new tab.

  • In detail architecture of Adapter engine and Adapter framework

    Hi,
    Can somebody give me the archtecture of adapter angine and adapter framework and how how the message will be process by the adapter engine after receving the message from the messsaging service in detail.

    Hi Santosh,
         Check these for Adapter Framework and Adapter Engine:
    <a href="https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/34a1e590-0201-0010-2c82-9b6229cf4a41">Adapter Framework</a>
    <a href="https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/327dc490-0201-0010-d49e-e10f3e6cd3d8">Adapter Framework and Adapter Strategy</a>
    Adapter Engine:
    https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/6b9f17e1-0901-0010-45ac-a9a124b44a82
    https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/03fd85cc-0201-0010-8ca4-a32a119a582d
    Regards,
    Subhasha Ranjan

  • Get Message details in custom adapter module

    Hello,
    Could you please let me know how can we retrieve following parameters in custom adapter module?
    Message size
    Message Mapping name
    Operation Mapping name
    Sender and Receiver Interface names
    Thanks!
    Regards,
    Shweta

    Hi Shweta
    Not all the information is available directly from the adapter module.
    Message size
    Retrieve the input stream of the payload, convert the stream to bytes and count the bytes length.
    Message msg = (Message) inputModuleData.getPrincipalData();
    XMLPayload payload = msg.getDocument();
    InputStream inStr = payload.getInputStream();
    // Convert inStream to bytes
    int size = bytes.length;
    Sender and Receiver interface names
    You can only get Sender interface in sender module, and receiver interface in receiver module. You can get the from the getAction() method.
    Message msg = (Message) inputModuleData.getPrincipalData();
    String interfaceName = msg.getAction().getName();
    Operation Mapping name
    This is not directly available from the Adapter Framework. One workaround is to access this via the Integration Directory API. With the Interface Determination Service API, you can read the Interface Determination object to get the associated mapping. To do this you have to make a SOAP call to the API.
    Message Mapping name
    I'm not sure how this can be retrieved as this is only available in ESR.
    If the module is on the receiver side, another option is to extract the information during mapping and store it into Dynamic Configuration, then in the receiver module, to extract it from Dynamic Configuration.
    Rgds
    Eng Swee

  • More details about Universal Adapter.

    Hi,
    I would like to know what is the Universal Adapter, what is its role and when can we use them.
    I am using OBIA 7.9.5. From the Installation and Configuration guide, I understand that the non-packaged data sources use the Universal Adapter. But I have not understood what does that mean in the right context.
    Thanks.
    Manoj.

    The Universal Adapter is simple yet complicated.
    Simple because all you need to do is generate a flat file (CSV) for the Staging Tables of the Application you wish to load. The documentation describes the structure of these files very well for CRM.
    It is complicated because you must verify you have the right data and create a refresh schedule so the new or updated flat files are generated on the same schedule (or slightly before) as your Execution Plan.
    I posted a thread on this topic, here is a link:
    Re: Configuration of SAP application with OBI application 7.9.5

  • Configuration details about Seeburger adapter

    Hi,
    How to configure the Seeburger Adapter on the outbound and inbound side to intigrate with XI?
    Thanks
    Koteswara Rao

    Rao,
    You have to install the seeburger adapter and import the metadata into IR and use it. You check the document for some help:
    https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/6dc02f5d-0601-0010-cd9d-f4ff9a7e8c33
    SEEBURGER
    ---Satish

  • Can we pass the login details to an adapter at runtime?

    HI,
    I have a ESB service which pulls data of a particular daterange from a table in a database A and puts the data into another table in a different database B.
    Now I have many databases at different locations which are exactly same as database A from which I need to pull the data and push into database B using the same ESB serivice that I described above.
    How can I make my ESB service capable of receiving the login credentials and daterange at runtime say from a GUI and pull the data from the database and push it into database B? Normally we give the connection details at the design time only. Can we give them at runtime?
    Thanks,
    RV

    You need to make different connections for all as it uses the JNDI name (defined at design time) to create a connection.
    cheers
    James

  • Multiple keyFieldValue in Sender File Adapter

    Hello All,
    Have a  situation, with reading 2 files a debit and credit file which have the same file structure, But different file names, Example Credit is prefixed with C.txt and Debit is prefixed with D.txt.. I am able read both the files with configuring one communication channel, using advanced Selection for source file.
    The structure of the debit file will look something like below
    <Header>
    *<identifier>1</identifier>*
      <description>Returned Items</description>
      </Header>
    <Details>
      *<identifier>3</identifier>*
      <returnDate>19-07-2010</returnDate>
      </Details>
       <Details>
      *<identifier>3</identifier>*
      <returnDate>19-07-2010</returnDate>
      </Details>
    <Total>
      *<identifier>9</identifier>*
      <itemCount>000000002</itemCount>
      </Total>
    The structure of the credit file will look something like below
    <Header>
      *<identifier>1</identifier>*
      <description>Returned Items</description>
      </Header>
    <Details>
      *<identifier>2</identifier>*
      <returnDate>19-07-2010</returnDate>
      </Details>
       <Details>
      *<identifier>2</identifier>*
      <returnDate>19-07-2010</returnDate>
      </Details>
    <Total>
      *<identifier>9</identifier>*
      <itemCount>000000002</itemCount>
      </Total>
    I am using the identifier field as the keyFieldValue its value will be  '2' in case of the credit file and '3' in case of the debit file.
    Even if 2 keyFieldValues for 2 and 3 are passed as parameters to the Details records, the adapter reads only details records of 3 as it is declared first in sequence.
    I do not want to create 2 communication channels for just for a different keyFieldValue. Can anyone propose any suggestions.
    --Prashanth

    Hi Sheetal,
    have declared the content conversion as below
    Details.keyFieldValue = 3
    Details.keyFieldValue = 2
    On starting the channel with the 2 files on the directory, the adapater reads the debit file correctly but in case of the credit records, it is not reading the Details structure. I get only the Header and Total Structure for the Credit record.
    --Prashanth

  • Error Invoking Database Adapter

    I am trying to create a simple bpel process which updates table in Oracle Database, but getting some JCA connection issue below:
    "<bpelFault><faultType>0</faultType><bindingFault xmlns="http://schemas.oracle.com/bpel/extension"><part name="summary"><summary>Exception occured when binding was invoked. Exception occured during invocation of JCA binding: "JCA Binding execute of Reference operation 'insert' failed due to: JCA Binding Component connection issue. JCA Binding Component is unable to create an outbound JCA (CCI) connection. Project1:writeDB [ writeDB_ptt::insert(ContactOutputCollection) ] : The JCA Binding Component was unable to establish an outbound JCA CCI connection due to the following issue: BINDING.JCA-12510 JCA Resource Adapter location error. Unable to locate the JCA Resource Adapter via .jca binding file element &lt;connection-factory/> The JCA Binding Component is unable to startup the Resource Adapter specified in the &lt;connection-factory/> element: location='eis/DB/XE_DB'. The reason for this is most likely that either 1) the Resource Adapters RAR file has not been deployed successfully to the WebLogic Application server or 2) the '&lt;jndi-name>' element in weblogic-ra.xml has not been set to eis/DB/XE_DB. In the last case you will have to add a new WebLogic JCA connection factory (deploy a RAR). Please correct this and then restart the Application Server ". The invoked JCA adapter raised a resource exception. Please examine the above error message carefully to determine a resolution. </summary></part><part name="detail"><detail>JCA Resource Adapter location error. Unable to locate the JCA Resource Adapter via .jca binding file element &lt;connection-factory/> The JCA Binding Component is unable to startup the Resource Adapter specified in the &lt;connection-factory/> element: location='eis/DB/XE_DB'. The reason for this is most likely that either 1) the Resource Adapters RAR file has not been deployed successfully to the WebLogic Application server or 2) the '&lt;jndi-name>' element in weblogic-ra.xml has not been set to eis/DB/XE_DB. In the last case you will have to add a new WebLogic JCA connection factory (deploy a RAR). Please correct this and then restart the Application Server </detail></part><part name="code"><code>12510</code></part></bindingFault></bpelFault>"
    thanks

    Hi
    Checklist
    1) Create DataSource
    2) Connection Pool in the DB Adapter(with jndi eis/DB/XE_DB)
    Edit the default connection pool created and point the xaDataSource or Datasource to jndi of datasource created in step1
    Regards,
    Ajay

  • Error at the time of Invocation of DB Adapter

    Hi All
    We are getting following fault while invoking DB Adapter.
    It's a simple composite , a bpel process is triggering DB adapter and selecting data from DB table.Whenever it try to invoke DB Adapter it's throwing run time exception.
    <bindingFault>
    <part name="summary">
    <summary>Exception occured when binding was invoked. Exception occured during invocation of JCA binding: "JCA Binding execute of Reference operation 'SelectEmailSelect' failed due to: JCA Binding Component connection issue. JCA Binding Component is unable to create an outbound JCA (CCI) connection. SelectFromTable:SelectEmail [ SelectEmail_ptt::SelectEmailSelect(SelectEmailSelect_inputParameters,XyzCollection) ] : The JCA Binding Component was unable to establish an outbound JCA CCI connection due to the following issue: BINDING.JCA-12510 JCA Resource Adapter location error. Unable to locate the JCA Resource Adapter via .jca binding file element <connection-factory/> The JCA Binding Component is unable to startup the Resource Adapter specified in the <connection-factory/> element: location='eis/DB/calvinDB'. The reason for this is most likely that either 1) the Resource Adapters RAR file has not been deployed successfully to the WebLogic Application server or 2) the '<jndi-name>' element in weblogic-ra.xml has not been set to eis/DB/calvinDB. In the last case you will have to add a new WebLogic JCA connection factory (deploy a RAR). Please correct this and then restart the Application Server ". The invoked JCA adapter raised a resource exception. Please examine the above error message carefully to determine a resolution. </summary>
    </part>
    <part name="detail">
    <detail>JCA Resource Adapter location error. Unable to locate the JCA Resource Adapter via .jca binding file element <connection-factory/> The JCA Binding Component is unable to startup the Resource Adapter specified in the <connection-factory/> element: location='eis/DB/calvinDB'. The reason for this is most likely that either 1) the Resource Adapters RAR file has not been deployed successfully to the WebLogic Application server or 2) the '<jndi-name>' element in weblogic-ra.xml has not been set to eis/DB/calvinDB. In the last case you will have to add a new WebLogic JCA connection factory (deploy a RAR). Please correct this and then restart the Application Server </detail>
    </part>
    <part name="code">
    <code>null</code>
    </part>
    </bindingFault>
    Any thoughts how to resolve this issue.
    Thanks

    Try the following steps:
    In Weblogic Admin Console:
    1. Create JDBC XA Data Source (<DomainName> -> Services -> JDBC - > Data Sources)
    2. Create Outbound Connection Pool Configuration (<DomainName> -> Deployments -> Configuration -> OutBound Connection Pool) of type javax.resource.cci.ConnectionFactory
    3. Click on the newly created configuration name, and set the JNDI value of the datasource as "     xADataSourceName" Property Value.
    4. After setting the JNDI, use "Enter Key" from the keyboard to set it, and then save the configuration.
    5. Restart the server and try the BPEL Process again.

  • Dynamic JNDI in FTP Adapter | jca.jndi property not picked by Adapter

    Hi,
    I am trying to pass jndi dynamically to FTP adapter using the steps mentioned in http://blogs.oracle.com/adapters/entry/changing_the_connection_factory_jndi_dynamically_in_ftp_adapter.
    I have configured FTP jndi(eis/Ftp/SoaFtpAdapter) at app server.
    And included the following property in the invoke activity that calls the FTP adapter
    <bpelx:inputProperty name="jca.jndi" variable="jndiLocation"/>
    Invoke activity definition looks as following
        <invoke name="Invoke1"
                partnerLink="FTPFileListAdap" portType="ns3:FileListing_ptt"
                operation="FileListing"
                inputVariable="Invoke1_FileListing_InputVariable"
                outputVariable="Invoke1_FileListing_OutputVariable"
                bpelx:invokeAsDetail="no">
          <bpelx:inputProperty name="jca.jndi" variable="jndiLocation"/>
          <bpelx:toProperties>
            <bpelx:toProperty name="jca.ftp.Directory" variable="directoryName"/>
          </bpelx:toProperties>   
        </invoke>FTP Adapter jca configuration is as following
    <adapter-config name="FTPFileListAdap" adapter="FTP Adapter" wsdlLocation="FTPFileListAdap.wsdl" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata">
      <connection-factory location="eis/Ftp/SoaFtpAdapter12" UIincludeWildcard="*.txt"/>
      <endpoint-interaction portType="FileListing_ptt" operation="FileListing">
        <interaction-spec className="oracle.tip.adapter.ftp.outbound.FTPListInteractionSpec">
          <property name="PhysicalDirectory" value="/in/dev"/>
          <property name="Recursive" value="true"/>
          <property name="IncludeFiles" value=".*\.txt"/>
        </interaction-spec>
      </endpoint-interaction>
    </adapter-config>While calling the BPEL i am passing two parameters
    jndiLocation = eis/Ftp/SoaFtpAdapter
    and
    directoryName = /in/dev
    Following is the fault that I am getting while executing the BPEL.
    <fault>
    <bpelFault>
    <faultType>0</faultType>
    <bindingFault>
    <part  name="summary">
    <summary>Exception occured when binding was invoked. Exception occured during invocation of JCA binding: "JCA Binding execute of Reference operation 'FileListing' failed due to: JCA Binding Component connection issue. JCA Binding Component is unable to create an outbound JCA (CCI) connection. RunTimeConfigFTP:FTPFileListAdap [ FileListing_ptt::FileListing(Empty,filelist) ] : The JCA Binding Component was unable to establish an outbound JCA CCI connection due to the following issue: BINDING.JCA-12510 JCA Resource Adapter location error. Unable to locate the JCA Resource Adapter via .jca binding file element <connection-factory/> The JCA Binding Component is unable to startup the Resource Adapter specified in the <connection-factory/> element: location='eis/Ftp/SoaFtpAdapter12'. The reason for this is most likely that either 1) the Resource Adapters RAR file has not been deployed successfully to the WebLogic Application server or 2) the '<jndi-name>' element in weblogic-ra.xml has not been set to eis/Ftp/SoaFtpAdapter12. In the last case you will have to add a new WebLogic JCA connection factory (deploy a RAR). Please correct this and then restart the Application Server Please make sure that the JCA connection factory and any dependent connection factories have been configured with a sufficient limit for max connections. Please also make sure that the physical connection to the backend EIS is available and the backend itself is accepting connections. ". The invoked JCA adapter raised a resource exception. Please examine the above error message carefully to determine a resolution. </summary>
    </part>
    <part  name="detail">
    <detail>JCA Resource Adapter location error. Unable to locate the JCA Resource Adapter via .jca binding file element <connection-factory/> The JCA Binding Component is unable to startup the Resource Adapter specified in the <connection-factory/> element: location='eis/Ftp/SoaFtpAdapter12'. The reason for this is most likely that either 1) the Resource Adapters RAR file has not been deployed successfully to the WebLogic Application server or 2) the '<jndi-name>' element in weblogic-ra.xml has not been set to eis/Ftp/SoaFtpAdapter12. In the last case you will have to add a new WebLogic JCA connection factory (deploy a RAR). Please correct this and then restart the Application Server </detail>
    </part>
    <part  name="code">
    <code>12510</code>
    </part>
    </bindingFault>
    </bpelFault>
    </fault>It seems that FTP Adapter is not picking up the value from jca.jndi property.
    How to handle this situation.
    Thanks
    Ajay

    Hi,
    Since I am working on BPEL 2.0
    Following changes solved my problem.
    In the invoke activity, I replaced the following xml tag
          <bpelx:inputProperty name="jca.jndi" variable="jndiLocation"/>with following
          <bpelx:toProperties>
            <bpelx:toProperty name="jca.jndi" variable="jndiLocation"/>
          </bpelx:toProperties> And now my invoke activity looks as follow.
        <invoke name="Invoke1"
                partnerLink="FTPFileListAdap" portType="ns3:FileListing_ptt"
                operation="FileListing"
                inputVariable="Invoke1_FileListing_InputVariable"
                outputVariable="Invoke1_FileListing_OutputVariable"
                bpelx:invokeAsDetail="no">
          <bpelx:toProperties>
            <bpelx:toProperty name="jca.ftp.Directory" variable="directoryName"/>
          </bpelx:toProperties>   
          <bpelx:toProperties>
            <bpelx:toProperty name="jca.jndi" variable="jndiLocation"/>
          </bpelx:toProperties>      
        </invoke>Thanks
    Ajay

  • Sender sFTP Adapter - SSH Key

    Hi All,
    I have a small doubt regarding Sender sFTP Adapter. This is what we have done to connect with one of Vendor
    1.     Basis created a SSH key in NWA for Vendor and sent to them.
    2.     They linked the SSH key with user name and asked me to use the same.
    3.     We got the firewalls openepd b/w PI and Vendor
    4.     I provided the same detail in sFTP adapter, but I am not able to connect,
    I am getting below error:
    Error: Cannot connect to SFTP server. Host=########, port=22, username=#####. Private key store=########, private key alias=piPKCS12. Timeout=300000 msecs. Absolute home directory=.: KeyStoreException in Method: getPrivateKey( KeyStore, String, String ). The requested keystore type is not available in the default provider package or any of the other provider packages that were searched. (Software version: 3.0.14.2)
    Please provide your inputs.
    Regards,
    Sachin Dhingra

    Hi,
    The first thing you have to do is use the same userid and the pwd and try to connect to the vendor system from your application layer and see if this is connecting or not. If there is a problem in connection then there are few steps that you have to follow. Below are the steps you need to follow:
    1. Open the port from your Vendor side as well as open the port from your XI system(there might be two ports)
    2. Generate the key of your vendor system and one you started login to the system then it will ask to instal the key , so acept it.
    the IS people can help you out over here.
    3. Try to push the one dummy file in that location manually using the command in application layer.
    4. check the authorization in the target directory and try to provide the proper authorization,, 777 is used for full authorization.
    5. use the same useid and the pwd and then try from your xi system processign a dummy file.
    hope this helps.
    cheers,
    jay

Maybe you are looking for