Ich habe eine syntaktisch korrekte Scala-Quelldatei mit einer riesigen Datenstruktur. Der Code sieht wie folgt aus:Scala kann nicht mit riesigen Objekten umgehen?
object ChiSquareAlpha
{
val ChiSquareToAlphaIndexTable = Map(
1 -> Array(0.00016,0.00063,0.00393,0.01579,0.06418,0.14847,0.45494,1.07419,1.64237,2.70554,3.84146,5.41189,6.63490,10.82757),
.. 9998 other entries ..
10000 -> Array(9673.95,9711.71,9768.53,9819.19,9880.79,9925.36,9999.33,10073.68,10118.82,10181.66,10233.75,10292.58,10331.93,10442.73)
)
}
So können Sie sehen, hält das Objekt eine große Lookup-Tabelle, eine Map [Int, Array [Double]] mit 10000 Einträgen. Die Kompilierung dauert ungefähr eine Minute, endet jedoch ohne Warnungen oder Fehler. zur Laufzeit mit aber es funktioniert nicht:
java.lang.ClassFormatError: Invalid this class index 4280 in constant pool in class file bm/statistic/ChiSquareAlpha$
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.scala$tools$nsc$util$ScalaClassLoader$$super$findClass(ScalaClassLoader.scala:88)
at scala.tools.nsc.util.ScalaClassLoader$class.findClass(ScalaClassLoader.scala:44)
at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.findClass(ScalaClassLoader.scala:88)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.scala$tools$nsc$util$ScalaClassLoader$$super$loadClass(ScalaClassLoader.scala:88)
at scala.tools.nsc.util.ScalaClassLoader$class.loadClass(ScalaClassLoader.scala:50)
at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.loadClass(ScalaClassLoader.scala:88)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at bm.statistic.ChiSquareTest.testOfIndependence(ChiSquareTest.scala:323)
at ...
ich dies mit scala getestet 2.9.2 und scala 2.10. Gleiches Ergebnis. Wenn das Objekt viel kleiner ist - sagen wir 500 Karteneinträge - funktioniert das Programm. Also ich denke, Scala ist nicht in der Lage, mit so großen Dateien umzugehen. Irgendwelche Lösungsvorschläge?
Die schnelle Lösung besteht darin, diese Werte aus der Datei zu lesen. –
+1 auf omm-nom-nom's Kommentar. Massendaten * nie * gehört in den Quellcode! –