我正在关注这个问题并发现所有信息都已过时.
最新的指南似乎是关于GC调整的文档.在其中,Oracle定义了他们愚蠢的术语人体工程学,我认为这只是合理("舒适")默认值.在该文件中,提到了该文件,该文件在上述SO问题中被大量引用.
它声称最大堆大小计算如下:
较小的物理内存的1/4或1GB.在J2SE 5.0之前,默认的最大堆大小为64MB.您可以使用-Xmx命令行选项覆盖此默认值.
这显然是假的,因为我有一台我测试过的机器有12 GB的RAM和4096 MB,经过验证java -XX:+PrintFlagsFinal -version | grep HeapSize.但需要注意的是:
注意:为堆大小指定的边界和分数对于J2SE 5.0是正确的.随着计算机变得越来越强大,它们在后续版本中可能会有所不同.
哪个好极了!除了我找不到任何关于此的最新文档.我验证了我在运行这个问题的服务器类.为什么这很重要?因为我的12 GB服务器类机器默认为170 MB.一切都打破了.是的,我知道我可以覆盖它.我宁愿不必在我运行的每个应用程序中复制该覆盖,我宁愿不将其硬编码到pom文件中.更重要的是,这个数字在我的机器上以某种方式随机改变,我需要了解它是如何被碰撞的.
这是我的java版本:
$ java -version
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)
Run Code Online (Sandbox Code Playgroud)
我在Mac OS X 10.9.2上.
如果我有一个较小的ram机器和一个较大的ram机器.我在它们上运行相同的java代码.jvm会在更大的ram机器上更懒惰地进行垃圾收集吗?
我试图解决的问题是内存不足问题.人们报告他们在小型ram机器上有内存不足的问题.我想测试一下,但我现在唯一拥有的机器比他们的机器大得多.我想知道我是否在这个更大的ram机器上进行测试并跟踪内存使用情况,在小型ram机器上内存使用量是否相同,或者它将使用更少的内存?
谢谢!厄尔本
java memory garbage-collection memory-management out-of-memory
我有一组日志文件,我想读入RDD.这些日志文件都是压缩的gzip文件,文件名是日期戳.
我一直在sc.wholeTextFiles()阅读文件,似乎我一直在遇到Java堆内存问题.为了隔离问题,我决定在一台机器上针对单个文件运行它作为测试用例.
我从这里获得了这个文件:
http://dumps.wikimedia.org/other/pagecounts-raw/
以下是文件的大小,包括压缩和未压缩版本:
myuser@fembuntu$ ls -ltr pagecounts-20090505-180000*
-rw-rw-r-- 1 myuser myuser 65170192 Sep 20 2009 pagecounts-20090505-180000.gz
-rw-rw-r-- 1 myuser myuser 233007266 Jan 22 00:23 pagecounts-20090505-180000.txt
Run Code Online (Sandbox Code Playgroud)
并且机器上的可用内存如下:
myuser@fembuntu:~$ free -tm
total used free shared buffers cached
Mem: 4856 3018 1838 123 27 407
-/+ buffers/cache: 2583 2273
Swap: 5080 849 4231
Total: 9937 3867 6069
Run Code Online (Sandbox Code Playgroud)
所以我启动了spark-shell,给执行程序2G内存:
$ spark-shell --executor-memory 2G
scala> val pc_loc = "file:///home/myuser/data/pagecounts"
scala> val filename="/pagecounts-20090505-180000.gz"
filename: String = /pagecounts-20090505-180000.gz
Run Code Online (Sandbox Code Playgroud)
在这里,我通过数据读取sc.textFile()并显示前2行:
scala> var …Run Code Online (Sandbox Code Playgroud) 多个来源展示了如何在 app.yaml entryPoint 命令中设置 JVM 参数(例如 -Xmx):
https://cloud.google.com/appengine/docs/standard/java11/building-app/writing-web-service https://github.com/GoogleCloudPlatform/java-docs-samples/blob/master/appengine-java11 /kotlin-ktor/app.yaml
但是,我没有看到任何有关推荐设置或是否需要良好性能的文档。如果我们不指定内存值,会使用什么设置?内存设置是否会随着机器类型的变化而自动调整?
Maven失败,并在日志中出现稀缺的“进程退出,代码137”。
错误的可能原因是什么?解决方法是什么?
我在这里看到了其他问题,例如:默认的最大 Java 堆大小是如何确定的?和理解java堆
我运行命令以查看我的堆大小,java -XX:+PrintFlagsFinal -version并获得 MaxHeapSize 的输出:
uintx MaxHeapSize := 0 {product}
这是什么意思?
如何确定JVM堆大小的默认值?
请注意,在运行我的应用程序之前/期间,我对设置或修改其初始,最小或最大大小不感兴趣.如果我什么都不做的话,我只想知道给定机器上的是什么!
番石榴缓存可以使用的最大优选大小是多少?我的系统有 8 GB RAM,因此在不降低系统和其他应用程序性能的情况下,我可以使用多少 MB?当 RAM 存储不可用时,Guava 缓存是否也使用硬盘存储?
java ×7
heap-size ×2
jvm ×2
memory ×2
apache-spark ×1
caching ×1
guava ×1
heap-memory ×1
java-11 ×1
maven ×1