Heap vs. Stack

why is memory allocation for newely created objects the slowest kind of memory allocation in java?
if, for example, I call a Method containning a single local variable of type int, a stack frame will be allocated with an array of length 1 containing that local variable(and an operand stack + constant pool reference, but that's beside the point). why is this memory allocation faster than creating a new instance of the class Integer? is the stack essentially smaller than the heap(that's for sure), thus being placed in main memory, to which OS runtime has faster access?
I alwayas took this kind of for granted, but when I came to think about it I couldn't find a clear explanation...

Agreed, but the context you're sketching here is a kindergarten context, even with as little as --The purpose of the small example was just to show one situation where you obviously were wrong. No, you've got you're reasoning skills upside down. In reply #6 you wrote --
If an object is local to a method it can as well live on the stack during the excecution of the
method as variables do.And I simply showed that this is not necessarily true; only later you came up with the kindergarten
context, but that still doesn't prove me wrong for the general case you mentioned in you reply #6.
There clearly are cases where optimizations of this kind are possible. Agreed, as I wrote before.
Did you check the link I provided.I've read it before you mentioned it, thank you.
Aggressive optimizations like these will be available in future JIT's regardless of whether you consider
them possible or not.As I said, in such a kindergarten context, optimizer can do what you described, but even in a simple
case like this -- void m() {
   Object o= new ...;
   if (somePredicateThatHasNothingToDoWhithO())
      o= new SomethingElse();
} The compile (whether JIT or not) stands with its back against the wall, because no fixed space can be
allocated on any stack anymore to accomodate to different (sized?) objects. You're talking about a
kindergarten context which you didn't mention in your first statement, so you are the one who's
logically wrong here; sorry, I can't make it look better than it is.
kind regards,
Jos

Similar Messages

  • How to find Heap and stack space

    How to find the heap sapce and stack space allocated at the moment.
    My requirement, I need to test our application by changing both of these, and atfter finish testing and have to set them to old values.

    You may consider reading up on how the Java stores data. There is no malloc() in java. I don't believe there is anyway within java that you can check the heap and stack size. And you can't allocate memory directly in java anyway so you wouldn't be able to change the value if you did get it. I would suggest using C or C++ to do this. Of course you can use JNI to call a C/C++ method from your java class but you will still have to first write the method in C/C++ which will make it platform specific anyway, so again I would suggest writeing this in another language which provides methods with direct access to the stack.

  • Heap and Stack

    Dear;
    I have a bit confusion in memory Heap and Stack.
    I have a class:
    class A {
       String A;
       static String B;
       void methodOne() {
          String C;
    }Now on initialization, I know the static variable B will goto Heap, C will goto Stack
    But where will A goes to Heap or Stack ?

    muhammadowais wrote:
    Dear;
    I have a bit confusion in memory Heap and Stack.
    I have a class:
    class MyClass {
    String A;
    static String B;
    void methodOne() {
    String C;
    Now on initialization, I know the static variable B will goto Heap, C will goto Stack
    But where will A goes to Heap or Stack ?Let's be more precise. (I renamed the class in the above to make the discusion easier.)
    A is a reference variable.
    B is a reference variable.
    C is a reference variable.
    Notice in the above that NONE of the variables point to anything.
    A is a member of MyClass. It doesn't exist if an instance of MyClass doesn't exist. The instance of MyClass goes on the heap, thus indirectly A goes there.
    B is a member of the "class" instance of MyClass. One of those exists when you load MyClass. The instance of the "class" of MyClass goes on the heap, thus indirectly B goes on the heap.
    C is a local variable and thus becomes a stack reference. (If you wish to quibble since it isn't used it is possible that either the compiler or the hotspot compiler could remove it completly thus it would not exist at all.)
    Again note that the above pertains to the variables and not what those variables reference.

  • Stack Or Heap

    Hi I am new to Java Tecnology .If Someone can help me with this thing .
    Where is the Array will be stored during memory allocation .In the Heap or Stack .
    What will Happen If the Arrsy is for example ,of int type .
    Any Answer will be appericiated .
    THANKS

    But since Array is under util package why dont we have
    to import it while using it .You don't have to import a class to use it. The reason for importing is so that you can refer to a class without using the package name. If you fully qualify all classes, you never have to import at all!
    Is it has to do something to heap or stack Again No, importing or packages have absolutely nothing to do with what's on the stack or heap. Objects are always in the heap, and local variables are always on the stack.

  • Stack/heap

    hi chums,
    For a long time,I am having one doubt in employing local/instance/static variable.
    For instance variable[Object variable],theoretically,as we known,these are on the heap while executing an application.
    For local variable,these are on the stack at run time.
    Specifically,I would like to know what criteria the following things would be.Whether it runs on heap or stack.
    instance variables/methods-primitives=> ?
    static variables/methods-object => ?
    static variable/method-primitives => ?
    local variable-object => ?
    Please anyone clarify me?
    With Regards,
    Stalin.G

    Why the second post, without so much as acknowledging the responses on [your earlier thread|http://forum.java.sun.com/thread.jspa?threadID=5294010|brainless twit]?
    db

  • Large JVM heap sizes under windows xp?

    I have a windows XP Pro SP1 box with 2 GB of physical RAM. I am using the latest jdk, 1.4.2_05.
    I understand that 32 bit windows by default allows 2 GB address space for each application, permanently reserving 2 GB for the OS. (There are also apparently special builds going back to win2k which have a special mode where applications can address 3 GB and the OS addresses 1 GB; if anyone knows how to turn this mode on under win xp please let me know.)
    So, I should be able to allocate ~2 GB to the JVM (the number is slightly less than 2 GB due to overhead associated with each process in windows) using something like
         -Xms1900m -Xmx1900m
    as command line args to the java command.
    But when I try the above it crashes with the error
         Error occurred during initialization of VM
         Could not reserve enough space for object heap
    Experimentally, I found that the maximum value which works on my box is
         -Xms1200m -Xmx1200m
    which seems way smaller than it ought to be.
    Doing a forum search, I found others who report similar issues, e.g.
         http://forum.java.sun.com/thread.jsp?forum=136&thread=522506
    But I did not find a decent solution or up to date discusssion.
    Does anyone know with windows xp pro what the jvm memory limit is?
    As part of my sun search, I came across the following old (circa 2000) but interesting bug report:
         http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4358809
    I have never heard of the rebase program before. Is it built into windows? Is it safe to use? Anyone ever try the command as described there?

    In addition to this forum posting, I got in email communication with Peter Kessler, the technical lead for the garbage collector in the HotSpot(TM) virtual machine). Below are snippets from some of his emails to me.
    #1:
    I haven't tried pushing Windohs XP to see how big I could get the
    heap. I'm pretty sure you don't want to get try to get it to 1.9GB,
    since that wouldn't leave much room for DLL's, JVM data structures
    outside the heap, thread stacks, I/O buffers, etc.
    I don't know what the library C:\WINDOWS\System32\LPK.DLL is, or if
    you could successfully rebase it closer to 0x76000000. The issue
    with rebasing DLL's is that people have sometimes given thought to
    where they should be, given other libraries they are typically used
    with. (If a DLL can't be loaded at its default base address, it
    gets relocated dynamically. That slows down program startup; and
    often means that the library can't be shared with other applications
    running on the same machine, increasing your need for swap file
    space.)
    It does seem weird that we would make the default base for jvm.dll
    be 0x08000000, but the base of hpi.dll at 0x10000000. [See email #3 below]
    The jvm.dll isn't going to get that much larger any time soon. I'll ask around
    about that one. (The library bases for JDK-1.4.2 are different
    from those reported in bug id 4358809 for because we periodically
    reconsider where to base the libraries, given the other libraries
    on a particular release of Windohs.)
    So, I don't have any great advice on how to squeeze another 400MB of
    heap out of your machine. I suppose it's fruitless to ask if you
    could squeeze 400MB of data structures out of your application?
    Have you run an allocation profiler on it?
    Since you are willing to switch operating systems, you can download
    a copy of Solaris 10 for x86 platforms (for free) from
    http://wwws.sun.com/software/solaris/10/
    I just tried a Solaris 10 x86 box, and could get a -Xmx2900m jvm to
    start. But without your application it's hard to know if it would
    run well with that size heap (e.g., if it would have room for thread
    stacks, file buffers, etc.), so your milage may vary, but 2.9GB is
    larger than you say you need. There are lots of other benefits of
    running Solaris. I don't know about making you a poster child, but
    I could ask about that, too.
    #2:
    I'm told that some of the popular distibutions of Linux ship with
    a "4GB" kernel, which allows one to get 3GB (2.4 kernels?) or almost
    4GB (2.6 kernels?) of address space for user processes. I haven't
    used those kernels myself. Among the reasons the 4GB kernel isn't
    the standard kernel is that some user programs are surprised (in a
    bad way) by finding their code or data in the "negative" part of
    the address space, or crossing the "sign-bit" boundary. (Of course,
    all addressing arithmetic should be done as unsigned quantities!)
    Our Java virtual machine shouldn't have those problems, so that
    kernel might work for you.
    #3:
    Ah. It looks like in JDK-1.4.2 (and earlier) we forgot to
    explicitly set the base for hpi.dll, so it got the default
    base of 0x10000000. (Don't we love learning these details
    about Windohs?) As I said, we periodically reconsider the
    bases for the libraries. We seem to have done that, more
    thoroughly, for JDK-1.5.0:
    Base Size Version Path
    0x00400000 0xc000 1.05.0000.0000 C:\pbk\deployed\JDK-1.5.0\bin\java.EXE
    0x77f80000 0x7d000 5.00.2195.6899 C:\WINNT\system32\ntdll.dll
    0x7c2d0000 0x62000 5.00.2195.6876 C:\WINNT\system32\ADVAPI32.dll
    0x7c570000 0xb8000 5.00.2195.6897 C:\WINNT\system32\KERNEL32.DLL
    0x77d30000 0x71000 5.00.2195.6904 C:\WINNT\system32\RPCRT4.DLL
    0x78000000 0x45000 6.01.9844.0000 C:\WINNT\system32\MSVCRT.dll
    0x6d6b0000 0x185000 1.05.0000.0000 C:\pbk\deployed\JDK-1.5.0\jre\bin\client\jvm.dll
    0x77e10000 0x65000 5.00.2195.6897 C:\WINNT\system32\USER32.dll
    0x77f40000 0x3e000 5.00.2195.6898 C:\WINNT\system32\GDI32.DLL
    0x77570000 0x30000 5.00.2161.0001 C:\WINNT\system32\WINMM.dll
    0x6d2f0000 0x8000 1.05.0000.0000 C:\pbk\deployed\JDK-1.5.0\jre\bin\hpi.dll
    0x690a0000 0xb000 5.00.2134.0001 C:\WINNT\system32\PSAPI.DLL
    0x6d680000 0xc000 1.05.0000.0000 C:\pbk\deployed\JDK-1.5.0\jre\bin\verify.dll
    0x6d370000 0x1d000 1.05.0000.0000 C:\pbk\deployed\JDK-1.5.0\jre\bin\java.dll
    0x6d6a0000 0xf000 1.05.0000.0000 C:\pbk\deployed\JDK-1.5.0\jre\bin\zip.dll
    You might want to try the "release candidate" (i.e., what we
    hope will be the final bits) of JDK-1.5.0 from
    http://java.sun.com/j2se/1.5.0/download.jsp
    and see if it helps.

  • Stack size for native thread attaching to JVM

    All:
    I have a native thread (see below, FailoverCallbackThread) that attaches to the JVM and does a Java call through JNI. The stack size for the native thread is 256KB.
    at psiUserStackBangNow+112()@0x20000000007a96d0
    at psiGuessUserStackBounds+320()@0x20000000007a8940
    at psiGuessStackBounds+48()@0x20000000007a8f60
    at psiGetPlatformStackInfo+336()@0x20000000007a9110
    at psiGetStackInfo+160()@0x20000000007a8b40
    at psSetupStackInfo+48()@0x20000000007a5e00
    at vmtiAttachToVMThread+208()@0x20000000007c88b0
    at tsAttachCurrentThread+896()@0x20000000007ca500
    at attachThread+304()@0x2000000000751940
    at genericACFConnectionCallback+400(JdbcOdbc.c:4624)@0x104b1bc10
    at FailoverCallbackThread+512(vocctx.cpp:688)@0x104b8ddc0
    at start_thread+352()@0x20000000001457f0
    at __clone2+208()@0x200000000030b9f0
    This causes stack overflow in Oracle JRockit JVM. (It does not cause overflow with Oracle Sun JDK.) Is there a recommended stack size for this use case for JRockit? Is there a way to compute it roughly?
    Platform Itanium 64 (linux)]
    java version "1.5.0_06"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
    BEA JRockit(R) (build R26.4.0-63-63688-1.5.0_06-20060626-2259-linux-ia64, )
    mp

    How do I found default heap size, stack size for the
    thread, number of threads per jvm/process supported ?The threads is OS, OS install and jvm version specific. That information is also not useful. If you create the maximum number of threads that your application can create you will run out of memory. Threads require memory. And it is unlikely to run very well either.
    The default heap size and stack size are documented in the javadocs that explain the tools that come with the sun jdk.
    and how the above things will vary for each OS and how
    do I found ? Threads vary by OS, and OS install. The others do not (at least not with the sun jvm.)
    If I get "OutOfMemoryError: Unable to create new native thread" Most of the time it indicates a design problem in your code. At the very lease, you should consider using a thread pool instead.
    I found in one forum, in linux you can create maximum
    of 894 threads. Is it true ?Seems high since in linux each thread is a new process, but it could be.

  • JVM 1.4 default stack size

    Hi,
    I would like to know what is the default stack size of JVM of jdk 1.4.
    Is there any command which i can use to find the current stack size set up?
    Is the heap size & stack size same?
    Actually i'm getting a java.lang.StackOverflowError when i execute a class ProgramCallDocument which is present in the jt400.jar provided by IBM in thier Websphere Application Studio Server suite.
    The class is working fine with jdk 1.3. But it is giving an error in jdk 1.4
    Do any one have any clue about this? Please Help.
    Thanks,
    Jac.

    Thanks for the reply...
    Actaully I was looking for how to know the current stack size set for JVM. I assume that using -Xss command will increase the stack size, but before doing so I need to take the current stack size.
    Please let me know if you know the command for getting the current stack size set for JVM.
    Thanks,
    Jacob.

  • Memoria Heap

    when I make this
    int [] x = new int[5] ;
    in where prosecute in heap or stack memory

    jcgra2 wrote:
    when I make this
    int [] x = new int[5] ;
    in where prosecute in heap or stack memoryIt depends: is it defining an instance variable or is it in a method?
    The general rule is: all objects and their instance variables are allocated on the heap; method variables are allocated on the stack. Here you have 7 items:
    the array (int[5]) --- In Java, arrays are objects, so it will be allocated on the heap.
    the array contents (x[0] - x[4]) --- this is considered part of the array, so will be on the heap.
    x --- the variable that references the array. This is where the difference comes: If it is being defined in a method, then x will be allocated on the stack; if it is an instance variable, it will be on the heap.
    HIH
    Winston

  • Oracle 8.1.5 to oracle8.1.6 upgradation

    Hi
    I am working paralelly on both Solaris2.7 and win NT4.0
    The details are as follows
    1. Liscenced versions of Oracle8.1.5 have been installed on both the systems
    In order to upgrade I tried searching for the script u0801050.sql in both the systems under ORACLE_HOME/rdbms/admin, but it was not available
    I solved this as follows on Win NT:
    1. Installed oracle8.1.6 on NT in the same HOME .
    2. The script was present in after this re-install.
    3. I used the script(Should I have done this?)
    But there is a problem with Java Upgradation now.
    I started the database in the RESTRICT mode
    And here is the output from the Log file
    SVRMGR> @jvmu815.sql
    SVRMGR> -- Upgrade an 8.1.5 database to 8.1.6 for running Java and the ORB
    SVRMGR>
    SVRMGR> -- Support packages, including rmjvm were loaded during main upgrade
    SVRMGR>
    SVRMGR> -- Load all the Java classes
    SVRMGR> create or replace java system;
    2> /
    create or replace java system;
    ORA-04030: out of process memory when trying to allocate 554648 bytes (joxcx callheap,ioc_allocate ufree)
    ORA-00604: error occurred at recursive SQL level 1
    ORA-04030: out of process memory when trying to allocate 8512 bytes (pga heap,ksm stack)
    SVRMGR>
    SVRMGR> -- Java Sanity check for installation
    SVRMGR> -- If the following query returns 0, then the Java installation
    SVRMGR> -- did not suceed
    Any solutions or input ?
    Thanks in advance
    nandeep
    [email protected])
    null

    applets can only use jdbc thin drivers.

  • Had this error msg in my application log:

    Had this error msg in my application log:
    [21/Feb/2002 10:16:20:7] info: REQ-012: thread add
    [21/Feb/2002 10:16:20:7] info: REQ-012: thread add
    [21/Feb/2002 10:16:20:7] info: ENGINE-ready: ready: 10820
    BASEURL: https://ssunp03.company.com:8081
    strURL: https://ssunp03.company.com:8081/cgi-bin/gx.cgi/AppLogic+EventServerManager
    EventServerHttpInvocation > java.net.MalformedURLException: unknown protocol: https
    **Out of memory, exiting**
    ld.so.1: /pimcreg5/imc/nas/40sp3/nas/usr/java/bin/sparc/native_threads/jre: fatal: /pimcreg5/imc/nas/40sp3/nas/us
    r/java/lib/sparc/native_threads/libjava.so: mprotect failed: Resource temporarily unavailable
    Killed
    Connected to LDAP server on ssunp03.company.com port 1390
    [21/Feb/2002 02:42:49:1] info: ENGINE-class_loader_created: New class loader com.kivasoft.engine.EngineClassLoade
    rNonVersionable@1c14d67f has just been created
    Can anyone share with me his experience about ld.so.1?? What is it and why does it cause my apps server to reboot?

    It looks like you might simply have run out of memory. It just looks like the JRE tried to adjust its memory map and run out space. When mprotect fails the problem probably isn't with the .so itself.
    What are the memory characteristics of your machine? Including the heap and stack space that you allocate for your JVM, as well as the actual physical and swap space available on the server.

  • ORA-00604: error occurred at recursive SQL level 2

    Hello,
    I am trying to create a simple table and I am getting a ora error as below.
    SQL> create table album(name varchar2(100),image blob);
    create table album(name varchar2(100),image blob)
    ERROR at line 1:
    ORA-00604: error occurred at recursive SQL level 2
    ORA-01422: exact fetch returns more than requested number of rows
    how to resolve this?Any help..
    Thanks,
    Ranz.

    Hi,
    *@Anurag Tibrewal,*
    I followed as per the order od statements you gave. Initially there was no table "ALBUM" when I executed the first 2 statements.
    3rd staement i created a table "ALBUM" and then 4th and 5th statement showed that I have a table called "ALBUM".
    Now when again I wanted to drop the table I am getting the same error.
    SQL> drop table album
    2 ;
    drop table album
    ERROR at line 1:
    ORA-00604: error occurred at recursive SQL level 1
    ORA-01422: exact fetch returns more than requested number of rows
    *@Jean-Valentin*
    I am not finding the trace file for today as i checked the alert log. When i searched for the the error I found the error for March 4. No ora-00604 error from today.
    As shown in ALERT LOG.
    Thu Mar 04 10:50:41 2010
    Errors in file d:\oracle\product\10.2.0\admin\raneeshtest\bdump\*raneeshtest_j000_5976.trc*:
    ORA-00604: error occurred at recursive SQL level 1
    ORA-04030: out of process memory when trying to allocate 172 bytes (Typecheck,seg:kggfaAllocSeg)
    ORA-12012: error on auto execute of job 1
    ORA-04030: out of process memory when trying to allocate 16428 bytes (pga heap,kgh stack)
    Trace file details:
    Dump file d:\oracle\product\10.2.0\admin\raneeshtest\bdump\raneeshtest_j000_5976.trc
    Thu Mar 04 10:50:31 2010
    ORACLE V10.2.0.3.0 - Production vsnsta=0
    vsnsql=14 vsnxtr=3
    Personal Oracle Database 10g Release 10.2.0.3.0 - Production
    With the Partitioning, OLAP and Data Mining options
    Windows NT Version V6.0 Service Pack 1
    CPU : 2 - type 586, 2 Physical Cores
    Process Affinity : 0x00000000
    Memory (Avail/Total): Ph:27M/2037M, Ph+PgF:341M/4352M, VA:4M/2047M
    Instance name: raneeshtest
    Redo thread mounted by this instance: 1
    Oracle process number: 15
    Windows thread id: 5976, image: ORACLE.EXE (J000)
    *** 2010-03-04 10:50:31.224
    *** ACTION NAME:() 2010-03-04 10:50:30.276
    *** MODULE NAME:() 2010-03-04 10:50:30.195
    *** SERVICE NAME:(SYS$USERS) 2010-03-04 10:50:30.195
    *** SESSION ID:(137.401) 2010-03-04 10:50:30.195
    *********START PLSQL RUNTIME DUMP************
    ***Got internal error Exception caught in pfrrun() while running PLSQL***
    ***Got ORA-4030 while running PLSQL***
    PACKAGE SYSMAN.MGMT_ADMIN_DATA:
    library unit=3416af50 line=128 opcode=117 static link=0 scope=0
    FP=3ca31374 PC=30f42000 Page=0 AP=3ca47b2c ST=3ca32778
    DL0=3ca46564 GF=3ca465b0 DL1=3ca46584 DPF=3ca465a8 DS=30f421e4
    DON library unit variable list instantiation
    0 3416af50 3ca465b0 3ca2005c
    1
    2
    3
    4
    5
    6
    7
    scope frame
    2 0
    1 3ca31374
    package variable address size
    0 3ca46698 16
    1 3ca466a8 16
    2 3ca466b8 16
    3 3ca466c8 16
    4 3ca466d8 16
    5 3ca466e8 20
    6 3ca466fc 16
    7 3ca4670c 20
    8 3ca46720 16
    9 3ca46730 4
    10 3ca46734 4
    11 3ca46738 4
    12 3ca4673c 4
    13 3ca46740 4
    14 3ca46744 4
    15 3ca46748 4
    16 3ca4674c 4
    17 3ca46750 4
    18 3ca46754 4
    19 3ca46758 4
    20 3ca4675c 4
    21 3ca46760 20
    22 3ca46774 20
    23 3ca46788 20
    24 3ca4679c 20
    25 3ca467b0 4
    26 3ca467b4 4
    27 3ca467b8 4
    28 3ca467bc 4
    29 3ca467c0 16
    30 3ca467d0 16
    31 3ca467e0 8
    32 3ca467e8 39
    33 3ca46810 39
    34 3ca46838 521
    35 3ca46a44 521
    36 3ca46c50 140
    37 3ca46cdc 140
    38 3ca46d68 30
    39 3ca46d88 30
    40 3ca46da8 30
    41 3ca46dc8 30
    42 3ca46de8 30
    43 3ca46e08 30
    44 3ca46e28 30
    45 3ca46e48 30
    46 3ca46e68 30
    47 3ca46e88 30
    48 3ca46ea8 30
    49 3ca46ec8 30
    50 3ca46ee8 140
    51 3ca46f74 140
    52 3ca47000 30
    53 3ca47020 30
    54 3ca47040 30
    55 3ca47060 30
    56 3ca47080 39
    57 3ca470a8 39
    version=43123476 instantiation size=2920
    line pcode offset
    1 2
    4 620
    5 632
    6 632
    7 638
    8 644
    14 650
    29 810
    44 970
    47 992
    48 1000
    49 1008
    50 1016
    51 1024
    52 1032
    53 1040
    54 1048
    55 1056
    56 1064
    57 1072
    60 1080
    128 1814
    196 2548
    197 2554
    198 2560
    199 2566
    205 2572
    206 2578
    438 2584
    1 2586
    ***********END PLSQL RUNTIME DUMP************
    *** 2010-03-04 10:50:40.690
    ORA-12012: error on auto execute of job 1
    ORA-04030: out of process memory when trying to allocate 16428 bytes (pga heap,kgh stack)
    *** 2010-03-04 10:50:41.206
    ORA-00604: error occurred at recursive SQL level 1
    ORA-04030: out of process memory when trying to allocate 172 bytes (Typecheck,seg:kggfaAllocSeg)
    ORA-12012: error on auto execute of job 1
    ORA-04030: out of process memory when trying to allocate 16428 bytes (pga heap,kgh stack)
    SQL> select * from dual;
    D
    X
    SQL>
    This is the output. Its returning corredclty. Now what is the problem? Pls help me.

  • Performance problem submitting big XML string parameter to the web service

    We deployed a web service on the OC4J via oracle.j2ee.ws.StatelessJavaRpcWebService . This web service takes one string as a parameter. The string contains XML. Evrything works great UNLESS input XML string reaches 5Mb in size. When it happens OC4J does something with it for about 10 minutes (yes, minutes) before it calls the web service method. At this time java.exe consumes 100% of CPU.
    WE tried to increase JVM heap size, stack size, etc, - no effect.
    Please, help!
    Thank you in advance,
    Vlad.

    Hi Sheldon,
    What i feel is that it's not been handled in your webservice if the parameter is null or "" <blank> space
    i just you to take care in webservice that if the parameter is null or "" pass the parameter null to the stored proc
    Regards
    Pavan

  • How do I increase the thread limit on Linux?

    OS: Linux (or Sun Linux)
    Kernel: 2.4.9-31enterprise
    Memory: 2GB
    CPUs: 2
    Java: 1.4.1_01
    I have a dual processor Cobalt LX50 and I am running
    into a thread limit with Java. No matter what I do
    with the Java JVM parameters (heap and stack), I
    cannot get any more than 949 threads. My "top" and "vmstat" output
    shows that I am no where near my memory capacity.
    Below is a simple Java program (28 lines long) I have
    used to test this limit. My question is simply how do
    I go about increasing this limit. Is there some kernel
    parameter I can set or maybe have to recompile into
    the kernel? My /proc/sys/kernel/threads-max is 16383.
    I do not believe my ulimit settings are the problem,
    but I will post them anyway. The problem also occurs
    on non-Cobalt (plain old PCs) uniprocessor machines
    maxxing at about 1018 threads. The other interesting thing is that when I run the same program through the Kaffe VM with -Xms64M and -Xmx512M I do not run into the thread limit problem. Does anyone know what I need to change to get my thread limit up? Also, rewriting the way the program uses threads is not an option.
    [root]# ulimit -a core file size (blocks) 0
    data seg size (kbytes) unlimited
    file size (blocks) unlimited
    max locked memory (kbytes) unlimited
    max memory size (kbytes) unlimited
    open files 1024
    pipe size (512 bytes) 8
    stack size (kbytes) 8192
    cpu time (seconds) unlimited
    max user processes 8191
    virtual memory (kbytes) unlimited
    /*******************************Sample java program
    testing thread
    limits***********************************************/
    import java.util.Timer;
    import java.util.TimerTask;
    public class Reminder {
    Timer timer;
    static int cnt;
    public Reminder(int seconds) {
    timer = new Timer();
    timer.schedule(new RemindTask(), seconds*1000);
    class RemindTask extends TimerTask {
    public void run() {
    System.out.println("Time's up!");
    timer.cancel(); //Terminate the timer thread
    public static void main(String args[]) {
    System.out.println("About to schedule task.");
    cnt = 0;
    while (true) {
    new Reminder(90);
    System.out.println("Thread #" + ++cnt + "
    scheduled.");

    Confer also:
    http://forum.java.sun.com/thread.jsp?forum=37&thread=358276

  • Query on Linux 'top' command in Linux for oracle user

    This is the output of 'top' command in one of my linux server hosting One Oracle instance with 600MB SGA and 400MB PGA. One one instance is up in this server.
    top - 14:36:37 up 4:26, 3 users, load average: 0.05, 0.11, 0.28
    Tasks: 124 total, 1 running, 123 sleeping, 0 stopped, 0 zombie
    Cpu(s): 0.2% us, 0.1% sy, 0.0% ni, 66.6% id, 33.1% wa, 0.0% hi, 0.0% si
    Mem: 12299332k total, *2569836k* used, 9729496k free, 61288k buffers
    Swap: 20972816k total, 0k used, 20972816k free, 2274852k cached
    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    6345 oracle 16 0 37132 1752 1172 S 0.0 0.0 0:00.08 sshd
    6346 oracle 16 0 54004 1536 1208 S 0.0 0.0 0:00.02 bash
    6423 oracle 16 0 45376 10m 6228 S 0.0 0.1 0:00.25 tnslsnr
    6471 oracle 16 0 740m 17m 13m S 0.0 0.1 0:00.02 oracle
    6473 oracle 16 0 739m 15m 12m S 0.0 0.1 0:00.01 oracle
    6475 oracle 16 0 739m 32m 29m S 0.0 0.3 0:00.07 oracle
    6477 oracle 16 0 742m 50m 44m S 0.0 0.4 0:00.27 oracle
    6479 oracle 16 0 754m 23m 19m S 0.0 0.2 0:00.43 oracle
    6481 oracle 16 0 739m 24m 20m S 0.0 0.2 0:00.61 oracle
    6483 oracle 16 0 740m 88m 83m S 0.0 0.7 0:00.71 oracle
    6485 oracle 16 0 739m 22m 19m S 0.0 0.2 0:00.01 oracle
    6487 oracle 16 0 740m 30m 25m S 0.0 0.3 0:00.15 oracle
    6489 oracle 16 0 741m 55m 48m S 0.0 0.5 0:00.29 oracle
    6491 oracle 16 0 739m 24m 20m S 0.0 0.2 0:00.01 oracle
    6493 oracle 16 0 739m 15m 11m S 0.0 0.1 0:00.01 oracle
    6495 oracle 16 0 739m 14m 11m S 0.0 0.1 0:00.00 oracle
    6622 oracle 16 0 739m 16m 13m S 0.0 0.1 0:00.00 oracle
    6626 oracle 16 0 740m 79m 74m S 0.0 0.7 0:01.95 oracle
    6636 oracle 16 0 740m 28m 23m S 0.0 0.2 0:00.06 oracle
    6638 oracle 16 0 739m 16m 12m S 0.0 0.1 0:00.01 oracle
    6846 oracle 16 0 739m 19m 16m S 0.0 0.2 0:00.02 oracle
    6848 oracle 16 0 739m 24m 21m S 0.0 0.2 0:00.04 oracle
    6850 oracle 16 0 739m 19m 16m S 0.0 0.2 0:00.02 oracle
    6852 oracle 16 0 739m 19m 16m S 0.0 0.2 0:00.01 oracle
    6854 oracle 16 0 739m 30m 26m S 0.0 0.3 0:00.12 oracle
    6856 oracle 15 0 739m 28m 24m S 0.0 0.2 0:00.18 oracle
    6858 oracle 15 0 740m 40m 35m S 0.0 0.3 0:06.39 oracle
    6862 oracle 16 0 739m 32m 28m S 0.0 0.3 0:02.25 oracle
    6864 oracle 16 0 739m 19m 16m S 0.0 0.2 0:00.02 oracle
    6866 oracle 16 0 739m 19m 16m S 0.0 0.2 0:00.03 oracle
    6868 oracle 16 0 739m 19m 16m S 0.0 0.2 0:00.02 oracle
    7480 oracle 15 0 37264 1668 1092 S 0.0 0.0 0:00.15 sshd
    7481 oracle 15 0 54004 1528 1196 S 0.0 0.0 0:00.05 bash
    10333 oracle 16 0 739m 20m 16m S 0.0 0.2 0:00.00 oracle
    10337 oracle 15 0 6168 1080 768 R 0.0 0.0 0:00.00 top
    Total RAM as seen from top command is 12G.
    *2569836* - Total RAM which is being used currently .
    How can I see the total RAM used by all Oracle Processes running in this server. The server is Linux X86 64 Bit. Can I sum up the values under 'VIRT' column of 'top' command to see the total RAM used ?
    Is there a way to see the total RAM and CPU used by Oracle from top ?
    'VIRT' is the virtual memory - In what way is this related to the figure above, which is the physical memory (RAM) ?
    Thanks in Advance
    SSN
    Edited by: SSNair on Oct 21, 2010 2:39 AM

    Oracle used shared memory to implement the SGA, which constituted the largest memory consumption of the Oracle instance. The problem is that in many modern OS, including linux, it is hard to define the actual memory usage fo a software. This is because the memory used by a process is actually composed of shared (e.g., shared memory, shared library, executable code) and private (e.g., the heap, the stack) components. Utilities like top, ps, etc reports all memory visible by a process, disregarding whether it is shared or not. As a result, the total of VIRT etc will be inflated by the shared components. For a more accurate figure of memory usage, shared memory / library / code should be counted once.
    Before 11g, Oracle used System V ipc, and the amount of memory allocated can be checked using ipcs. In 11g, Oracle switched to /dev/shm, use df to check the memory allocation. (Thanks user11150436)
    The "Mem used" figure in top is the actual usage of the memory: shared memory and library are not multi-counted. However, Linux will always cache (read before actually requested) and buffer (write after signalling completion) disk I/O. Therefore, "Mem used" is almost always very close to the amount of physical memory. "Mem used" - "buffers" - "cached" reflects the memory actually used by the OS and all programs more accuately.
    And you can use the pmap utility to check the memory map. Then you classify the sharable and unsharable memory usage to calculate a more accurate result suiting your need. You need OS knowledge to understand the output.

  • Error ORA-04030: out of process memory when trying to allocate 8512 bytes

    Good Afternoon estimated
    I want to see if anyone has the following problem occurred while there are about 70 concurrent connections to the Oracle instance. if anyone has any solution.
    is grateful for the help in advance:
    Dump file d:\oracle\data\admin\ppmdb\bdump\ppmdb_mmon_5032.trc
    Thu Aug 11 09:23:40 2011
    ORACLE V10.2.0.4.0 - Production vsnsta=0
    vsnsql=14 vsnxtr=3
    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
    With the OLAP, Data Mining and Real Application Testing options
    Windows NT Version V5.2 Service Pack 2
    CPU : 8 - type 586, 1 Physical Cores
    Process Affinity : 0x00000000
    Memory (Avail/Total): Ph:5642M/8181M, Ph+PgF:17775M/20246M, VA:9M/2047M
    Instance name: DBMM
    Redo thread mounted by this instance: 1
    Oracle process number: 11
    Windows thread id: 5032, image: ORACLE.EXE (MMON)
    *** 2011-08-11 09:23:40.429
    *** SERVICE NAME:(SYS$BACKGROUND) 2011-08-11 09:23:40.413
    *** SESSION ID:(161.1) 2011-08-11 09:23:40.413
    *** KEWROCISTMTEXEC - encountered error: (ORA-04030: out of process memory when trying to allocate 8512 bytes (pga heap,kgh stack)
    *** SQLSTR: total-len=267, dump-len=240,
    STR={insert into wrh$_sysmetric_history     (snap_id, dbid, instance_number,      begin_time, end_time, intsize, group_id, metric_id, value)  select      :snap_id, :dbid, :instance_number,      begtime, endtime, intsize_csec,      groupid, metri}
    ===============
    Note: This allows us to continue to connect more users and the only way to make new connections is restarting the instance
    I Have Configurate: pga_aggregate_target integer 379584512
    Total System Global Area 1577058304 bytes
    Fixed Size 1299216 bytes
    Variable Size 729812208 bytes
    Database Buffers 838860800 bytes
    Redo Buffers 7086080 bytes
    Thank you for your possible help
    Claudio T.

    804135 wrote:
    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
    Windows NT Version V5.2 Service Pack 2
    Memory (Avail/Total): Ph:5642M/8181M, Ph+PgF:17775M/20246M, VA:9M/2047M
    I Have Configurate: pga_aggregate_target integer 379584512
    Total System Global Area 1577058304 bytesHave a search on this forum (or google) for the error code, there should be lots of previous discussion on this one.
    From no sign of 64-bit in the product banner plus VA (address space) 2 GB (close enough), it looks like the server is running as 32-bit process.
    With SGA + PGA (target) adding up to nearly 1900 MB, my guess is you are hitting the 2 GB per process limit.
    Lower SGA, it should help in the very short term. For longer term: lower resource demands or start planning for migration to 64-bit.

Maybe you are looking for

  • ITS - Save as a Local File

    In the R/3 window we get a Menu Option System -> List -> Save -> Local File. And the same appear for Transaction iViews (SAP GUI for Windows) In cases of SAP GUI for HTML or for that matter any ITS URL for a transaction, where can we find an option t

  • Bypass xlate table on FWSM

    Is there any way to bypass the xlate table. We have no requirement for NAT on our FWSM however every time a change is made we must clear the xlate table. I have tried using NAT exemption however entries still appear in the xlate table. Any ideas?

  • Convert second to hh:mm

    PLEASE, IS THERE A EASILY METHOD TO CONVERT A 5 DIGIT NUMBER IN SECOND TO THE FORMAT HH:MM (HOUR AND MINUTE) THANKS

  • Programmat​ically set the default of a control

    Hi, I am working on an application where in one part of the program the user can apply a waveform, then in a different subvi is this waveform is applied/not applied the default value of a certain control will be either digital trigger or no trigger. 

  • CS3 - Getting Multiple Error Messages Related to Javascript/Spry/XSLT

    In the last couple of days, I have been getting endless error messages from DW CS3. Messages like: Javascript error while executing onLoad in PageManager. Spry.htm has configuration that is invalid. XSLT.htm has configuration that is invalid. Also, m