Java 什么是Runtime.getRuntime()totalMemory()和freeMemory()?

简介: Java 什么是Runtime.getRuntime()totalMemory()和freeMemory()?

如何解决Java 什么是Runtime.getRuntime()totalMemory()和freeMemory()??
根据API

totalMemory()
返回Java虚拟机中的内存总量。此方法返回的值可能会随时间变化,具体取决于主机环境。注意,保存任何给定类型的对象所需的内存量可能取决于实现。

maxMemory()
返回Java虚拟机将尝试使用的最大内存量。如果没有固有限制,则将返回Long.MAX_VALUE值。

freeMemory()
返回Java虚拟机中的可用内存量。调用gc方法可能会导致freeMemory返回的值增加。

关于你的问题,maxMemory()返回-Xmx值。

你可能会奇怪为什么有totalMemory()和A maxMemory() 。答案是JVM延迟分配内存。可以这样说启动Java进程:

java -xms64m -Xmx1024m Foo
你的进程以64mb的内存开始,如果需要更多内存(最大1024m),它将分配内存。 totalMemory()对应于JVM for Foo 当前可用的内存量。如果JVM需要更多的内存,它会懒洋洋地分配它达到最大内存。如果你运行-xms1024m -Xmx1024m,你获得的价值totalMemory()和maxMemory()将等于。

另外,如果要准确计算已使用的内存量,请执行以下计算:

final long usedMem = totalMemory() - freeMemory();
名称和值令人困惑。如果你要寻找总的可用内存,则必须自行计算该值。这不是你从中得到的freeMemory();。

请参阅以下指南:

指定的总内存,这将等于配置的-Xmx值:

Runtime.getRuntime()。maxMemory();
当前分配的可用内存是为新对象准备的当前分配空间。警告这不是可用的总可用内存:

Runtime.getRuntime()。freeMemory();
总分配内存,是为Java进程保留的总分配空间:

Runtime.getRuntime()。totalMemory();
已使用的内存,必须计算:

usedMemory = Runtime.getRuntime()。totalMemory()-Runtime.getRuntime()。freeMemory();
总可用内存,必须计算:

freeMemory = Runtime.getRuntime()。maxMemory()-usedMemory;
解决方法
我一直想知道Runtime.getRuntime()。totalMemory(),Runtime.getRuntime()。freeMemory()和Runtime.getRuntime()。maxMemory()的确切含义是什么 。

我的理解是,Runtime.getRuntime().totalMemory()返回我的进程正在使用的总内存。那是对的吗?

如何freeMemory()与maxMemory()?

声明:地推任务网所有作品(图片、文字)均由用户自行上传分享,仅供网友学习交流。

相关文章
|
Kubernetes Linux API
[没接触过kubevirt?]15分钟快速入门kubevirt
什么是kubevirt? kubevirt是一个容器方式运行虚拟机的项目。`kubevirt`是附加`kubernetes`集群上的,它是通过 `CustomResourceDefinition(CRD)`部署到`Kubernetes API`变成资源对象。使用方式类似创建`deploy、pod`......这些资源清单。
5459 0
[没接触过kubevirt?]15分钟快速入门kubevirt
|
NoSQL Java Redis
Spring boot整合Redis实现发布订阅(超详细)
Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收信息。微信,微博,关注系统 Redis客户端可以订阅任意数量的频道
8639 0
Spring boot整合Redis实现发布订阅(超详细)
|
Arthas 运维 监控
定位频繁创建对象导致内存溢出风险的思路
定位频繁创建对象导致内存溢出风险的思路
469 1
|
存储 数据采集 安全
各种系统架构图与详细说明
原文:各种系统架构图与详细说明 共享平台逻辑架构设计 如上图所示为本次共享资源平台逻辑架构图,上图整体展现说明包括以下几个方面: 1 应用系统建设 本次项目的一项重点就是实现原有应用系统的全面升级以及新的应用系统的开发,从而建立行业的全面的应用系统架构群。
26827 1
|
存储 监控 Java
JVMTI 在淘宝 Profiler 中的应用(下)
JVMTI 在淘宝 Profiler 中的应用(下)
501 6
|
机器学习/深度学习 人工智能 数据可视化
何恺明CV课程 | AI大咖说
麻省理工学院(MIT)电气工程与计算机科学系(EECS)副教授何恺明开设了两门精彩课程:“Advance in Computer Vision”和“Deep Generative Models”。何恺明是计算机视觉和深度学习领域的杰出科学家,曾提出深度残差网络(ResNet)等重要成果。这两门课程不仅涵盖了最新的研究前沿,还由何恺明亲自授课,内容涉及卷积神经网络、生成对抗网络、变分自编码器等,是学习计算机视觉和生成模型的宝贵资源。
526 8
|
编解码 前端开发 Android开发
Android经典实战之TextureView原理和高级用法
本文介绍了 `TextureView` 的原理和特点,包括其硬件加速渲染的优势及与其他视图叠加使用的灵活性,并提供了视频播放和自定义绘制的示例代码。通过合理管理生命周期和资源,`TextureView` 可实现高效流畅的图形和视频渲染。
874 12
|
Java 关系型数据库 MySQL
连接池技术:简单而强大的加速数据库访问方法
连接池技术是一种简单而强大的方法,可用于加速数据库访问。在传统的数据库访问过程中,每次与数据库建立连接和关闭连接都需要耗费大量的时间和资源。而连接池技术通过事先建立一组可重复使用的数据库连接,有效地减少了连接和关闭连接的开销。本文将深入探讨连接池技术的工作原理和优势,以及如何正确配置和使用连接池来提高应用程序的性能。无论你是开发人员还是系统管理员,通过了解连接池技术,你将能够更好地利用数据库资源,使系统更加稳定和高效。
1028 0
|
JavaScript 前端开发
js开发:请解释同步和异步编程的区别。
同步编程按顺序执行,易阻塞;异步编程不阻塞,提高效率。同步适合简单操作,异步适合并发场景。示例展示了JavaScript中同步和异步函数的使用。
257 0
|
前端开发 JavaScript 测试技术
探讨前后端分离架构在Web应用开发中的优势与实践
本文将深入探讨前后端分离架构在Web应用开发中的优势与实践。通过明确前后端分离的定义和原理,分析其在提高开发效率、降低耦合性、增强可维护性等方面的优势。同时,为读者提供了一些实践指导,包括如何选择适合的前后端分离框架、如何合理划分前后端职责等,旨在帮助开发者更好地应用这一架构并取得良好的开发效果。