
JVM
文章平均质量分 82
柯南是死神
苦逼大学生
展开
-
深入学习synchronized
一、Java内存模型JMM在介绍JMM之前,先说说计算机的结构,冯诺依曼计算机结构:CPU 是计算机运算和控制的核心,我们的程序最终都会变成指令让CPU去执行内存 程序都是在内存中运行的,内存会保存程序运行中的数据,供CPU处理缓存 由于CPU的运算速度和内存的读写速度差距很大,导致每次CPU操作内存都要耗费很长的时间,于是在CPU和内存之间加上缓存,最靠近CPU的缓存称为L1,然后依次是L2,L3和主内存,越靠近CPU的缓存速度越快,存储容量越小。CPU缓存模型结构如下:二、Java内原创 2021-07-22 20:29:46 · 142 阅读 · 0 评论 -
常见的垃圾回收算法和垃圾回收器
垃圾回收算法前置:1.对象什么时候需要被回收 堆内存中存放着Java中几乎所有的对象实例,垃圾回收器在进行垃圾回收之前要知道这些对象中有哪些活着,有哪些需要回收。常见的判断方式有以下俩种:引用计数法 在对象中添加一个引用计数器,每当有一个地方引用他的时候,计数器就加一,当引用失效的时候,计数器减一;当计数为0的时候,这个对象就是不可能再被使用的。 引用计数法原理简单,判定效率也比较高,但是无法解决循环引用的问题,A和B相互引用的时候,他们的计数不为0,但是这俩个对象也不会再被访问,这时候引用计原创 2021-07-20 13:05:45 · 741 阅读 · 1 评论 -
Java对象的创建过程以及OOM测试
一、对象的创建 在Java语言层面上,创建对象通常仅仅是一个new关键字,当JVM遇到一条new的字节码指令时,首先先去检查这个指令的参数能否在常量池定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析,若没有,要先执行类加载。 接着为新生对象分配内存,内存大小在类加载完成后就已经确定了,分配内存实际上就是把一块大小确定的内存从堆中划分出来,分配的方法又有俩种: 指针碰撞法:这种方法有个前提:堆中的内存是绝对规整的,被使用过的内存放在一边,没被使用的放在另一边,中间有一个指针作原创 2021-05-31 17:25:31 · 491 阅读 · 0 评论 -
Java内存区域的划分
1.运行时数据区 JVM在执行Java程序时会将其所管理的内存区域划分为若干个不同的数据区域,这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而建立,有的区域根据用户线程的启动和结束而建立和销毁,Java虚拟机管理的内存分为以下几个区域:1.1 程序计数器 程序计数器是一块较小的内存空间,它可以看作当前线程所执行的字节码的行号指示器,字节码解释器通过改变这个计数器的值来确定下一条要执行的字节码指令,分支、循环、异常处理等都是由计数器完成。 Java虚拟机的多线程是多条原创 2021-05-30 12:26:55 · 194 阅读 · 0 评论 -
Java中类的生命周期
Java类的生命周期(面试题) 当我们在本地编写完java代码的时候,是.java文件,在编译过后会成为.class字节码文件,.class字节码文件只能在虚拟机中运行,Java中类的声明周期就是.class文件从加载到销毁的过程。 Java类的生命周期主要有加载、连接、初始化、使用、卸载这五个阶段。如图:加载:原创 2021-05-27 19:25:52 · 257 阅读 · 0 评论