首页 > Java > java教程 > Java 和内存消失之谜!

Java 和内存消失之谜!

Susan Sarandon
发布: 2024-11-04 10:56:02
原创
755 人浏览过

在Java Land这片神奇的土地上,住着一个小机器人,名叫JVM-bot。 JVM 机器人有一项非常重要的工作:跟踪内存!问题是,Java Land 中的内存就像一个大饼干罐,每个人都想分一杯羹!因此,JVM-bot 必须确保每个人都有足够的资源。

神奇的指标:totalMemory、freeMemory 和 maxMemory!

JVM-bot 有三个特殊指标 - 监控所有内存的工具:

Java и Тайна Исчезающей Памяти!

totalMemory - 该指示器显示 JVM-bot 已拥有多少 cookie(或内存)。该方法显示了 JVM 当前分配的内存量,这对于了解当前负载很有用。本质上,totalMemory 是我们口袋里已有的内存“预算”。
freeMemory - 这个告诉他他的罐子里还剩下多少饼干(在他已有的记忆中)。此方法显示totalMemory 中仍可使用的内存量。例如,如果 TotalMemory 为 500 MB,freeMemory 为 200 MB,则意味着已占用 300 MB。这个方法可以帮助我们了解现在有多少可用内存,以及我们何时应该考虑优化。
maxMemory - 这是所有指标中最大的!它显示了 JVM-bot 可以拥有的最大 cookie 数量。如果已满,则无法添加更多 cookie!例如,如果您将最大值设置为 1024 MB,这就是上限,一旦达到该上限,JVM 将开始使用虚拟 cookie(内存),这将显着降低性能。
以下代码示例展示了 JVM-bot 如何使用这些指标:

public class MemoryExample {
    public static void main(String[] args) {
        Runtime runtime = Runtime.getRuntime();

        // Получаем текущую память
        long totalMemory = runtime.totalMemory(); // Общее количество памяти
        long freeMemory = runtime.freeMemory();   // Свободная память
        long maxMemory = runtime.maxMemory();     // Максимально доступная память

        System.out.println("Общая память: " + totalMemory + " байт");
        System.out.println("Свободная память: " + freeMemory + " байт");
        System.out.println("Максимальная память: " + maxMemory + " байт");
    }
}

登录后复制
登录后复制
登录后复制

JVM-bot 喜欢将自己视为 cookie(内存)守护者,使用其指示器来关注留下的宝贵的碎屑。

条目:顽皮的算法小魔怪!

一个阳光明媚的日子,JVM-bot 正在专注于自己的业务,监控其指标,突然……砰!一群敏捷的小算法小魔怪出现了!这些小妖精和 JVM 机器人一样喜欢饼干,而且它们很饿!

他们开始吞噬 JVM 机器人饼干,到处咬一口。当小精灵吃掉饼干时,JVM-bot 的空闲内存指标开始迅速下降!

Java и Тайна Исчезающей Памяти!

“哦不!” JVM-bot 揉着他的机器人头喊道。 “如果这些小魔怪吃了太多饼干,爪哇岛的其他地方就没有足够的了!”

测量小精灵的食欲

JVM-bot 有一个绝妙的主意!他用记忆表来查看小妖怪吃了多少饼干。

JVM 机器人首先查看 freeMemory,以检查在小精灵开始享用它之前它还剩下多少 cookie。

long initialFreeMemory = runtime.freeMemory();
System.out.println("Свободная память перед едой гремлинов: " + initialFreeMemory + " байт");

登录后复制

然后他说:“好吧,小魔怪,让我们看看你能做什么!”让它们自由奔跑,咬掉饼干。

小精灵吃完饭后,JVM-bot 再次检查空闲内存:

long remainingFreeMemory = runtime.freeMemory();
System.out.println("Свободная память после еды гремлинов: " + remainingFreeMemory + " байт");

登录后复制

最后,JVM-bot 进行计算以找出丢失了多少 cookie。那是被小魔怪吞噬的记忆!

long consumedMemory = initialFreeMemory - remainingFreeMemory;
System.out.println("Съеденная память: " + consumedMemory + " байт");

登录后复制

超级内存指示器 JVM-bot!

为了跟踪一切,JVM-bot 为自己构建了一个内存指示器!它看起来像一个带有彩色部分的饼干罐:

绿色代表已经吃完的饼干(内存已用)。
蓝色代表罐子里仍然安全的饼干(免费内存)。
灰色表示可能永远不会烘烤的饼干(最大内存)。
这样,JVM 机器人就可以密切关注一切,并判断何时需要烘烤更多饼干!

大红色按钮“GC” - JVM-bot 的秘密武器!

Java и Тайна Исчезающей Памяти!
最后,JVM-bot 有一个红色的大按钮,上面写着 GC(当然是垃圾收集的缩写!)。这是他的紧急饼干剥皮工具。如果事情失控并且小精灵到处留下面包屑,JVM 机器人就会按下那个按钮并发出尖叫声! - 所有碎屑都消失了,JVM 机器人再次拥有干净、新鲜的内存。

调用垃圾收集器的示例代码:

public class MemoryExample {
    public static void main(String[] args) {
        Runtime runtime = Runtime.getRuntime();

        // Получаем текущую память
        long totalMemory = runtime.totalMemory(); // Общее количество памяти
        long freeMemory = runtime.freeMemory();   // Свободная память
        long maxMemory = runtime.maxMemory();     // Максимально доступная память

        System.out.println("Общая память: " + totalMemory + " байт");
        System.out.println("Свободная память: " + freeMemory + " байт");
        System.out.println("Максимальная память: " + maxMemory + " байт");
    }
}

登录后复制
登录后复制
登录后复制

来自 JVM-bot 的提示:如何控制内存小精灵!

为了保证内存安全,JVM-bot 有一些技巧:

  • 测量前按 GC 按钮以避免产生任何额外的碎屑。测量前清除碎片有助于获得更准确的结果。当然,这并不总是必要的,但它对于测量精度很有用。

  • 不要测量得太频繁! JVM-bot 仅在确实必要时才进行测量(避免循环测量),否则其指标可能会磨损。通过运行时过于频繁地访问内存可能会造成小的延迟。相反,在算法的开始和结束时进行单次测量。

  • 使用兆字节 (MB) 等友好单位,以便每个人都能理解。

如何衡量算法的内存消耗?

Java и Тайна Исчезающей Памяти!
为了测量一段特定的代码(例如算法)占用了多少内存,我们需要一个小技巧:

我们在执行代码之前测量初始内存。
我们执行我们的算法。
我们在执行后测量内存。
我们发现测量之间的差异。
下面的代码示例将演示如何做到这一点:

public class MemoryExample {
    public static void main(String[] args) {
        Runtime runtime = Runtime.getRuntime();

        // Получаем текущую память
        long totalMemory = runtime.totalMemory(); // Общее количество памяти
        long freeMemory = runtime.freeMemory();   // Свободная память
        long maxMemory = runtime.maxMemory();     // Максимально доступная память

        System.out.println("Общая память: " + totalMemory + " байт");
        System.out.println("Свободная память: " + freeMemory + " байт");
        System.out.println("Максимальная память: " + maxMemory + " байт");
    }
}

登录后复制
登录后复制
登录后复制

因此,JVM-bot 成为了 Java 王国的英雄,为每个人保护 cookie(或内存),无论有多少小妖精试图吃掉它。请记住:有了 JVM-bot 及其内存指示器,Java 土地上的每个人总会有足够的 cookie! ?

以上是Java 和内存消失之谜!的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板