我有一个Java应用程序,该应用程序部署在两台计算机上,并根据指标(包括JMC)判断它们都几乎耗尽了内存,并且持续了很长时间.但是,这些应用程序可以正常运行,并且不会发生OutOfMemory错误.

这很混乱.您能解释为什么应用仍然没有OutOfMemory错误运行吗?为什么在内存接近极限之前没有释放内存?

PS这里是堆指标

解决方法:

这就是Java的内存管理的工作方式-基本上将垃圾回收延迟到必要时才开始,以希望应用程序在需要GC之前退出.

因此,它通常会选择从OS分配更多的内存,直到达到-Xmx或OS /总RAM限制所给定的限制为止,然后它才会执行主要的垃圾收集器运行.这些运行将释放一些内存,然后应用程序将运行更多时间,直到再次遇到限制.

如果应用程序逐渐需要更多的内存,则在达到内存限制后会发生的情况是,主要GC运行会越来越频繁(随着所需内存的增加,GC清除的内存减少),并且GC运行时间会更长.在某个时候,虚拟机可能开始在GC上花费的时间比在运行应用程序时花费更多.

这样,Java进程可能会运行很长时间(可能是“永远”)并消耗几乎所有可用的内存,而实际的应用程序却几乎没有实际的运行时间,因为几乎所有的CPU时间都花在GC中. Java可能会检测到这种情况并抛出java.lang.OutOfMemoryError消息GC超额限制已超过,但并非总是如此.

如果要诊断您的应用程序是在优化内存使用,还是实际上实质上是内存不足,则需要找出VM在GC中花费的时间以及趋势.一些可能的方式:

>与JConsole或VisualVM(均为JDK的一部分)连接,并检查GC运行(时间间隔和持续时间)

>如果您的Java应用程序是单线程的,一种更简单的方法是观察CPU负载-默认GC是多线程的,因此在GC运行期间,它通常将在更多处理器/内核上运行,并且CPU负载将超过100%一个单核(unix顶部为100%以上),而单线程应用程序最多只能导致单个核的100%负载.

标签:performance,java

来源: https://codeday.me/bug/20191108/2009391.html

java代码耗尽内存_为什么运行Java应用程序的计算机几乎耗尽了物理内存,但仍然可以运行数周...相关推荐

  1. java 堆外内存_详解Java堆外内存

    临近春节,最近有点时间,准备顺着上篇专栏的思路写下去,建议先阅读: juejin.im/post/684490- 武汉那几个吃野味的傻[],请藏好你们的妈 正文开始 在运行Java程序时,java虚拟 ...

  2. 查看java进程占用内存_如何查看java进程大批占用内存

    如何查看java进程大量占用内存 你好,方法如下: 可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令: ...

  3. java: 代码过长_给初学Java,知道这4点太重要了!

    本文转自:Java教学与小提琴耿祥义 好的开端是成功的一半,这个不算建议. 建议多了可能失去意义,所以只给以下4点.仅仅是建议不是法律规定.软件基本原则只有一个,满足用户的需求. 1. 职业道德 清晰 ...

  4. java 内存管理_高性能Java代码之内存管理

    本文通过几个方面,来介绍Java代码的内存管理. 有的代码,GC根本就回收不了,直接系统挂掉.GC是一段程序,不是智能,他只回收他认为的垃圾,而不是回收你认为的垃圾. GC垃圾回收: Grabage ...

  5. Java自己文章只能自己修改_文章目录Java代码俯身指南,主要为Java开发人员提供代码复审参考,快捷有效提出修改意见。目的发现代码错误:一个人写的代码可能会有一些思想和设计盲点,多个人尽...

    文章目录 Java代码俯身指南,主要为Java开发人员提供代码复审参考,快捷有效提出修改意见. 目的发现代码错误:一个人写的代码可能会有一些思想和设计盲点,多个人尽早的发现BUG. 统一代码风格:统一 ...

  6. java代码重构工具_代码重构什么意思 Java代码重构的几种模式

    指对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果. 软件重构需要借助工具完成,重构工具能够修改代码同时修改所有引用该代码的地方.在极限编程的方法学中,重构需要单元测试来支持. 在软件工程 ...

  7. java代码耗尽内存_有关Java内存溢出及内存消耗的小知识

    内存溢出原理: 我们知道,Java程序本身是不能直接在计算机上运行的,它需要依赖于硬件基础之上的操作系统和JVM(Java虚拟机). Java程序启动时JVM都会分配一个初始内存和最大内存给这个应用程 ...

  8. 怎么把虚拟机清空内存_深入理解java虚拟机1——内存管理机制与回收机制

    文中涉及JVM底层知识大多来自<深入理解Java虚拟机>第2版,内容枯燥乏味,如果看,认真看.跟着撸一遍也可以受益良多. 1.JVM:是运行在操作系统之上的,它与硬件没有直接的交互. 运行 ...

  9. java线程工作原型_深度解析Java内存的原型及工作原理

    本文主要通过分析Java内存分配的栈.堆以以及常量池详细的讲解了其的工作原理. 一.java虚拟机内存原型 寄存器:我们在程序中无法控制栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是 ...

  10. java 增加内存_如何增加java虚拟机可以使用的最大内存

    java虚拟机可使用的最大内存是有限制的,缺省值通常为64MB或128MB. 如果一个应用程序为了提高性能而把数据加载内存中而占用较大的内存,比如超过了默认的最大值128MB,需要加大java虚拟机可 ...

最新文章

  1. 600分钟搞定Python入门到实战
  2. 流水线经典讲解!!!!!
  3. Hbase0.98的环境搭建
  4. 牛客挑战赛47 C 条件(Floyd bitset优化)
  5. 71 include动作
  6. 深度思考 Spring Cloud + Alibaba Sentinel 源码原理
  7. JAVA对字符串进行32位MD5加密
  8. R语言ggplot2绘图
  9. 把音频中的某个人声去掉_如何把音乐文件里的人声去掉只保留伴奏
  10. 拼多多和酷家乐面试经历总结(已拿offer)
  11. 前端之jquery基础
  12. 外地驾照迁入北京流程
  13. 报错:Warning: To load an ES module, set “type“: “module“ in the package.json or use the .mjs extension
  14. [shell] sed 插入多行文本
  15. 《塞尔达传说》与氛围游戏的兴起:在游戏中感受禅意
  16. 人脑与计算机之间有什么联系,再谈人脑与电脑的关系
  17. 当Sklearn遇上Plotly,机器学习变得如此简单、易于理解
  18. 广东全球通下月单向收费并取消长途费
  19. MATLAB实现TCP/IP通信
  20. 在线网页视频播放器(flash flv播放器)

热门文章

  1. UDP通信多发多收(案例)和广播组播
  2. 【STM32Cube】学习笔记(二):超声波传感器
  3. 通过证书管理解决无法连接 Citrix XenApp SSL 61 您还未选择信任证书颁发者的问题
  4. 景联文科技—专业数据采集公司和智能数据管理执行一体化平台
  5. 智能门锁-手机应用相机国产、非国产统计参数对比分析
  6. 邓应海:下周黄金走势分析,警惕直接跳高
  7. 10 Things No One Can Steal From You
  8. imagenet/ILSVRC2012数据集百度云及其具体分类
  9. dw网页设计期末设计一个网页_《网页设计与制作Dreamweaver》期末考试试题
  10. 整数平方和立方对照表