Scala 启动shell脚本,简化后的scala REPL 启动命令大致如下所示:
java -Xmx256M -Xms32M \
-Xbootclasspath/a:jline.jar:scala-compiler.jar:scala-library.jar:scalap.jar \
-Dscala.usejavacp=true -Dscala.home=/home/itang/dev-env/typesafe-stack \
-Denv.emacs= \
scala.tools.nsc.MainGenericRunner scala.tools.nsc.CompileServer
经过简单分析得出:
1 Scala命令设置JVM参数的规则:
scala对JVM参数设定分两部分:
A 获取环境变量JAVA_OPTS,如果未设定则默认为:-Xmx256M -Xms32M
B Scala命令参数以-D和-J打头的部分
-D像Java一样,用于设定全局变量值
-J打头的后面的部分会提取为JVM参数, 如:
scala -J-Xmx512m -J-server 相当于java -Xms512 -server
2 JVM 重复的参数设定后声明的会覆盖之前的:
如:
$ export JAVA_OPTS="-Xmx256M -Xms32M"
$ scala -J-Xmx512M
此时,最大堆内存大小为512M
有时默认的Scala设置不满足要求, 如在Scala REPL里测试大量数据:
val large = (1 to (1000 * 10000)).toList
会抛出java.lang.OutOfMemoryError: Java heap space
这时我们要增大堆内存设置, 可以通过添加或修改JAVA_OPTS环境变量或在命令行通过-J-Xmx设置大点的值
如 scala -J-Xmx512m
在这我们可以做个“无聊的”实验看scala REPL启动所需最小的JVM 堆内存值
$ scala -J-Xmx10m
此时提示:
引用
“Error occurred during initialization of VM
Incompatible minimum and maximum heap sizes specified”
出错原因是默认的最小堆size是设置的-Xms32M,最大堆size不应该小于最小堆的size.所以需要同时指定-Xms,以覆盖默认值, 我们100M之内用二分法逐一尝试(也可以写个自动化脚本来干这事)找这个近似值.
在Scala 2.9 下试过之后,得出Scala光启动所需要的最小堆size是25M左右(scala -J-Xms25m -J-Xmx25m)
分享到:
相关推荐
Scala是一种在Java虚拟机(JVM)上运行的高级编程语言,它巧妙地融合了面向对象和函数式编程的概念。Scala的设计目标是提高代码的可读性、安全性和可伸缩性,同时允许程序员利用多核处理器的优势进行并行处理。 在...
5. **JVM参数调整**:理解JVM启动参数的意义和作用,如-Xms、-Xmx、-XX:+UseConcMarkSweepGC等,是提升系统性能的关键。教程会指导如何根据系统资源和应用需求设置合适的参数。 6. **并发与多线程**:JVM提供了丰富...
介绍常用的JVM参数,包括内存分配、堆栈分配、虚拟机运行模式以及调试跟踪参数。 第四课 GC的算法和种类 引用计数 标记清除 复制算法 标记压缩 可触及性 本章是理论性较强的一章,主要介绍GC的基本算法和思想,本...
标题和描述均提到了对五种编程语言——Scala、Erlang、Groovy、Python以及它们各自的原理、比较和分析。这些语言各自拥有独特的特性和应用场景,在编程领域扮演着不同的角色。下面,我们将深入探讨每种语言的关键...
11. **Dotty/Scala 3**:虽然Scala-2.12.3是当前版本,但Scala社区正在开发下一代Scala,即Scala 3(以前称为Dotty),它旨在简化语法并引入更多现代编程语言的特性。 通过学习和使用Scala SDK,开发者可以利用其...
- 方法定义在Scala中更为简洁,支持默认参数、可变参数、命名参数等多种形式。 ```scala def f(x: Int): Int = x * x def a(x: Int, y: Int): Int = x + y def d(): Unit = println("None") ``` #### 资源...
2. 函数式编程:Scala 也是一个成熟的函数式语言,函数式编程有两个指导思想:函数是头等值,可以被当作参数传递,也可以被当作返回值返回;程序的操作应该把输入值映射为输出值而不是就地修改。 3. 静态类型:Scala...
- **JVM兼容性**:Scala 2.12.x主要针对Java 8及更高版本进行优化,充分利用了JVM的新特性,如Lambda表达式和Stream API。 - **互操作性**:Scala可以直接调用Java库,反之亦然,这得益于良好的Java互操作性。 - ...
Scala提供了简单的I/O操作,支持文件读写、网络通信等功能。 #### Actor和并发 Scala通过`actor`模型提供了高级别的并发支持,`actor`之间通过消息传递来协同工作,这种方式非常适合构建高并发的应用程序。 #### ...
Scala是一种现代编程语言,它结合了面向对象编程(OOP)和函数式编程(FP)的特性,运行在Java虚拟机(JVM)上。其名称“Scalable Language”暗示了它的设计目标是为了适应软件开发中不断变化和增长的需求。Scala的...
《Learning Scala:实践函数式编程》是一本专为JVM平台设计的 Scala 编程语言教程,由 Jason Swartz 撰写。这本书面向的是计算机与编程领域的读者,特别是对Python或Java有经验的程序员。出版年份为2014年,采用PDF...
首先,Scala运行在Java虚拟机(JVM)上,这意味着它可以无缝地与Java库集成,同时也享受到了JVM的高性能和跨平台兼容性。它的语法设计简洁而富有表达力,使得代码更加易读和易维护。 在面向对象编程方面,Scala支持...
9. **Scala与Java互操作**:由于Scala运行在JVM上,它可以无缝地与Java代码交互,调用Java库和API。 10. **案例研究**:书中可能会包含一些实际项目案例,如使用Scala进行Web开发(如Play Framework)、大数据处理...
Scala的Hello World案例演示了如何编写一个简单的Scala程序,并通过反编译工具了解Scala代码在JVM中的执行流程。开发注意事项、安装插件以及查看官方文档也是开发人员需要掌握的知识点。 在编程基础方面,Scala涵盖...
2. 函数式编程:Scala支持函数式编程范式,其中函数被当作一等公民(first-class citizens),意味着可以将函数作为参数传递给其他函数,或者作为函数返回值,所有的函数都是对象。 3. 静态类型:Scala是一种静态...
11. **Scala与Java互操作**:由于Scala运行在JVM上,它可以无缝地与Java代码集成,调用Java库并被Java代码调用。 12. **Scaladoc**:Scala提供了Scaladoc工具,用于生成API文档,类似于Java的Javadoc。 通过阅读...
Scala-2.11.7是该语言的一个特定版本,适用于Java虚拟机(JVM)。这个包是官方发布的,确保了其可靠性和兼容性。 在安装Scala-2.11.7时,首先你需要下载对应的压缩包文件。这个压缩包包含了Scala编译器、运行时环境...
此外,Scala还广泛应用于机器学习、数据分析、云计算等领域。 在开始使用这个版本之前,确保你有一个适合的JDK环境,因为Scala运行在JVM上。然后,将解压后的目录添加到你的系统路径,以便于在命令行中直接调用...
它运行在Java虚拟机(JVM)上,能够无缝地与Java库和框架集成,这使得Scala在大数据处理、Web应用开发以及云计算等领域有广泛应用。 **1. Scala基本语法** Scala的语法简洁而富有表现力,支持变量声明、常量、函数...
函数在Scala中被视为一等公民,可以作为参数传递,也可以作为返回值。 4. **集合库**:Scala的集合库是其的一大亮点,它包含了丰富的数据结构,如List、Set、Map,以及高效的Seq、Buffer和ArrayBuffer。这些集合...