54

I have a Scala data processing tool which is failing with a java.lang.OutOfMemoryError exception. The tool needs to make a couple passes over a large data file (the one I'm working on is over 700MB), so it would be convenient if the entire thing could be stored in memory.

I run the tool from the command line or from a Bash script using the "scala" runner. How do I increase the JVM heap size for this? I've tried passing -Xmx1024m, but it does not recognize this argument. I'm using a nightly build of Scala 2.8.0 (r18678).

trincot
  • 263,463
  • 30
  • 215
  • 251
Jay Conrod
  • 27,875
  • 16
  • 93
  • 109

5 Answers5

121

You can pass options to the JVM via -J. E.g.,

scala -J-Xmx2g ...
Geoffrey Irving
  • 6,375
  • 4
  • 30
  • 39
26

The JAVA_OPTS environment variable is used to specify the options passed to the java command. See the Scala manpage for details.

Synesso
  • 36,000
  • 33
  • 126
  • 200
22

Based on Joe's suggestion, I looked at the scala program, which is a Bash script that calls java with various Scala specific arguments. It allows extra command line arguments to be passed to Java through the JAVA_OPTS environment variable. So you can increase the heap size like this:

JAVA_OPTS="-Xmx2g" scala classname arguments...
Jay Conrod
  • 27,875
  • 16
  • 93
  • 109
2

Edit JAVA_OPTS.

Daniel C. Sobral
  • 290,652
  • 84
  • 491
  • 673
-1

As a hack you can edit the scala/bin/scala file to edit the parameters for the java command. Not pretty.

Joe
  • 44,558
  • 31
  • 143
  • 235