鉴于这两个命令

A:

$ java -Xms10G -Xmx10G myjavacode input.txt

B:

$ java -Xms5G -Xmx5G myjavacode input.txt

我有两个问题:

  1. 由于命令中的一个储备更多的存储器,与其参数,将一个运行速度快于B?
  2. 如何做 -Xmx-Xms 会影响运行过程的输出和我的计划?
有帮助吗?

解决方案

它取决于GC java使用。平行的全球控制系统可能更好地工作,更大的存储设置-我不是专家,虽然。

在一般情况下,如果你有更大的存在较不频繁,它需要GC-ed-有很多的房间垃圾。然而,当涉及到GC GC有工作,对更多的记忆-这又可能减慢。

其他提示

-Xmx 参数,定义的最大存储器大小堆可以达到的JVM。你必须知道你的节目好吧,看看它是如何执行下载荷和设置的这个参数。一个低价值可能会导致 OutOfMemoryExceptions 或者一个非常贫穷的表现,如果程序的堆存是达到最大堆大小。如果你的程序运行在专用服务器可以将此参数设置更高,因为它不会影响其他程序。

-Xms 参数设置初始堆存的大小JVM。这意味着当你开始你的节目JVM将分配这种量的存储器。这是有用的,如果你的计划将消耗大量的堆存的权利从一开始。这样可以避免的JVM要不断增加堆和可以获得一些性能。如果你不知道如果这种参数,是要帮助你 不要使用它.

总之,这是一种妥协,你必须决定是基于只有在存储器行为的程序。

我们发现,在某些情况下过多的存储器可以减缓的程序下来。

例如,我有一个基于休眠转换发动机开始运行速度缓慢作负荷增加。原来,每次我们有了一个对象从数据库,休眠物存储器检查的对象,将永远不会被再次使用。

解决的办法是驱逐旧的物体从本届会议。

斯图尔特

  1. 分配总是取决于你的操作系统。如果你拨过多的存储器,最终可能具有载入的部分为交换,这确实是缓慢的。
  2. 是否你的程序运行速度较慢或更快的速度取决于所引用虚拟机处理和清理。GC没有扫描通过分配的存储器,以发现被遗弃的对象。它知道它的对象和存储量的分配的基准图。所以扫只的大小取决于你的对象。如果你的计划有相同的行为在这两种情况下,只能影响应该是在虚拟机启动,当VM尝试分配存提供操作系统和如果使用互换(而这又导致1.)

这是很难说是如何的记忆分配将会影响你的速度。它取决于垃圾回收算法JVM使用。例如,如果你的垃圾收集需要停下来做一个完整的集合,然后如果你有10多个内存比你真正需要的然后收集器,将有10多个垃圾清理。

如果您使用的是java6您可以使用jconsole(在bin directory的java)附于你的过程,看如何收集器的行为。在一般收藏家都非常聪明,你不需要做任何调整,但是如果你有一个需要有许多选择你已经使用,以进一步调集过程。

> C:\java -X

-Xmixed           mixed mode execution (default)
-Xint             interpreted mode execution only
-Xbootclasspath:<directories and zip/jar files separated by ;>
                  set search path for bootstrap classes and resources
-Xbootclasspath/a:<directories and zip/jar files separated by ;>
                  append to end of bootstrap class path
-Xbootclasspath/p:<directories and zip/jar files separated by ;>
                  prepend in front of bootstrap class path
-Xnoclassgc       disable class garbage collection
-Xincgc           enable incremental garbage collection
-Xloggc:<file>    log GC status to a file with time stamps
-Xbatch           disable background compilation
-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size
-Xprof            output cpu profiling data
-Xfuture          enable strictest checks, anticipating future default
-Xrs              reduce use of OS signals by Java/VM (see documentation)
-Xcheck:jni       perform additional checks for JNI functions
-Xshare:off       do not attempt to use shared class data
-Xshare:auto      use shared class data if possible (default)
-Xshare:on        require using shared class data, otherwise fail.

-X 选择是非标准和主题改变而不另行通知。

(制)

这总是个问题我有时我的工作我的一个应用创造了大量的线每请求。

因此,这是一个很好的问题有两个方面:
1.是否我的Xms和X的值应是相同的
-大多数网站,甚至oracle文件表明,它是一样的。然而,我建议要有10%至20%的缓冲器之间的这些价值观得到堆调整选项您应用程序的情况下突然高的交通高峰或附带的记忆丢失。

2.我是否应该开始我的应用程序与下堆尺寸
-所以这里的东西-无论什么GC Algo使用(即使G1)、大堆总是有一些交易。我们的目标是确定应用程序的行为是什么堆尺寸您可以让你的GC暂停方面的延迟以及吞吐量。
例如,如果应用程序具有很多线(每个线程有1MB堆在地存储器而不是在堆),但并不占据重对象的空间,那么我建议具有一个低价值的Xms.
-如果应用程序创造了大量的对象与越来越多的线,然后确定以什么价值Xms你可以设定为容忍那些STW暂停。这意味着标识的最大的响应时间的你的进来的请求你可以忍受和根据调整的最低堆大小。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top