当前位置: 首页 > 面试题库 >

在运行时获取对JVM可用的内存

巢睿
2023-03-14
问题内容

我正在尝试对一堆数据进行排序,以使输入到程序的数据大小可以大于JVM可用的内存,并且处理所需的外部排序要比Quicksort慢得多。

有什么方法可以在运行时获取可供JVM使用的内存,以便我可以在尽可能多的地方使用排序,并且仅在数据输入太大时才切换到Mergesort吗?


问题答案:

java.lang.Runtime类中查看以下方法:

freeMemory

totalMemory

maxMemory

Runtime rt = Runtime.getRuntime();
System.err.println(String.format("Free: %d bytes, Total: %d bytes, Max: %d bytes",
  rt.freeMemory(), rt.totalMemory(), rt.maxMemory()));

还要注意,如果总内存已用完,则始终可以使用-XmxJVM参数分配更多的堆来启动JVM。例如

java -Xmx256M MyClass


 类似资料:
  • 问题内容: 有没有办法获取正在运行的JVM的参数?是否有像jstat这样的命令行工具将JVM的pid作为输入并返回其启动参数?我对启动JVM时给出的-Xmx和- Xms值特别感兴趣。谢谢。 编辑 :澄清我的约束。我们要检查的JVM正在生产服务器上运行。因此,我们更喜欢最小的干扰。我们能够使用jstat监视JVM,因此我们希望有一个类似的简单解决方案来访问参数。 编辑 :我们还尝试使用jvisual

  • 是否可以在运行时使用TypeScript获取对象的类/类型名称?

  • 问题内容: 我为Clojure添加了耐用性,最后我可以添加函数了。在Clojure中,使用调用方法(以及其他方法)将字节字节编译为类。这样,功能就是一流的。为了使这些持久化,我需要序列化和反序列化这些类。如何在不访问.class文件的情况下获取类的字节码? 如果我弄错了,请纠正我,但是使用代理程序需要产生一个单独的VM,并且该代理程序连接到第一个VM。我需要从同一台VM执行此操作。 仅使用Seri

  • 问题内容: 可以说我在代码中的某个位置有一个按钮:“ JButton closeButton”。我不知道它叫“ closeButton”,但这是我想找出的。 在运行时,该按钮将被单击,一旦完成,我就可以通过反射和AWT api找到很多关于它的信息-但是我不能做的就是找出它的位置- 在代码中如何调用它,名字叫什么它声明为(“ closeButton”)。 是否可以从JVM中找到它? 有没有一种方法可

  • 本文向大家介绍详解JVM 运行时内存使用情况监控,包括了详解JVM 运行时内存使用情况监控的使用技巧和注意事项,需要的朋友参考一下 java 语言, 开发者不能直接控制程序运行内存, 对象的创建都是由类加载器一步步解析, 执行与生成与内存区域中的; 并且jvm有自己的垃圾回收器对内存区域管理, 回收; 但是我们已经可以通过一些工具来在程序运行时查看对应的jvm内存使用情况, 帮助更好的分析与优化我

  • 问题内容: 有什么好的方法可以在运行时将剩余的内存提供给JVM?这种情况的用例是使Web服务在接近内存限制时通过拒绝一个新的错误消息“太多的人使用此,请稍后再试”,而不是因OutOfMemory错误而突然死亡而接近失败,从而正常失败。 注意,这与事先计算/估算每个对象的成本无关。原则上,我可以根据该估算值估算对象占用并拒绝新连接的内存量,但这似乎有点hacky /脆弱。 问题答案: 这是该主题给出