jvm学习(一)初识与实践
通过右键点击项目选择“属性”,进入资源管理界面,可以看到快照文件的位置。 打开MAT工具,导入快照文件。 在MAT中右键点击项目选择“分析”进入详情界面。
发布日期:2021-04-30 21:01:02
浏览次数:137
分类:精选文章
本文共 2065 字,大约阅读时间需要 6 分钟。
学习JVM:从环境准备到内存分析的实践指南
作为一名开发人员,掌握JVM的理解和操作能力对于Java程序的性能优化和故障排查具有至关重要的意义。作为一本备受推崇的著作,《深入理解JVM》第三版(JDK 1.8版本)已发布,这本书无疑是每一个Java开发人员的必修课。
JVM与JDK的关系
JVM(Java Virtual Machine,Java虚拟机)是Java编程的核心,其主要职责是负责Java程序的执行。JDK(Java Development Kit,Java开发套件)则包含了JVM以及其他必要的开发工具。从官方文档可以看出:
- JDK = JRE + 其他工具
- JRE(Java Runtime Environment,Java运行环境)= JVM + Java SE API + 其他
- 因此,JVM是JRE的一部分,而JRE又是JDK的核心组成部分。
环境准备
在开始学习JVM之前,需要先搭建一个合适的开发环境。以下是具体的配置步骤:
安装JDK 1.8:
- 下载并安装JDK 1.8,注意选择合适的平台版本(Windows、Mac等)。
- 配置环境变量,确保JVM能够正确识别和启动。
安装IDE:
- 使用Eclipse作为开发环境,这是Java开发人员的常用选择。
- 如果你更倾向于使用IDEA,可以选择IntelliJ IDEA。
安装内存分析工具:
- **MAT(Memory Analyzer)**是Eclipse内建的强大内存分析工具。
- 如果你使用IntelliJ IDEA,可以选择JProfiler或VisualVM作为替代工具。
代码与实验
为了深入理解JVM的内存管理机制,我们可以通过以下代码进行实验:
类示例
public class Demo1 { private String name; private int age; private String grade; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getGrade() { return grade; } public void setGrade(String grade) { this.grade = grade; }} 主类(用于制造内存溢出)
package com.kdeng.practise.jvm.day01;import java.util.ArrayList;import java.util.List;public class TestJvm01 { public static void main(String[] args) { List list = new ArrayList<>(); while (true) { list.add(new Demo1()); } }} 内存分析
运行上述代码会立即报内存溢出错误。为了更直观地理解问题,我们需要通过内存分析工具进行排查。
参数设置
在运行Eclipse时,右键点击项目选择“运行配置”,进入参数设置界面,添加以下参数:
-Xms20m-Xmx20m
这里的含义:
-Xms20m:初始化堆内存大小为20MB。-Xmx20m:最大堆内存容量为20MB。
运行代码后,Eclipse会生成一个内存快照文件(.hprof格式),用于后续分析。
快照分析
内存占用分析
快照文件中会显示占用内存的具体情况。红框部分表示内存泄漏的具体区域:
- 浅层大小(Shallow size):表示对应对象所占用的内存,包括对象头和成员变量。
- 保留大小(Retained size):表示从该对象能直接或间接访问到的对象的总和。
- 百分比:占用堆内存的百分比。
通过这些信息,可以清晰地看到哪些对象占用了过多的内存,进而找到内存泄漏的根源。
初步总结
通过以上实验,我们可以初步理解JVM的内存管理机制以及内存泄漏的常见原因。接下来,可以深入学习JVM的内存结构、垃圾回收算法以及性能调优技巧。
如果你对具体的JVM参数配置和内存分析工具使用方法还不熟悉,可以参考以下资源进行深入学习:
- JVM性能调优指南
- 《深入理解JVM》官方文档
通过持续的实践和学习,你将逐渐掌握JVM的核心原理,并能够应对各种复杂的内存问题。
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2026年06月02日 17时32分48秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP大数组循环-避免产生Notice或者是Warning
2023-03-01
PHP大数组过滤元素、修改元素性能分析
2023-03-01
PHP大文件切片下载代码
2023-03-01
php如何做表格,新手怎么制作表格
2023-03-01
RabbitMQ集群 - 普通集群搭建、宕机情况
2023-03-01
php如何正确的获得文件的后缀名
2023-03-01
PHP如何生成唯一的数字ID
2023-03-01
PHP如何获取当前页面的最后修改时间
2023-03-01
PHP如何读取json数据
2023-03-01
PHP字符串
2023-03-01
PHP字符串递增
2023-03-01
php学习之基础语法
2023-03-01
RabbitMQ集群 - 仲裁队列、Raft协议(最详细的选举流程)
2023-03-01
PHP学习总结(11)——PHP入门篇之WAMPServer多站点配置
2023-03-01
PHP学习总结(12)——PHP入门篇之变量
2023-03-01
PHP学习总结(13)——PHP入门篇之常量
2023-03-01
PHP学习总结(14)——PHP入门篇之常用运算符
2023-03-01
PHP学习总结(1)——PHP入门篇之PHP可以做什么?
2023-03-01
PHP学习总结(2)——PHP入门篇之PHP代码标识
2023-03-01