java
文章平均质量分 71
jvm虚拟机、GC、类加载器、编译器等
疯狂撸代码的奋青
道阻且长,行则将至,行而不辍,未来可期。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
反射获取泛型类型
运行时,使用反射获取泛型类型原创 2022-06-08 16:58:52 · 277 阅读 · 0 评论 -
时区问题解决
1、我们设置mysql连接,在连接语句后面加上&serverTimezone=GMT+82、然后修改jackson配置#springspring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+83、修改启动类在启动类中,添加这个方法 /** * 设置时区 */ @PostConstruct void setDefaultTimezone() {原创 2022-03-10 23:47:40 · 778 阅读 · 0 评论 -
synchronized关键字的底层原理
synchronized 底层实现原理synchronized 是由一对 monitorenter/monitorexit 指令实现的,monitor 对象是同步的基本实现单元。在 Java 6 之前,monitor 的实现完全是依靠操作系统内部的互斥锁,因为需要进行用户态到内核态的切换,所以同步操作是一个无差别的重量级操作,性能也很低。但在 Java 6 的时候,Java 虚拟机 对此进行了大刀阔斧地改进,提供了三种不同的 monitor 实现,也就是常说的三种不同的锁:偏向锁(Biased Locki原创 2021-10-14 11:50:08 · 178 阅读 · 0 评论 -
Java对象内存布局 & 对象头Monitor
Java对象内存布局对象头Monitor监听器原创 2022-01-05 22:48:14 · 1011 阅读 · 0 评论 -
volatile的底层实现原理
是使用了lock锁汇编指令实现,让副本数据主动刷新主内存数据,从而实现缓存数据一致性问题对于老式的CPU,LOCK执行会阻塞CPU读取共享变量,对于新式的CPU会采用MESI协议CPU 中的 MESI 缓存一致性协议MESI分别代表缓存行数据所处的四种状态(使用额外的两位(bit)表示),通过对这四种状态的切换,来达到对缓存数据进行管理的目的:状态描述监听M 修改(Modify)该缓存行有效,数据被修改了,和内存中的数据不一致,数据只存在于本缓存行中缓存行必须时刻监听所有.原创 2021-12-15 11:52:44 · 722 阅读 · 0 评论 -
Java内存模型(Java Memory Model,JMM)
定义JMM主要是为了规定了线程和内存之间的一些关系。根据JMM的设计,系统存在一个主内存(Main Memory),Java中所有变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。JMM模型下的线程间通信lock(锁定):作用于主内存的变量,把一个变量标识为一条线程独占状态。unlock(解锁):作用于主内存原创 2021-12-14 11:12:01 · 790 阅读 · 0 评论 -
JVM深入分析——类加载器
一、ClassLoader(类加载器)作用类加载器负责加载 Java 类的字节代码到 Java 虚拟机中。二、类加载过程类从.java文件到实际加载到内存,到使用流程如图:1. 功能1.1. 加载(装载)查找并加载类的二进制数据1.2. 链接链接又分为三个步骤:验证:确保被加载类的正确性准备:为类的静态变量分配内存,并将其初始化为默认值解析:把类中的符号引用转换为直接引用1.3. 初始化为类的静态变量赋予正确的初始值类什么时候才被初始化?创建类的实例,也就是new一个对原创 2021-11-23 13:45:11 · 386 阅读 · 0 评论 -
JVM了解——类加载器
1. 案例SuperA代码如下:package com.junna.clazz;public class SuperA { static InnerB b = new InnerB(); static { System.out.println("SuperA"); } static class InnerB{ static { System.out.println("InnerBInnerBInnerB"); } public InnerB() { Syste原创 2021-11-18 09:40:25 · 129 阅读 · 0 评论 -
Java的IO流处理——简单总结知识点
举例读取文件内文本Demo1 public static void readFileByLine(String fileName) { File file = new File(fileName); InputStreamReader reader = null; BufferedReader bfreader = null; try { reader = new InputStreamReader(new .原创 2021-10-08 16:29:55 · 245 阅读 · 0 评论 -
垃圾回收——GC算法
文章目录一、垃圾对象的判定1)可达性分析法2)引用计数法二、垃圾回收算法1)标记-清除(Mark-Sweep)2)复制算法3)标记-整理/标记-压缩(Mark—Compact)4)分代收集算法三、GC收集器新生代收集器1)Serial2)ParNew3)Parallel Scavenge老年代收集器1)Serial Old2)Parallel Old3)CMSG1收集器一、垃圾对象的判定1)可达性分析法过程:从GC Roots开始向下查询,如果一个对象到任何一个GC Root对象都没有一个引用链相连原创 2021-06-29 11:15:49 · 202 阅读 · 0 评论 -
JVM——内存结构
文章目录运行时数据区线程共享区方法区什么式方法区堆线程独占区虚拟机栈局部变量表操作数栈动态链接方法出口本地方法栈程序计数器运行时数据区线程共享区方法区什么式方法区方法区,也称非堆(Non-Heap),又是一个被线程共享的内存区域。其中主要存储加载的类字节码、class/method/field等元数据对象、static-final常量、static变量、jit编译器编译后的代码等数据。另外,方法区包含了一个特殊的区域“运行时常量池”。加载的类字节码:要使用一个类,首先需要将其字节码加载到J原创 2021-06-25 11:05:02 · 213 阅读 · 0 评论
分享