JVM基础知识总结及参数配置

1、JVM体系结构图
在这里插入图片描述
2、类加载器
Java类加载器基于三个机制:委托、可见性和单一性。委托机制是指将加载一个类的请求交给父类加载器,如果这个父类加载器不能够找到或者加载这个类,那么再加载它。可见性的原理是子类的加载器可以看见所有的父类加载器加载的类,而父类加载器看不到子类加载器加载的类。单一性原理是指仅加载一个类一次,这是由委托机制确保子类加载器不会再次加载父类加载器加载过的类。类加载器负责加载文件系统、网络或其他来源的类文件。有三种默认使用的类加载器(jvm自带):Bootstrap类加载器、Extension类加载器和System类加载器(或者叫作Application类加载器)。每种类加载器都有设定好从哪里加载类。

3、本地方法栈、本地方法接口
用于融合其他编成语言为java所用
在这里插入图片描述

4、pc寄存器
程序计数器:记录程序的执行顺序

5、方法区、静态区
方法区存储了每一个类的结构信息、方法区是规范,在不同的虚拟机里头实现是不一样的,最典型的就是永久代和元空间。
1.方法区又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
3.全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。

注意:Java7及以前版本的Hotspot中方法区位于永久代中。同时,永久代和堆是相互隔离的,但它们使用的物理内存是连续的。永久代的垃圾收集是和老年代捆绑在一起的,因此无论谁满了,都会触发永久代和老年代的垃圾收集。在Java8中,元空间(Metaspace)登上舞台,方法区存在于元空间(Metaspace)。同时,元空间不再与堆连续,而且是存在于本地内存(Native memory)。永久代的参数-XX:PermSize和-XX:MaxPermSize也随之失效。当Java Heap空间不足时会触发GC,但Native memory空间不够却不会触发GC。

6、栈
栈区:对象实例在Heap(堆)中分配好以后,需要在Stack中保存一个4字节的Heap内存地址,用来定位该对象实例在Heap 中的位置,便于找到该对象实例。
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中。
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
4.由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。
5.栈管运行、堆管存储
在这里插入图片描述
在这里插入图片描述

7、堆
堆区:专门用来保存对象的实例(创建的对象和数组),实际上也只是保存对象实例的属性值,属性的类型和对象本身的类型标记等,并不保存对象的方法(方法是指令,保存在Stack中)。堆的结构,物理:新生代+老年代。
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身.
3.一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。
在这里插入图片描述
在这里插入图片描述

8、GC算法
1.引用计数法(一般不采用)
存在循环引用和性能问题
2.标记清除算法(Mark-Sweep)
概念:标记可达对象、清除不可达对象
缺点:回收后的空间是不连续的,在大对象的内存分配时,不连续内存空间的工作效率较低
3.复制算法
核心思想:将原有的内存空间分为两块,每次只使用一块,在进行垃圾回收时,将正在使用的内存中的存活对象复制到未使用的内存块中,之后清除正在使用的内存块中的对象,交换两个内存的角色,完成垃圾回收。
优点:存活对象数量少时,效率高。(适合新生代)
缺点:系统内存折半。
4.标记压缩算法(Mark-Compact)
标记压缩法是一种老年代的回收算法。在清理未被标记的对象后,再把存活的对象压缩到内存的一端,避免了内存碎片的产生。
5.分代算法
不同的内存区间使用不同的分代算法
6.分区算法
分区算法将整个堆空间划分成连续的不同小区间,每一个小区间都独立使用,独立回收。
优点:可以控制一次回收小区间的数量,能更好的控制GC产生的停顿时间。

9、执行过程(Java8)
(1)java编译器把类编译成.class文件。
(2)类加载器加载.class文件。
(3)栈负责运行和存储本地(8种基本数据类型和对象的引用)变量、栈操作、实例方法出口等等。
(4)堆负责存储创建的对象和数组。
(5)方法区负责存储类元信息,比如:字段、方法、常量池等。

给大家推荐一篇文章:[JVM参数及调优教程]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值