了解Java虚拟机(JVM)

  前言👀~

上一章我们介绍网络原理相关的知识点,今天我们浅浅来了解一下java虚拟机JVM

 JVM( Java Virtual Machine )

JVM内存区域划分

方法区/元数据区(线程共享)

堆(线程共享)

虚拟机栈(线程私有)

本地方法栈

程序计数器(线程私有)

类加载

双亲委派模型

类加载器

类加载过程(也就是上面说的找class文件的过程)

JVM垃圾回收机制(GC)

找到不再使用的对象

回收不再使用的对象

分代回收


如果各位对文章的内容感兴趣的话,请点点小赞,关注一手不迷路,讲解的内容我会搭配我的理解用我自己的话去解释如果有什么问题的话,欢迎各位评论纠正 🤞🤞🤞

12b46cd836b7495695ce3560ea45749c.jpeg

个人主页:N_0050-CSDN博客

相关专栏:java SE_N_0050的博客-CSDN博客  java数据结构_N_0050的博客-CSDN博客  java EE_N_0050的博客-CSDN博客


 JVM( Java Virtual Machine )

虚拟机其实就是一个计算机系统,就是通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境的完整计算机系统。虚拟机也有自己的虚拟CPU、内存、硬盘等资源。通常在单个物理服务器上运行,可能会与其他虚拟机共享硬件资源

常见的虚拟机:JVM、VMwave、Virtual Box

JVM和两者的区别:

1. VMwave与VirtualBox是通过软件模拟物理CPU的指令集,物理系统中会有很多的寄存器;

2. JVM则是通过软件模拟Java字节码的指令集,JVM中只是主要保留了PC寄存器,其他的寄存器都进行了裁剪

不管是JDK6、7、8默认的虚拟机都是HotSpot。不同系统的jvm是不同的,但是对上(给java层面提供的内容)是统一的

接下来我们主要讨论三个方面:

1.JVM内存区域划分

2.JVM的类加载机制

3.JVM的垃圾回收机制

了解一个java文件的编译以及执行的过程:在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。首先我们的java源代码文件就是我们平常idea创建的文件(.java)通过java编译器(javac)编译生成字节码文件(.class)在这个过程中,代码中的方法会被转换成字节码指令,字节码文件包含了JVM可以理解和执行的字节码指令,JVM加载这些字节码文件时,会将这些字节码指令通过解释器翻译成机器指令(每个cpu支持的指令不一样)再执行,对于频繁执行的代码会通过即时编译器(JIT属于是JVM的一个组件)将字节码一次性编译成机器码


JVM内存区域划分

一个运行起来的java进程,就是一个JVM虚拟机。每个进程运行起来就需要从操作系统申请获取一块内存空间过来,所以运行一个java进程也是一个道理,在JVM中将这个内存又划分了不同的内存区域,不同的区域起不同的作用

方法区/元数据区(线程共享)

存储被JVM加载的类信息、常量、静态变量即编译器编译后的代码等数据,也就是通过类加载器把.class文件加载到内存,创建一个Class对象来表示这个类也可以称为类对象(包含了类的定义、字段、方法、继承哪个类等信息)

方法区到底要如何实现那就是虚拟机自己要考虑的事情了。也就是说,在不同的虚拟机实现上,方法区的实现是不同的,在《Java虚拟机规范中》把此区域称之为“方法区”,而在 HotSpot 虚拟机的实现中,在 JDK 7 时此区域叫做永久代(PermGen),JDK 8 中叫做元空间(Metaspace),不管是永久代还是元空间都属于是对方法区的实现,和永久代不同的是元空间并不在虚拟机中,而是使用本地内存。运行时常量池属于是方法区的一部分,存放的是字面量(final常量、基本数据类型的值)和符号引用(类和结构的完全限定名、字段的名称和描述符、方法的名称和描述符),JDK1.7 字符串常量池从永久代移动了 Java 堆中

堆(线程共享)

存储的是代码中所有new的对象,并且堆是占据内存空间最大的区域

常见的JVM 参数设置 -Xms10m 最小启动内存是针对堆的,-Xmx10m 最大运行内存也是针对堆的,堆里面分为两个区域:新生代和老生代,新生代放新建的对象,当经过一定 GC 次数之后还存活的对象会放入老生代。新生代还有 3 个区域:一个 Endn + 两个 Survivor(S0/S1)垃圾回收的时候会将 Endn 中存活的对象放到一个未使用的 Survivor 中,并把当前的 Endn 和正在使用的 Survivor 清除掉

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值