Calling an overloaded Java method from Jython

I see a strange behavior that I don’t understand when I call the overloaded Java method from the Jython script.

Here is my Java class:

public class TestClass {
  public static float[][][] overloaded(float[][][] x) {
    return x;
  }
  public static float[][][][] overloaded(float[][][][] x) {
    return x;
  }
  public static float[][][] zeros(int n1, int n2, int n3) {
    return new float[n3][n2][n1];
  }
}

and here is my Jython script:

import time,TestClass
n1,n2,n3 = 250,250,250
z = TestClass.zeros(n1,n2,n3)
start = time.time()
TestClass.overloaded([z,z,z])
print 'time =',(time.time()-start)

This Jython script takes about 1 minute, but if I comment on the first method in TestClass, there will be almost no time for the script. I am confused why this takes much longer when the method is overloaded. Did I miss something?

+5
source share
1 answer

Your code !!

import time,TestClass
n1,n2,n3 = 250,250,250
z = TestClass.zeros(n1,n2,n3)
start = time.time()
TestClass.overloaded([z,z,z])
print 'time =',(time.time()-start)

Facts!!

  • Jython is Java based (well, we already know that!)
  • n1,n2,n3 = 250,250,250 z = TestClass.zeros(n1,n2,n3), 250x250x250x32 bytes, 500000000 bytes 477 megabytes. 32 - float Java.
  • TestClass.overloaded([z,z,z]), 4- ! , !!

!!

TestClass.overloaded([z,z,z]) x = TestClass.overloaded([z,z,z]). . 'x' it still fails!! ?!

""!!

, TestClass.overloaded([z,z,z]) 'x', python , , jython , . . :

java.lang.OutOfMemoryError: Java heap space
        at java.util.Arrays.copyOfRange(Arrays.java:3209)
        at java.lang.String.<init>(String.java:215)
        at java.lang.StringBuilder.toString(StringBuilder.java:430)
        at org.python.core.PyList.list_toString(PyList.java:472)
        at org.python.core.PyList.toString(PyList.java:450)
        at org.python.core.PyArray.toString(PyArray.java:395)
        at org.python.core.PyObject.__repr__(PyObject.java:174)
        at org.python.core.PyList.list_toString(PyList.java:464)
        at org.python.core.PyList.toString(PyList.java:450)
        at org.python.core.PyArray.toString(PyArray.java:395)
        at org.python.core.PyObject.__repr__(PyObject.java:174)

.. JVM !!!! ... JVM , 478 MB !! ( 478 MB 'z', 478 MB!!!), , , , JVM StringBuilder !!

, .

!

>>> n1,n2,n3 = 2,2,2
>>> z = TestClass.zeros(n1,n2,n3)
>>> x = TestClass.overloaded([z,z,z])
>>> x

Output:

array([[[F, [array([[F, [array([F, [array('f', [0.0, 0.0]), array('f', [0.0, 0.0
])]), array([F, [array('f', [0.0, 0.0]), array('f', [0.0, 0.0])])]), array([[F,
[array([F, [array('f', [0.0, 0.0]), array('f', [0.0, 0.0])]), array([F, [array('
f', [0.0, 0.0]), array('f', [0.0, 0.0])])]), array([[F, [array([F, [array('f', [
0.0, 0.0]), array('f', [0.0, 0.0])]), array([F, [array('f', [0.0, 0.0]), array('
f', [0.0, 0.0])])])])

. , 2x2x2x32 bytes !! , , 2's 20's.

, !!!

, jython [z,z,z], . . , , , . , , , . , , . , , x = TestClass.overloaded([z,z,z]), , 'x' Heap Exception!!

!

+3

All Articles