`
itang
  • 浏览: 70769 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Scala下设置JVM参数简单分析

阅读更多

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)

 

分享到:
评论

相关推荐

    深入JVM内核 - 原理、诊断与优化

    介绍常用的JVM参数,包括内存分配、堆栈分配、虚拟机运行模式以及调试跟踪参数。 第四课 GC的算法和种类 引用计数 标记清除 复制算法 标记压缩 可触及性 本章是理论性较强的一章,主要介绍GC的基本算法和思想,本...

    scala_cli_parser:Scala的基于配置文件的简单CLI解析器

    scala_cli_parser dev : 适用于Scala 2.11 (JVM和 ), 2.12和2.13 。 用于解析命令行参数的库。 它的主要功能是CLI解析是在配置文件上定义的。 例如,考虑一个非常简单的求和程序: import fmv1992 . fmv1992_...

    Scala详细总结(精辟版++).docx

    scala是一门以java虚拟机(JVM)为目标运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言。 scala是纯粹的面向对象的语言。java虽然是面向对象的语言,但是它不是纯粹的,因为java的基本数据...

    实战Java虚拟机——JVM故障诊断与性能优化 pdf

    《实战Java虚拟机——JVM故障诊断与性能优化》内容简介:随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java也俨然成为一个充满活力的生态圈。本书将通过200余示例详细介绍Java虚拟机中的...

    parametric-a-star:A *(A Star)的JVM(Scala Java)实现,在可能的状态和转换中是参数化的

    参数A * A *(A Star)的JVM(Scala / Java)实现,在可能的状态和转换中是参数化的。 标准实现是在2D地图上使用一组固定的导航命令定义的。 相反,此实现是所使用的“映射”结构和“命令”的完全参数化(不知道)。...

    实战JAVA虚拟机++JVM故障诊断与性能优化.pdf

    随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java也俨然成为了一个充满活力的生态圈。《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置...

    实战JAVA虚拟机 JVM故障诊断与性能优化

    随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java也俨然成为一个充满活力的生态圈。本书将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。  本书...

    实战JAVA虚拟机__JVM故障诊断与性能优化.pdf

    随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java...《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。

    节点:GraphQL JVM客户端-Java,Kotlin,Scala等

    GraphQL JVM客户端-Java,Kotlin,Scala等 Nodes是一个GraphQL客户端,旨在根据标准模型定义构造查询。 使该库适合希望以熟悉的方式与GraphQL服务连接的任何JVM应用程序-每个人都可以使用的简单,灵活,兼容,可...

    实战Java虚拟机——JVM故障诊断与性能优化

    《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。, 《实战Java虚拟机——JVM故障诊断与性能优化》共11章。第1~3章介绍了Java...

    rainier:Scala中的贝叶斯推断

    雷尼尔Rainier通过Markov Chain Monte Carlo为贝叶斯推理提供了高性能的Scala API。 Rainier支持具有连续参数的固定结构生成模型。 使用惯用的功能性Scala构建模型,以构成原始分布和数学转换。 建立后,您可以根据...

    DynaML:Scala LibraryREPL用于机器学习研究

    利用JVM和Scala生态系统,使用Apache Spark编写可伸缩的数据分析作业,使用Tensorflow进行深度学习,所有这些都在同一工具箱中。 入门 平台相容性 当前,仅支持* nix和OSX平台。 DynaML与Scala 2.12兼容 安装 ...

    FSharp-JVM-Life:在JVM上运行的F#Conway生活游戏

    演示:JVM上的FSharp 该项目包含用F#编写并在JVM上运行的Conway Life of Life游戏。 有一个.sln文件,用于编辑和构建F#项目。... 唯一棘手的情况是通过Javascript将无参数的Scala回调传递给F#。 在调试器中运

    新手如何在VS code中给main方法传入参数

    Java是全球排名第一的编程语言,Java工程师也是市场需求...大数据平台,主要有Hadoop、Spark、Flink等,他们都是Java或Scala(一种运行于JVM的编程语言)开发的; Android移动平台。这意味着Java拥有最广泛的就业市场。

    java8看不到源码-xerial:Scala的数据管理实用程序

    java8 看不到源码Xerial 项目 Xerial 是 Scala 的数据管理实用程序。 Xerial ...参数配置(例如,-Dloglevel=debug) 使用 Timer 特性进行更好的基准测试 扩展xerial.core.util.Timer trait,然后用tim

    实战JAVA虚拟机

    随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java也俨然成为了一个充满活力的生态圈。《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置...

    实战java虚拟机

    随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java也俨然成为了一个充满活力的生态圈。《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置...

    jdk-8u181-windows-x64.zip

    jdk1.8新特性,例如:Lambda表达式(也称为闭包)是整个Java 8发行版中最受期待的在Java...在JVM平台上的很多语言(Groovy,Scala,……)从一开始就有Lambda,但是Java程序员不得不使用毫无新意的匿名类来代替lambda。

Global site tag (gtag.js) - Google Analytics