黑马JVM总结(四)

news2025/1/18 9:54:56

(1)本地方法栈

Java虚拟机调用本地方法时,给本地方法提供的一个内存空间,本地方法它是指哪些不是由java代码编写的方法

java代码有一定限制,它有时候不能直接跟操作系统底层打交道,需要用c和c++语言编写的本地方法来针对与于操作系统底层的API打交道,我们的java代码间接的通过本地方法调用底层的功能,那这些本地方法运行的时候使用的内存叫做本地方法栈 

本地方法是非常多的

像Object类中的clone的克隆方法,它是native的没有方法实现的,它的方法实现都是用C和C++语言编写的,我们java代码通过间接调用Native的本地方法接口间接的调用c或c++的clone方法实现

下面的也是 

(2)堆

我们前面学的线程计数器、虚拟机栈、本地方法栈他们都是线程私有的

堆和方法区,是线程共享的区

(3)堆_内存溢出

对象不在使用了就会被垃圾回收机制回收,如果产生的对象有人在使用,并且一直产生对象,这些对象就不能当做垃圾,堆对象达到一定的数量就会导致,堆慢慢的堆内存被耗尽,产生堆内存溢出

可以修改堆控件的参数:改小一点

次数会变少

(4)堆_内存诊断-jmap

使用jsp检测:查出这个进程号

使用jmp工具检测

执行到2再检测一遍:

执行到3再检测一遍:

 

在byte数组没有创建之前:对象堆占用情况使用了6兆

打印2byte数组创建后查看新创建对象堆的占用情况:变成16兆 
打印3,垃圾回收之后:堆中对象的占用情况:垃圾 回收了变成了1兆

(5)堆_内存诊断-jconsole

出现一个图形化工具:

通过控制台的答应数组情况,在观看图堆内存使用情况:          

这个工具还可以观看线程、类、cpu等信息情况

还可以检测死锁,跟前面jstack工具是一样的

(6)堆_内存诊断-jvirsualvm

比如我们已经把程序运行起来了,但是不知道代码是怎么写的:先通过jps工具查看一下:看到17748这个进程

然后再使用jmap工具:看一下内存区的使用情况

 

Old Generation:老年代内存占用情况 

 总共占用230左右

使用jconsole工具:

在内存选项卡里,执行GC:

 

执行之后内存下降了很多: 但是并不是太多

 

在使用jmap查看一下:新生代内存回收了不少,老年代还有200多

 

 

老年代没有回收,是不是我们变成失误而导致的始终被引用而无法释放它的内存呢?

使用这个可视化工具:jvisualvm

连接到那个Demo13上去:有一个好用的功能堆Dump:它可以抓取堆的快照,然后可以对堆里面的一些详细内容进行分析,这个jconsole所不具备的 

点击对Dump:他就把那一时刻堆的内存信息把它截取下来,并且堆里面有哪些对象,每个对象的个数它也会收集起来,

 在检查里点击查找:找出前20 太占内存的对象

看到第一个ArrayList占用的比较大点击进去查看一下

它的元素里包含的的是一个个Student对象 ,它包含一个byte数组,1兆左右

 共有将近200个元素

 通过分析就大概排查出来了,ArrayList中Student对象导致我们的内存占用比较高而且是长时间使用的,导致垃圾回收没办法回收内存

找到这个代码

在实际生产环境下方式类似,我们首先通过堆转储dump:把内存快照抓下来抓下来之后分析对内存占用较大的对象,就可以得出结论,然后再分析原始代码就行了 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/997790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《C和指针》笔记23: 指针的指针

int a 12; int *b &a;现在有了第三个变量c c &b;c的类型是什么?显然它是一个指针,但它所指向的是什么?变量b是一个“指向整型的指针”,所以任何指向b的类型必须是指向“指向整型的指针”的指针,更通俗地说…

D. Paths on the Tree

Problem - 1746D - Codeforces 思路:先分析一下题意,根据第一条性质,每次只能够从1开始,而第二条性质则表明对于每个节点来说,经过这个节点的子节点的路径条数应该尽量均衡,最大值与最小值相差不能超过1&am…

水浒传之“领导力的定义:梁山集团三代领导人的特点”

周末快乐,我是老原。 周末修整,也不要忘记给自己的大脑充个电。 最近空闲时间看《水浒传》,有了一些关于领导力的感悟。 一提到领导力,有人可能会认为,这是企业领导才需要掌握的能力。 其实并不是。 领导力可以体…

liunx系统无sudo或管理员权限安装rar解压安装包

liunx无sudo权限安装rar解压安装包 (1)正常liunx安装rar(2)无sudo\root(管理员身份)时如何安装rar (1)正常liunx安装rar 1、下载安装包 WinRAR archiver, a powerful tool to process RAR and ZIP files (r…

C#类与类库调用注意事项

类 创建一个类文件,myfunction.cs //静态类:直接引用、无需实例化 static public int jiafa(int V) //普通类:引用时需要实例化 public int jiafa(int V)using System; using System.Collections.Generic; using System.Diagnostics; using …

VS Code 配置 JAVA(总)

VS Code 配置 JAVA(总) 主要参考: 处理单独 java 源文件的vscode配置VScode关于 java 配置的总体说明安装多版本 jdk 后,如何指定使用某个版本?某些与java相关的有用扩展VS code 如何配置不同编程语言及其工作流程 …

运维必备 | 使用 ansible 自动化批量执行工具,提升企业运维工作效率

各位亲爱的读者,现在公众号更改了推送规则,如果您需要第一时间看到我们推送的好内容。 一定要记得给公众号星标,经常点赞、在看、转发、分享和留下您的评论 ! 关注回复【学习交流群】加入【安全开发运维】答疑交流群 请朋友们【多…

买卖股票的最佳时机含冷冻期

题目链接 买卖股票的最佳时机含冷冻期 题目描述 注意点 卖出股票后,无法在第二天买入股票 (即冷冻期为 1 天)不能同时参与多笔交易(必须在再次购买前出售掉之前的股票)可以尽可能地完成更多的交易(多次买卖一支股票&#xff09…

l8-d11 TCP连接管理与UDP协议

一、三次握手 TCP 建立连接的过程叫做握手。 采用三报文握手:在客户和服务器之间交换三个 TCP 报文段,以防止已失效的连接请求报文段突然又传送到了,因而产生 TCP 连接建立错误。 二、四次挥手 TCP 连接释放过程比较复杂。 数据传输结束后…

2、k-means聚类算法sklearn与手动实现

本文将对k-means聚类算法原理和实现过程进行简述 算法原理 k-means算法原理较简单,基本步骤如下: 1、假定我们要对N个样本观测做聚类,要求聚为K类,首先选择K个点作为初始中心点; 2、接下来,按照距离初始中…

蓝桥杯官网填空题(三角形的面积)

题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 已知三角形三个顶点在直角坐标系下的坐标分别为: txt (2.3, 2.5) (6.4, 3.1) (5.1, 7.2) txt 求该三角形的面积。 注意,要提交的是一个小…

解决ROS2 humble版本源码编译中resdep init及rosdep update失败的问题

网上有在/etc/hosts中添加ip地址的方法,使用了不成功,具体做法如下,仅供参考: a.打开查询ip的网址: https://site.ip138.com b.输入:raw.githubusercontent.com c.执行sudo vi /etc/hosts 将获取到的ip添…

docker系列(3) - 常用软件安装

文章目录 3. docker安装常用软件3.1 安装nginx3.2 安装redis3.3 安装mysql3.4 部署springboot程序3.4.1 编写dockerfile3.4.2 构建镜像3.4.3 启动镜像 3. docker安装常用软件 3.1 安装nginx docker pull nginx#挂载启动 docker run -it -d \ --namenginx \ --networkpub_netw…

L2 数据仓库和Hive环境配置

1.数据仓库架构 数据仓库DW主要是一个用于存储,分析,报告的数据系统。数据仓库的目的是面向分析的集成化数据环境,分析结果为企业提供决策支持。-DW不产生和消耗数据 结构数据:数据库中数据,CSV文件 直接导入DW非结构…

2023高教杯数学建模2:DE题+参考论文、代码

2023高教杯数学建模2:DE题 写在最前面E题D题2014C题优秀论文笔记问题一(求解母猪年均产仔量以达到或超过盈亏平衡点)问题二(求解小猪选为种猪的比例和母猪的存栏数)问题三(确定最佳经营策略,计算…

docker系列(4) - docker镜像制作

文章目录 4. docker镜像4.1 联合文件系统(UnionFS)4.2 Docker镜像加载原理4.3 docker commit(扩展镜像)(非常重要)4.3.1 案例4.3.1.1 下载ubuntu镜像4.3.1.2 安装vim4.3.1.3 commit新的镜像4.3.1.3 验证新的镜像 4. docker镜像 4.1 联合文件系统(UnionFS) Union文件系统(Unio…

树树树树树

//先序遍历 void PreOrder(BiTree T){if(T!NULL){printf("%c",T->data);PreOrder(T->lchild);PreOrder(T->rchild);} } //后序遍历 void PostOrder(BiTree T){if(T!NULL){PostOrder(T->lchild);PostOrder(T->rchild);printf("%c",T->dat…

美国星链再迎挑战,中国最有钱的通信企业争夺卫星互联网服务

随着一家手机企业发布5G卫星手机,卫星互联网服务的热度大增,业界人士指出目前能提供卫星互联网服务的仅有中国电信,但是中国移动已不甘落后,正在测试低轨道卫星互联网服务,这也是中国与美国星链竞争的序幕。 据了解日前…

表的约束类型

空属性约束 mysql有空属性和非空属性:null和not null 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算 所以我们在设计数据库表的时候,一定要在表中进行限制&…

嵌入式:驱动开发 Day2

作业&#xff1a;字符设备驱动&#xff0c;完成三盏LED灯的控制 驱动代码&#xff1a; mychrdev.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include &q…