JVM学习简要概述

JVM学习简要概述

编外话:最近发现面试基本上对3年经验的java工程师都会要求JVM相关的内容,因此想把这部分给总结下,一方面是对自己对于此方面的内容的一个巩固;另一方面也是给相关需要了解这方面的人一个简单的了解。

1、JVM简要的了解

JVM(Java Virtual Machine),即java虚拟机。是java代码运行的核心组成部分。java能够实现跨平台主要是它是基于java虚拟机运行的。JVM相当于是提供一个托管平台,其提供了内存管理,垃圾回收,编译检查等功能。jvm执行主要分为两个部分,1.java编译阶段;2.jvm执行引擎。

java编译阶段:主要的是把.java文件编译成.class文件,加载到java虚拟机中的方法区。

java执行阶段:JVM加载类,JVM执行方法调用;

类加载主要分为三个阶段:加载、链接及初始化;

JVM执行方法主要根据名称,参数及返回类型从方法区中找到方法。

JVM将运行时的区域划分为5个部分,堆空间(方法区,堆),栈空间(PC寄存器、java方法栈,本地方法栈);

2、关于GC

GC(Garbage Collection)JVM提供的自动垃圾回收机制。

目的:清除无用对象所占用的堆空间

识别:什么是无用对象?有两个方式,一个计数法,每个对象都对应一个空间地址的引用。第二个是标记法,从根对象进行标记,如果没有进行标记的对应则表明是垃圾对象。

方法:主要有三种方法:清除,压缩,复制;清除即直接把垃圾对象引用清除掉,缺点容易产生碎片;压缩虽然得到了连续的磁盘空间,但是复杂比较耗性能;复制空间利用率低。

3、GC的解决方案和询查步骤

1、jps

jps [-lmv] 打印正在运行的java进程相关信息。
l 模块名和包名
v 虚拟机参数
m main函数参数

2、jstat 打印java进程的相关内容

jstat -options

#VMID为java进程id
jstat -outputOptions [-t] VMID

例:jstat -gc 10100 1s

查看java进程的类加载、即时编译以及垃圾回收相关信息。常用监测垃圾回收问题以及内存泄露问题

3、jmap 虚拟机堆中的对象

4、jinfo java进程的参数

5、jstack 打印目标java进程的各个线程的栈轨迹 jstack PID

打印目标java进行中各个线程的栈轨迹、线程状态、锁状态,自检死锁等。

6、jcmd 代替jstat

7、GUI(MAT和JMC没有深入的实践)

4、总结

最近在反思,为啥我们一定要了解JVM。其实在大多数开发中,我们只需要会调用java api接口就能够完成我们的业务逻辑实现,而不需要深入的理解JVM。

打个形象的比喻,我们知道F=ma2 。在圆周运动中是F=mv2/r。如果我们能够根据牛二推导出圆周运动的公式,那么对我们记忆和理解圆周运动就更加的深刻。

因此我们前期可以只需要会用,后期一定要深入的去理解这门语言的一些底层。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值