好的,我知道我应该对我的特定应用程序进行基准测试,等等,但是:-Xmx的默认JVM设置、默认垃圾收集器等,对于大多数典型的Java程序来说是合理的默认设置,并且可能不适合惯用的Scala代码(部分因为惯用的Scala会产生更多的“垃圾”)。所以我正在寻找可供选择的建议。典型的Scala程序是否需要更高的-Xmx设置?某些JVM是否比其他JVM更适合scala?与Java通常默认的相比,Scala的不同垃圾收集器(-XX:+UseParallelGCvsXX:+UseConcMarkSweepGC)通常是更安全/更好/更快的猜测/赌注/默认值吗?对于Scala代码,我还应该特别考虑其他选
是否可以在JVM内存之外创建一个持久内存对象,可以在JVM内部作为对象使用,以便在JVM重启后仍然存在?特别的想法是,我们可以在JVM之外分配内存,然后使用JNI接口(interface)来访问该内存并关联一些Java数组。有人尝试过这种黑客行为吗?任何平台依赖都足够了。例如,这有助于在JVM进程重新启动期间执行内存中DB加载的优化。 最佳答案 是的,这是完全可能的,即使没有JNI。这个想法是有一个MappedByteBuffer由tmpfs上的"file"支持文件系统。例如。在Linux上,您可以使用/dev/shm(或/run/
假设金钱不是一个限制因素,我想编写一个在一台强大的机器上运行的Java程序。我们的目标是让Java程序尽可能快地运行,而无需交换或转到磁盘。假设这台电脑有:1TBRAM(64个16GBDIMM)64个处理器内核(8个8核处理器)运行64位Ubuntu在JVM中运行的Java程序的单个实例能否利用这么多RAM和处理器?是否有任何实际考虑可能会限制使用和效率?操作系统进程(内存和线程)限制?JVM内存/堆限制?JVM线程限制?谢谢,盖伦 最佳答案 单个实例可以尝试访问所有内存,但是NUMA区域意味着诸如GC之类的事情在访问另一个区域中的
当jmap进行内存转储时,我的java应用程序是否继续运行? 最佳答案 我在尝试在生产机器上使用jmap创建hprof文件时遇到了问题,这需要很长时间,并且很自然地将javawebapp锁定了很长时间。我找到了这个页面:http://blogs.atlassian.com/2013/03/so-you-want-your-jvms-heap/其中解释了您还可以使用gdb(在linux系统上)转储java进程的核心。使用此核心文件,您可以生成hprof文件以在单独的进程中进行分析,从而防止您的java服务器进程被中断这么长时间。如果您
我正在对一个tomcat服务器进行负载测试。服务器有10G物理内存和2G交换空间。堆大小(xms和xmlx)之前设置为3G,服务器运行良好。由于我仍然看到剩余的可用内存很多且性能不佳,我将堆大小增加到7G并再次运行负载测试。这次我观察到物理内存很快被吃光了,系统开始消耗交换空间。后来tomcat用完swap空间就崩溃了。我在启动tomcat时包含了-XX:+HeapDumpOnOutOfMemoryError,但没有得到任何堆转储。当我检查/var/log/messages时,我看到kernel:Outofmemory:Killprocess2259(java)score634orve
我对高级Java缺乏经验,请多多包涵。我对Java实现可称为“自主”的功能的能力感到好奇。假设我们有两个Java程序正在运行。并且一个程序确定另一个程序正在占用内存,因此会终止该程序和/或为JVM分配更多内存。我知道在Java中你可以看到可用内存是多少(见HowtodoIcheckCPUandMemoryUsageinJava?),但是如果我们想深入挖掘呢?谢谢。 最佳答案 YouAsked:-isitpossibletoincreasetheJVM'savailablememoryand/orkillotherJavaprogra
我有一个应用程序暂时需要一定数量的内存/堆用于某些进程。给定一个合理的JVM最大堆大小值作为选项,JVM从一个小堆开始,并根据需要向操作系统请求更多内存。我的问题是,当我的应用程序不再需要太多内存时,JVM是否会将额外的内存返还给操作系统(例如,用于其他进程)。目前,我的应用程序似乎永远保留了该内存,即使不再需要。 最佳答案 JVM确实将内存返回给操作系统,但只是非常不情愿,因为它可能很快会再次需要它,并且从操作系统获取内存是一项相对昂贵的操作。如果您希望JVM更急切地将内存返回给操作系统,您可以使用tuningparameters
我试图找到对sunjavavm内存段的解释,这也是管理员可以理解的。它应该解释什么是堆/非堆内存以及不同内存池的意义。如果它以某种方式与jconsoleView相关,那将是一个奖励。有没有这样解释的网站? 最佳答案 这是我记下的资源列表。其中一些解释了堆/垃圾收集的工作原理,而另一些则详细介绍了如何配置所有内容。IBMHowdoesgarbagecollectionwork?DetaileddescriptionofgarbagecollectionGenerationalandconcurrentgarbagecollection
当运行启用了native内存跟踪的Java应用程序(在YARN中)时(-XX:NativeMemoryTracking=detail参见https://docs.oracle.com/javase/8/docs/technotes/guides/vm/nmt-8.html和https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr007.html),我可以看到JVM在不同类别中使用了多少内存。我在jdk1.8.0_45上的应用显示:NativeMemoryTracking:Total:res
栈内存溢出在什么情况下发生?虚拟机栈OutOfMemoryError虚拟机栈是每个线程私有的,虚拟机栈中存储的是一个个栈帧,一次方法调用产生一个栈帧,栈帧中含有LV(局部变量表),OS(操作数栈),RA(返回地址)和DL(动态链接)。动态大小的虚拟机栈,虚拟机栈再扩展,虚拟机栈动态扩展所需容量>内存Available容量,抛出OutOfMemoryError动态大小的虚拟机栈,虚拟机栈新创建,创建新的线程时申请创建对应的虚拟机栈容量>内存Available容量,抛出OutOfMemoryError更多详细内容可以查看我的博客[JVM内存与垃圾回收-3-运行时数据区/虚拟机栈]虚拟机栈Stack