- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我为自己创建了一个适用于 Windows (Win7 x64) 的 Java 渲染应用程序,它在渲染过程中确实使用了大量内存(在一些大型项目中实际上是演出……我的 PC 中有 8GB RAM 和 6 核 CPU ) 所以我必须在我的 .bat 文件中为它分配 4GB 甚至 8GB 的 RAM 来启动我的 java 应用程序,如下所示:
@ECHO OFF
java -Xmx8G -server -jar myapp %*
@if %errorlevel% neq 0 pause
当渲染过程结束时,它应该从物理内存中卸载所有不再需要的东西,并且根据我的应用程序内计算 ((r.totalMemory() - r.freeMemory())/(1024.0 * 1024) + "MB"
) 它确实做到了(我在渲染线程结束后调用 System.gc() :如果没有它,它不会报告内存使用量下降 - 它大约为 4GB,它报告大约 80MB 的已用内存)。
我的应用程序对 RAM 的使用基本上是这样的:
我什至使用了来自名为 Java VisualVM 的 JAVA bin 文件夹中的内存分析应用程序,以确保一切正常工作,没有任何内存泄漏......根据它的堆转储,它确实是这样工作的:
但我真的很困惑,为什么当我在 Windows 任务管理器中查看内存使用情况的 Windows 图时,内存使用量几乎完全没有下降(可能只有几 MB):它应该下降数百MB,如果不是数千(对于大型项目) - 它仅在我关闭我的应用程序后卸载。我真的等了 5 分钟、10 分钟、15 分钟......在那个图形窗口中仍然没有任何下降!
所以我想知道:我是否需要向我的 .bat 添加一些特定的开关来告诉 JVM“请卸载我的应用程序在渲染期间使用的所有未使用的内存”或者......?
最佳答案
Runtime.totalMemory()
返回 JVM 已从操作系统请求的内存量。在该内存中,“已使用”和“未使用”的概念仅与 Java 应用程序相关,与操作系统无关。所以 Runtime.freeMemory()
告诉您总内存中有多少内存可用于新分配,而这些值之间的差异告诉您有多少内存被 Java 对象占用,或者仍在使用中或尚未收集。
从操作系统的角度来看,totalMemory()
报告的值是应用程序请求的内存量,在简单系统中将被视为“正在使用”。因此,当 JVM 将内存返还给操作系统时,发生频率比垃圾回收低得多或根本不发生,具体取决于配置,totalMemory()
报告的数字将会减少。
不幸的是,像 Windows 这样的操作系统并没有那么简单。它有自己的“已用内存”概念,不同于请求的内存和 Java 的“使用中”概念。内存按页面组织,当应用程序实际写入其中时,Windows 将认为页面仅在使用中,因此它包含需要保留的内容。
此外,到目前为止讨论的所有内容都是“虚拟内存”,它映射到物理内存的方式是另一件复杂的事情。 Windows 将尝试将虚拟内存的页面映射到物理内存中的页面,但其他进程的内存需求可能会减少进程使用的物理内存。这个事实已被恶作剧工具利用, promise 通过简单地请求大量内存来“清理内存”,导致 Windows 重新分配物理内存,然后释放内存,因此使用的物理内存数量看起来非常低,因为它有已从正在运行的进程中取出,但当然,他们稍后会在继续时取回它,因此该操作只会降低性能。
要点是,如果不了解正在运行的应用程序实际需要什么,任务管理器中的图表可能会变得毫无意义。 “分配的(虚拟)内存”、“实际使用的(虚拟)内存”和“当前使用的(物理)内存”之间的关系不能用一个简单的图形来表达。
此外,虚拟机中的垃圾回收完成的主要任务是使虚拟机中的内存可用于同一虚拟机中的新分配,而不是将内存返还给操作系统。后者有时可能会发生,具体取决于配置,但一般不会发生。
关于Java 对 Runtime.memory() 与 Windows 的物理内存使用历史图的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57921646/
我真的很困惑。我已经尝试使用带有 tomcat 的 Jax-rs 并使用所有注释,我能够使用 url 调用我的服务。因此,如果没有 Jax-rs,我可以简单地拥有一个 servlet 并调用我的服务。
是否有任何工具/商业混淆器可以混淆 WPF 控件中的 BAML 资源? 如果没有,就 IP 保护而言,这是一段艰难的时期,因为黑客可以通过使用 BAML 到 XAML 转换器轻松查看 BAML 资源。
嘿大家。我在尝试使用 COBOL 在 zOS 环境中解决的编码项目中遇到了一些麻烦。我需要读入一个文件并将它们放入索引表中(我知道将少于 90 条记录)。 让我感到困扰的是,我们受到项目参数的约束,以
我试图按照这个例子来理解 join() 方法: class PrintDemo { public void printCount() { try { for(int
当我编译我正在编写的代码,然后在 JD Gui 中查看时,方法显示带有如下标题: public void growSurface(Random paramRandom, int paramInt1,
我正在为重新分发准备 Android 库,它的代码必须进行混淆处理。我已经阅读了有关此主题的一些内容,并且决定使用 Android Library Project。它将作为 jar 分发(自动在/bi
两个混淆相关的问题: 1) 是否有任何工具可以将 F# 从 MSIL 目标形式反汇编回其源形式或接近它的形式?这不是通过默默无闻来实现安全性的尝试,但我想保护某些源代码免遭“盗窃”。 2) 我简要地查
谁能向我解释为什么 simulatedCase <- rbinom(100,1,0.5) simDf <- data.frame(CASE = simulatedCase) posterior_m0
我一直无法找到关于使用 AppDomains 时发生的事情的非常清楚的描述,所以希望有人能够启发我。我有一个简单的测试程序(基本上是扯掉了 MSDN example ): using System;
假设我有 2 个分支topic和 master如果我在 topic分支,然后运行 git rebase master它是 rebase master 还是 rebase 主题分支? 做 git r
我有一个类(class): public class LockTest { public void LockThis() { lock (this)
我正在尝试最小化/混淆我的 Angular 代码,但遇到了问题。我在这里阅读“缩小说明”http://docs.angularjs.org/tutorial/step_05但我定义我的 Control
我遇到了一些困惑的操作。 var a = 0.1; var b = 0.2; var c = 0.3; console.log(a); // 0.1 console.log(b); // 0.2 co
感谢您查看我的帖子 - 我正在尝试弄清楚如何在单击链接时关闭此下拉菜单,但我的 JavaScript 技能非常缺乏,而且代码似乎很困惑。这是 HTML:
混淆、哈希和加密之间有什么区别? 这是我的理解: 哈希是一种单向算法;无法逆转 混淆与加密类似,但不需要任何“ secret ”即可理解(ROT13 就是一个例子) 加密是可逆的,但需要“ secre
我有以下代码 my $content = $response->content; $content =~ /username=([\s\S]+?)&/; my $username = $1; prin
我在 .NET 中发现了一些与我预期的有点不同的东西。我粘贴的代码没有意义,但它是我拥有的一个复杂得多的函数的浓缩版。我实际上是在获取匿名类型信息作为参数(尚未创建匿名类型的实例),我需要创建该类型的
我正在努力解决 JavaFX 应用程序的混淆问题。使用此项目作为基础: https://github.com/openjfx/samples/tree/master/IDE/IntelliJ/Non-
是否可以制作一个与此类似的 CSV 阅读器 while((line = reader.readLine()) != null){ String[] values = line.
公共(public)类测试2 { 公共(public)静态无效主(字符串[]参数){ System.out.println("3 + 6"); System.out.println(3
我是一名优秀的程序员,十分优秀!