0. 内存查看

  • 获取可用内存大小:

    public static long getAvaliableMemory()
    {Runtime runtime = Runtime.getRuntime();return runtime.totalMemory() - runtime.freeMemory();
    }
    
    • totalMemory()这个方法返回的是java虚拟机现在已经从操纵系统那里挖过来的内存大小

      • maxMemory()这个方法返回的是java虚拟机(这个进程)能构从操纵系统那里挖到的最大的内存,以字节为单位,假如在运行java程 序的时 候,没有添加-Xmx参数,那么就是64兆,也就是说maxMemory()返回的大约是6410241024字节
      • -Xmx参数,将以这个参数后面的值为准
    • 在java程序运行的过程的,内存总是慢慢的 从操 作系统那里挖的,基本上是用多少挖多少,但是java虚拟机100%的情况下是会稍微多挖一点的,这些挖过来而又没有用上的内存,实际上就是 freeMemory()

1. jstack:占用最多资源(CPU 内存)的Java代码

https://www.cnblogs.com/chengJAVA/p/5821218.html
https://blog.csdn.net/u012448083/article/details/76855340

jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码(代码行号)。

  • 第一步,先找到 java 进程ID

    • ps -ef | grep java | grep -v grep:

      • grep java 能够搜索到 java -jar xxx.jar
  • 根据进程ID,找到该进程内最耗费CPU的线程:

    • top -Hp pid
  • 将十进制的线程 ID,转换为十六进制的线程 ID

    • printf(’%x\n’, thread_id)
  • 使用 jstack 查看该线程 ID 的堆栈信息:

    • jstack pid | grep thread_id

      • 当然还可以输出更为详尽的信息:jstack pid | grep -A 10 thread_id

2. JVM GC 堆

https://blog.csdn.net/ls5718/article/details/51777195

Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。
在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。
这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。

![这里写图片描述](https://img-blog.csdn.net/2018071518493737?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xhbmNodW5odWk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

  • 堆大小 = 新生代 + 老年代。
  • 堆的大小可以通过参数 –Xms、-Xmx 来指定。
  • JVM 每次只会使用 Eden 和其中的一块 Survivor (from survivor/to survivor)区域来为对象服务,所以无论什么时候,总是有一块 Survivor 区域是空闲着的。因此,新生代实际可用的内存空间为 9/10 ( 即90% )的新生代空间。

JVM 内存管理、自带性能监测调优工具 (jstack、jstat)及 JVM GC 调优相关推荐

  1. 【JVM调优】JVM内存管理调优浅谈

    什么是JVM Java Virtual Machine,Java虚拟机 Java虚拟机有自己完善的硬件架构,如处理器.堆栈等,还具有相应的指令系统. Java虚拟机本质上就是一个程序,当它在命令行上启 ...

  2. JVM内存管理:深入Java内存区域与OOM

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述: 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝 ...

  3. JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法)

    转载自   JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法) 引言 何为终极算法? 其实就是现在的JVM采用的算法,并非真正的终极.说不定若干年以后,还会有新的终极算法, ...

  4. JVM内存管理------垃圾搜集器精解

    转载自   JVM内存管理------垃圾搜集器精解 引言 在上一章我们已经探讨过hotspot上垃圾搜集器的实现,一共有六种实现六种组合.本次LZ与各位一起探讨下这六种搜集器各自的威力以及组合的威力 ...

  5. JVM内存管理--笔记

    文章目录 Java代码是如何运行起来的? JVM内存管理 程序计数器 Java虚拟机栈 局部变量表 变量槽 本地方法栈 Java堆 方法区 运行时常量池 直接内存 Java代码是如何运行起来的? Ja ...

  6. 读懂 JVM 内存管理这篇就够了

    读懂 JVM 内存管理这篇就够了 JVM 的内存结构 程序计数器 作用 概述 PC寄存器的常见问题 虚拟机栈 栈中可能出现的异常 栈的存储单位 栈运行原理 栈帧的内部结构 局部变量表 槽 Slot 操 ...

  7. 「JVM 内存管理」低延迟的 Shenandoah GC 与 ZGC

    同时在内存占用(Footprint),吞吐量(Throughput),延迟(Latency)三方面表现得最优,才能称得上完美的垃圾收集器,但这几乎是不可能的(不可能三角,三元悖论,通常最多可以兼顾两项 ...

  8. 详解JVM内存管理与垃圾回收机制2 - 何为垃圾

    随着编程语言的发展,GC的功能不断增强,性能也不断提高,作为语言背后的无名英雄,GC离我们的工作似乎越来越远.作为Java程序员,对这一点也许会有更深的体会,我们不需要了解太多与GC相关的知识,就能很 ...

  9. JVM内存管理及GC机制

    转载自:http://blog.csdn.net/suifeng3051/article/details/48292193 一.概述 Java GC(Garbage Collection,垃圾收集,垃 ...

  10. 形式参数内存在哪java_深入浅出Java中JVM内存管理

    原标题:深入浅出Java中JVM内存管理 Java岗位面试,JVM是对程序员基本功考察,通常会问你对JVM了解吗?可以分几部分回答这个问题,首先JVM内存划分 | JVM垃圾回收的含义 | 有哪些GC ...

最新文章

  1. javascript函数嵌套时arguments的问题
  2. R语言计算回归模型每个样本(观察、observation、sample)的DFFITS度量实战:忽略单个观察(样本)时,回归模型所做的预测会发生多大的变化
  3. ATT Protocol 属性协议
  4. python jieba 文本相似度_文本相似度分析(基于jieba和gensim)
  5. windows环境中JDK环境变量配置
  6. 【网络覆盖优化】基于matlab的网络覆盖遗传优化问题仿真
  7. 厉害了!小学生用大数据研究苏轼,结论出人意料
  8. 【长安的荔枝】读书摘记
  9. 哈工大深圳计算机实验室介绍,实验室介绍
  10. closest()方法简介
  11. 借力函数计算 FC,HEROZ 打造专业级 AI 日本将棋服务
  12. mui 屏蔽手机物理返回按键(安卓+苹果)
  13. mac latex与texstudio安装
  14. 查看linux版本的几种方法
  15. 手机扫盲集锦(常用术语、小常识、如何鉴别水货手机和行货手机等)
  16. Firebase Crashlytics收集崩溃报告
  17. linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟
  18. 基于Pycharm的Django学习 —— 项目实战(Form和ModelForm)
  19. 热门的四款RK3399系列板卡产品大PK-谁是当家花旦?
  20. uniapp生成小程序码仿商品小程序码跳转到商品详情

热门文章

  1. 走自己的路,记得回头看看
  2. 用C#实现基于TCP协议的网络通讯(1)
  3. 【java学习之路】(java SE篇)012.网络编程
  4. oracle das系统,分布式声波传感系统DAS
  5. HIve内置函数(functions)使用和解析
  6. c语言内循环外循环怎么使用,开高速, 用内循环还是外循环? 教你正确使用内外循环!...
  7. linux系统重启方式,查看linux系统重启的命令和方式
  8. c语言用参数确认递归,C语言程序设计(第4章函数)3
  9. LeetCode50. Pow(x, n)(二进制位运算)
  10. C++编程:输入/输出 I/O