Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Android memory leak with java code
Forum Update on Monday, May 27th 2025

Android memory leak with java code

Scheduled Pinned Locked Moved Solved Mobile and Embedded
2 Posts 1 Posters 1.5k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    maddthad
    wrote on 24 Sept 2019, 20:02 last edited by
    #1

    Good day I have java code thats called with a string that returns a string. I based everything on the androidToastJava example I found online. I include here what I believe to be the relevent parts.

    The c++:
    QString get_CA( QString channel_name)
    {
    QAndroidJniObject tstMsg = QAndroidJniObject::fromString(channel_name);

    QAndroidJniObject RcvMsg = QAndroidJniObject::callStaticObjectMethod
    ("com/amin/QtAndroidToastJava/QtAndroidToastJava"
    , "get_CA"
    , "(Ljava/lang/String;)Ljava/lang/String;"
    , tstMsg.object<jstring>());
    return RcvMsg.toString();
    }

    In MainWindow::timerEvent( QTimerEvent *event ){
    ...
    // call the java code that gets altitude data
    altitude_pv = get_CA("altitude");
    altitude = altitude_pv.toFloat();
    qDebug() << "altitude = " << get_CA( "altitude");
    }

    The java, gets a data from an EPICS ioc via channel access:
    public static String get_CA(String pv) {
    // execute
    System.setProperty("CA_DISABLE_REPEATER", "false");
    System.setProperty("jca.use_env", "false");
    System.setProperty("com.cosylab.epics.caj.CAJContext.addr_list", "192.168.36.10");
    //String value = new QtAndroidToastJava().execute(pv);
    String value = thisInstance.execute(pv);
    return ( value );
    }

    Application output I see memory usage constantly going up but it is reading data
    D libqfi_example.so: altitude = "61017.47"
    I art : Background sticky concurrent mark sweep GC freed 18976(962KB) AllocSpace objects, 8(160KB) LOS objects, 11% free, 37MB/42MB, paused 16.653ms total 97.180ms
    D libqfi_example.so: altitude = "61017.47"
    D libqfi_example.so: altitude = "61017.47"
    I art : Background partial concurrent mark sweep GC freed 9173(472KB) AllocSpace objects, 6(120KB) LOS objects, 29% free, 38MB/54MB, paused 13.333ms total 88.519ms
    D libqfi_example.so: altitude = "61017.47"
    D libqfi_example.so: altitude = "61017.47"

    finally:
    I art : Background partial concurrent mark sweep GC freed 23039(1164KB) AllocSpace objects, 8(160KB) LOS objects, 19% free, 64MB/80MB, paused 17.837ms total 163.092ms
    D libqfi_example.so: altitude = "61017.47"
    D libqfi_example.so: altitude = "61017.47"
    W art : Large object allocation failed: ashmem_create_region failed for 'large object space allocation': Too many open files
    I art : Starting a blocking GC Alloc
    I art : Starting a blocking GC Alloc
    I art : Alloc sticky concurrent mark sweep GC freed 63819(3MB) AllocSpace objects, 19(380KB) LOS objects, 15% free, 68MB/80MB, paused 22.973ms total 154.361ms
    W art : Large object allocation failed: ashmem_create_region failed for 'large object space allocation': Too many open files
    W art : Throwing OutOfMemoryError "Failed to allocate a 65563 byte allocation with 16777216 free bytes and 187MB until OOM"
    I art : WaitForGcToComplete blocked for 384.454ms for cause HeapTrim
    E art : ashmem_create_region failed for 'indirect ref table': Too many open files
    W art : Throwing OutOfMemoryError "Could not allocate JNI Env"
    System.err: java.lang.OutOfMemoryError: Could not allocate JNI Env

    Im not sure whats causing this other then the multiple calls to java to get the data.
    What can I do to free up the memory?

    thx
    0

    1 Reply Last reply
    0
    • M Offline
      M Offline
      maddthad
      wrote on 25 Sept 2019, 18:23 last edited by
      #2

      The java code had a memory leak in the code:
      public String execute(String channelName) {
      // String [] value = new String[50];
      double [] pv_data = new double[50];
      try {
      // initialize context
      //initialize();
      Context context = null;
      JCALibrary jca = JCALibrary.getInstance();
      context = jca.createContext(JCALibrary.CHANNEL_ACCESS_JAVA);
      // Create the Channel to connect to the PV.
      Channel channel = context.createChannel(channelName);
      ....
      ....
      ....
      // calling this before returning solved issue
      context.destroy();

      1 Reply Last reply
      0

      1/2

      24 Sept 2019, 20:02

      • Login

      • Login or register to search.
      1 out of 2
      • First post
        1/2
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved