JVM
JVM相关总结
blueskygotohz
这个作者很懒,什么都没留下…
展开
-
JVM垃圾回收一个简单案例分析
1 HotSpot参数分类> 标准: - 开头,所有的HotSpot都支持> 非标准:-X 开头,特定版本HotSpot支持特定命令> 不稳定:-XX 开头,下个版本可能取消java -X 查看标准参数2 通过实验来认识JVM参数public class HelloGC {public static void main(String[] args) {System.out.println("HelloGC...原创 2020-06-23 20:31:46 · 398 阅读 · 0 评论 -
常见的垃圾回收器
常见的垃圾回收器如下图:1 新生代垃圾收集器 1.1 Serial 收集器复制算法Serial 是一款用于新生代的单线程收集器,采用复制算法进行垃圾收集。Serial 进行垃圾收集时,不仅只用一条线程执行垃圾收集工作,它在收集的同时,所有的用户线程必须暂停(Stop The World)。如下是 Serial 收集器和 Serial Old 收集器结合进行垃圾收集的示意图,当用户线程都执行到安全点时,所有线程暂停执行,Serial 收集器以单线程,采用复制算法进行垃圾收集工...原创 2020-06-22 20:36:00 · 270 阅读 · 0 评论 -
JVM垃圾回收算法
1.什么是垃圾没有任何引用指向的一个对象或者多个对象(循环引用)2 如何定位垃圾2.1引用计数(ReferenceCount)在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1,引用失效时就减1.任何时刻计数器为0的对象就是不可能再被使用的。这个方法效率挺高,大部分情况下也是很不错的算法。但是在JVM中会很难解决对象之间相互循环引用的问题,就如果两个对象之间相互调用,这时候就会发生类似死锁的情况,即这个地方相互调用会使得引用计数法始终认为有对象在引用当前对象,就一直计数.原创 2020-06-22 20:18:25 · 167 阅读 · 0 评论 -
运行时数据区简单介绍(上)
JVM1.8之后的内存布局:JDK8 之前的内存区域图如下:本文先介绍JVM内存五大部分的程序计数器,虚拟机栈和方法区,其它三部分下篇详细介绍。我们把程序代码抽象一下,可以理解为由三个部分组成,分别是数据、指令、控制流,所谓数据,可以理解为定义的成员变量,静态变量,常量;指令理解为在方法中执行的语句,控制流理解为分支、循环、跳转、异常处理、线程恢复等。程序计数器程序计数器是一块较小的内存空间,指的是当前线所执行的字节码的行号指示器。这是比较官方的解释,通俗一点来...原创 2020-06-22 16:35:11 · 563 阅读 · 0 评论 -
Java对象在内存中的布局
先看两个问题:1 对象的创建过程?Objectt = new Object();首先创建对象的时候,会先检查对象的class类有没有加载过,如果没加载过就执行类加载过程class loading(加载)通过一个类的全限定名来获取类的二进制字节流并未指定总哪获取,怎么获取。所以字节流可以是存储在硬盘上的文件,可以是运行时动态生成的二进制字节流,可以是有其他文件生成的(JSP对应的class文件)等等将字节流代表的静态存储结构转化为方法区的运行时数据结构在内存中生成一个代表这个.原创 2020-06-20 18:38:08 · 843 阅读 · 0 评论 -
乱序问题-内存屏障认识
乱序问题CPU为了提高指令执行效率,会在一条指令执行过程中(比如去内存读数据(慢100倍)),去同时执行另一条指令,前提是,两条指令没有依赖关系。对于现代cpu而言,性能瓶颈则是对于内存的访问。cpu的速度往往都比主存的高至少两个数量级。因此cpu都引入了L1_cache与L2_cache,更加高端的cpu还加入了L3_cache.很显然,这个技术引起了下一个问题:如果一个cpu在执行的时候需要访问的内存都不在cache中,cpu必须要通过内存总线到主存中取,那么在数据返回到cpu...原创 2020-06-20 16:36:19 · 871 阅读 · 0 评论 -
MESI--CPU缓存一致性协议浅谈
CPU为何要有高速缓存现代处理器为了提高访问数据的效率,在每个CPU核心上都会有多级容量小,速度快的缓存(分别称之为L1 cache,L2 cache,多核心共享L3 cache等),用于缓存常用的数据。由于内存的速度要比CPU慢将近100倍,数据被修改时也只是先更新cache,并不是直接写回到主存中(CPU是不能直接跟内存进行通信的,CPU只对接cache,然后由cache对接主存),这样一来就造成了缓存中的数据与内存不一致。如果系统是单核处理器,所有线程看到的都是缓存中的最新数据,当然没有问题。但如原创 2020-06-20 15:33:29 · 334 阅读 · 0 评论 -
Class类加载过程、类加载器简单介绍
类加载机制ClassLoaderClassLoader 就是类加载器,它的唯一职责就是将Class文件加载到JVM中,通常开发者并不需要自己创建ClassLoader,但在框架、中间件中自定义ClassLoader 非常常见,Tomcat便极具代表性,通过自定义的Tomcat Classloader体系实现应用的相互隔离。在 Java 中默认提供了三个类加载器,分别是BootstarapClassLoader、ExtClassLoader、AppClassLoader,它们各自只负载...原创 2020-06-19 16:13:09 · 642 阅读 · 0 评论 -
Class File Format 简单认识
概述Class文件是一组以8位字节为基础单位的二进制流,可以用Hex Friend等工具打开。CLass结构:无符号数:基本类型,u1,u2,u4,u4分别代表一个字节、两个字节、四个字节、八个字节的无符号数。表:多个无符号数或者其他表作为数据项构成的复合数据类型,习惯以_info结尾,整个class文件本质上就是一张表。class具体结构魔数每个class文件的头4个字节称为魔数,它的唯一作用是确定这个文件是否为一个能被虚拟机接受的Class文件,大部分文件存储标准都..原创 2020-06-18 19:04:40 · 355 阅读 · 0 评论