JVM 内存管理、自带性能监测调优工具 (jstack、jstat)及 JVM GC 调优
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()
- totalMemory()这个方法返回的是java虚拟机现在已经从操纵系统那里挖过来的内存大小
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
- ps -ef | grep java | grep -v grep:
根据进程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
- jstack pid | grep 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 调优相关推荐
- 【JVM调优】JVM内存管理调优浅谈
什么是JVM Java Virtual Machine,Java虚拟机 Java虚拟机有自己完善的硬件架构,如处理器.堆栈等,还具有相应的指令系统. Java虚拟机本质上就是一个程序,当它在命令行上启 ...
- JVM内存管理:深入Java内存区域与OOM
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述: 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝 ...
- JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法)
转载自 JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法) 引言 何为终极算法? 其实就是现在的JVM采用的算法,并非真正的终极.说不定若干年以后,还会有新的终极算法, ...
- JVM内存管理------垃圾搜集器精解
转载自 JVM内存管理------垃圾搜集器精解 引言 在上一章我们已经探讨过hotspot上垃圾搜集器的实现,一共有六种实现六种组合.本次LZ与各位一起探讨下这六种搜集器各自的威力以及组合的威力 ...
- JVM内存管理--笔记
文章目录 Java代码是如何运行起来的? JVM内存管理 程序计数器 Java虚拟机栈 局部变量表 变量槽 本地方法栈 Java堆 方法区 运行时常量池 直接内存 Java代码是如何运行起来的? Ja ...
- 读懂 JVM 内存管理这篇就够了
读懂 JVM 内存管理这篇就够了 JVM 的内存结构 程序计数器 作用 概述 PC寄存器的常见问题 虚拟机栈 栈中可能出现的异常 栈的存储单位 栈运行原理 栈帧的内部结构 局部变量表 槽 Slot 操 ...
- 「JVM 内存管理」低延迟的 Shenandoah GC 与 ZGC
同时在内存占用(Footprint),吞吐量(Throughput),延迟(Latency)三方面表现得最优,才能称得上完美的垃圾收集器,但这几乎是不可能的(不可能三角,三元悖论,通常最多可以兼顾两项 ...
- 详解JVM内存管理与垃圾回收机制2 - 何为垃圾
随着编程语言的发展,GC的功能不断增强,性能也不断提高,作为语言背后的无名英雄,GC离我们的工作似乎越来越远.作为Java程序员,对这一点也许会有更深的体会,我们不需要了解太多与GC相关的知识,就能很 ...
- JVM内存管理及GC机制
转载自:http://blog.csdn.net/suifeng3051/article/details/48292193 一.概述 Java GC(Garbage Collection,垃圾收集,垃 ...
- 形式参数内存在哪java_深入浅出Java中JVM内存管理
原标题:深入浅出Java中JVM内存管理 Java岗位面试,JVM是对程序员基本功考察,通常会问你对JVM了解吗?可以分几部分回答这个问题,首先JVM内存划分 | JVM垃圾回收的含义 | 有哪些GC ...
最新文章
- javascript函数嵌套时arguments的问题
- R语言计算回归模型每个样本(观察、observation、sample)的DFFITS度量实战:忽略单个观察(样本)时,回归模型所做的预测会发生多大的变化
- ATT Protocol 属性协议
- python jieba 文本相似度_文本相似度分析(基于jieba和gensim)
- windows环境中JDK环境变量配置
- 【网络覆盖优化】基于matlab的网络覆盖遗传优化问题仿真
- 厉害了!小学生用大数据研究苏轼,结论出人意料
- 【长安的荔枝】读书摘记
- 哈工大深圳计算机实验室介绍,实验室介绍
- closest()方法简介
- 借力函数计算 FC,HEROZ 打造专业级 AI 日本将棋服务
- mui 屏蔽手机物理返回按键(安卓+苹果)
- mac latex与texstudio安装
- 查看linux版本的几种方法
- 手机扫盲集锦(常用术语、小常识、如何鉴别水货手机和行货手机等)
- Firebase Crashlytics收集崩溃报告
- linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟
- 基于Pycharm的Django学习 —— 项目实战(Form和ModelForm)
- 热门的四款RK3399系列板卡产品大PK-谁是当家花旦?
- uniapp生成小程序码仿商品小程序码跳转到商品详情
热门文章
- 走自己的路,记得回头看看
- 用C#实现基于TCP协议的网络通讯(1)
- 【java学习之路】(java SE篇)012.网络编程
- oracle das系统,分布式声波传感系统DAS
- HIve内置函数(functions)使用和解析
- c语言内循环外循环怎么使用,开高速, 用内循环还是外循环? 教你正确使用内外循环!...
- linux系统重启方式,查看linux系统重启的命令和方式
- c语言用参数确认递归,C语言程序设计(第4章函数)3
- LeetCode50. Pow(x, n)(二进制位运算)
- C++编程:输入/输出 I/O