JVM
文章平均质量分 93
JVM知识分享
技术路上的苦行僧
不怕别人天赋比你高,就怕别人比你更努力
展开
-
JVM(10)之垃圾收集器PartNew&CMS以及三色标记算法详解
垃圾收集器PartNew&CMS以及三色标记算法详解原创 2022-07-21 00:50:50 · 486 阅读 · 0 评论 -
JVM(9)之JVM对象创建与内存分配深度剖析
JVM对象创建与内存分配深度剖析原创 2022-07-20 17:31:51 · 532 阅读 · 0 评论 -
JVM(8)之从JDK源码级别剖析JVM类加载机制
从JDK源码级别剖析JVM类加载机制原创 2022-07-04 17:52:31 · 353 阅读 · 0 评论 -
JVM(7)之垃圾回收算法
一、引用计数法引用计数法,在对象中添加一个引用计数器,每当有一个地方引用它的时候,计数器值就加1;当引用失效时,计数器值就减一;任何时刻计数器为0的对象就是不可能再被使用的。客观的说,虽然引用计数法虽然占用了一些额外的内存空间来进行技术,但他的原理相对简单,判定的效率也高。但是,在Java领域至少主流的Java虚拟机里面都没有选用引用计数算法来管理内存,主要的原因,这个看似简单的算法有很多例外情况要考虑,必须要配合大量额外处理才能保证正确的工作,就例如引用计数就很难解决对象质检相互循环引用的问题。原创 2022-03-26 12:32:27 · 795 阅读 · 0 评论 -
JVM(6)之运行时数据区域 + 内存溢出异常
一、前言首先我们来看一张JVM内存区域图:接下来我们分别来介绍一下这个几个区域的主要作用:2、程序计数器程序计数器(program Count Register)是一块较小的内存,它可以看做是当前线程所执行的字节码的行号指示器。字节码解释器工作就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是控制控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都是需要依赖这个计数器来完成。需要注意的是,这个程序计数器是每条线程都需要有一个独立的程序计数器,如果线程正在执行原创 2022-03-19 20:44:04 · 895 阅读 · 0 评论 -
JVM(5)之对象创建过程+对象头具体包括什么+对象定位
一、一线互联网面试题 首先先看下下面的面试题:二、对象的创建过程首先在创建对应的时候如果对象不存在肯定是涉及到class文件的加载,class文件的加载需要经历:加载 ->连接->初始化。class loading:加载 class linking:连接,连接又有具体的三步,分别是:验证(验证包括:calss文件格式验证、meta元数据验证等)、准备、解析:对应会给变量赋默认值。 class initializing 静态初始化的过程,这里会给变量赋值初始值; ...原创 2022-03-16 15:39:36 · 3654 阅读 · 0 评论 -
JVM(4)之CPU储存器+MESI+CPU伪共享+CPU乱序问题及代码论证+volatile+synchrnized
一、硬件的层次 可以看到最慢的是远程存储<本地硬盘<主存<L3高速缓存<L2高速缓存<L1高速缓存<寄存器二、缓存行由于共享变量在CPU缓存中的存储是以缓存行为基本单位,一个缓存行可以存储多个变量(存满当前缓存行的字节数);而CPU对缓存的修改又是以缓存行为最小单位的,那么就会出现伪共享问题。Cache Line可以简单的理解为CPU Cache中的最小缓存单位,今天的CPU不再是按字节访问内存,通常是以64字节为单位的块...原创 2022-03-15 17:20:03 · 608 阅读 · 0 评论 -
JVM(3)之双亲委派机制
一、双亲委派机制1.1概念JVM类加载器是有亲子层级结构的,如下图:这里类加载其实就有一个双亲委派机制,加载某个类时会先委托父加载器寻找目标类,找不到再委托上层父加载器加载,如果所有父加载器在自己的加载类路径下都找不到目标类,则在自己的类加载路径中查找并载入目标类。比如我们的Math类,最先会找应用程序类加载器加载,应用程序类加载器会先委托扩展类加载器加载,扩展类加载器再委托启动类加载器,顶层启动类加载器在自己的类加载路径里找了半天没找到Math类,则向下退回加载Math类的请求,扩展类原创 2022-03-14 11:48:57 · 603 阅读 · 0 评论 -
JVM(2)之OutOfMemoryError异常
一、实战:OutOfMemoryError异常1.1Java堆溢出Java堆用于储存对象实例,我们只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么随着对象数量的增加,总容量触及最大堆的容量限制后就会产生内存溢出异常。限制Java堆的大小为20MB,不可扩展(将堆的最小值-Xms参数与最大值-Xmx参数设置为一样即可避免堆自动扩展),通过参数-XX:+HeapDumpOnOutOf-MemoryError可以让虚拟机在出现内存溢出异常的时候Dum原创 2021-04-12 09:46:02 · 883 阅读 · 0 评论 -
JVM(1)之内存模型
我们很多 Java 开发人员都知道在 JVM 中有堆和栈,但是永远说不清楚堆到底是什么,栈是什么, 除了堆栈在 JVM 中还有其他的东西吗, 本章将带领大家细分 JVM 的组成以及他们的用处。Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域,我们原创 2021-04-09 11:15:35 · 114 阅读 · 0 评论