
Java
文章平均质量分 85
dhylanyu1
这个作者很懒,什么都没留下…
展开
-
Java-AQS(Abstract Queued Synchronizer)解析与源码分析
Java-AQS解析与源码分析概述分析AQS中的方法可重写的方法源码分析线程的2 种等待模式线程在队列中的状态枚举成员变量独占式同步状态的获取和释放获取释放共享式同步状态获取与释放锁的可重入公平锁和非公平锁概述Abstract Queued Synchronizer用来构建锁或者其他同步组件的基础框架,它使用了一个int 成员变量表示同步状态,通过内置的FIFO 队列来完成资源获取线程的排队工作。分析AQS 自身没有实现任何同步接口,它仅仅是定义了若干同步状态获取和释放的方法来供自定义同步组件使用原创 2021-08-16 10:40:30 · 262 阅读 · 0 评论 -
Java-ThreadLocal解析与源码分析
Java-ThreadLocal解析与源码分析解析源码解析ThreadLocal内存泄露分析解析ThreadLocal和Synchronized都用于解决多线程并发访问,synchronized 是利用锁的机制,使变量或代码块在某一时该仅仅能被一个线程訪问。而ThreadLocal 为每个线程都提供了变量的副本,使得每个线程在某一时间訪问到的并非同一个对象,这样就隔离了多个线程对数据的数据共享。Spring的事务就借助了ThreadLocal,Spring从数据库连接池取得一个Connection,将原创 2021-08-16 10:01:46 · 180 阅读 · 0 评论 -
JVM性能调优-调优原则
JVM性能调优-调优案例与实战JVM调优原则目的调优实战参数响应时间合理使用缓存JVM调优原则大多数需要GC调优的不是参数问题,而是代码问题大多数情况下,分析GC情况优化代码比优化参数多得多GC调优是最后的手段目的GC时间够小GC次数够少发生FullGC的周期足够长,时间合理,最好是不发生FullGC执行频率不高,不低于10分钟1次调优实战参数开启分析日志 -XX:+PrintGCDetails调整Metadata空间 -XX:MetaspaceSize=64m 减少F原创 2021-07-29 12:05:50 · 156 阅读 · 0 评论 -
JVM性能调优-内存溢出与泄露
JVM性能调优-类加载机制内存溢出原因内存溢出的方式内存泄露原因内存泄露的方式溢出和泄露避免浅堆(Shallow Heap)深堆(Retained Heap)IncomingOutgoing命令行工具jpsjstatjinfojmapjstack内存溢出原因申请内存时,没有足够的内存空间内存溢出的方式栈溢出(栈的默认大小是1M)堆溢出方法区溢出本地内存溢出:分配的本地内存大小大于JVM 的限制内存泄露原因申请内存后,无法释放已申请的内存内存泄露的方式长生命周期的对象持有短生命原创 2021-07-29 11:21:53 · 180 阅读 · 0 评论 -
JVM性能调优-类加载机制
JVM性能调优-执行系统与类加载机制概述加载验证准备解析初始化双亲委派模型启动类加载器扩展类加载器应用程序类加载器Tomcat类加载机制问题概述初始化的5种情况:遇到new、getstatic、putstatic 或invokestatic 这4 条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。这4 条指令的最常见的Java 代码场景是:1.1 使用new 关键字实例化对象的时候1.2 读取或设置一个类的静态字段(被final 修饰、已在编译期把结果放入常量池的静态字段除外)的时原创 2021-07-28 21:15:05 · 151 阅读 · 0 评论 -
JVM性能调优-垃圾回收及算法
JVM性能调优-垃圾回收及算法概述引用计数法可达性分析(Java)引用类型强引用软引用弱引用虚引用Minor GCFull GC垃圾回收算法复制算法标记-清除(Mark-Sweep)标记-整理(Mark-Compact)分代回收CMS过程:缺点:G1Young GCMixed GC过程特点概述引用计数法对象添加一个引用计数器,当对象增加一个引用时计数器加1,引用失效时计数器减1。引用计数为0 的对象可被回收。对象相互引用时,很难判断对象是否该回收。可达性分析(Java)通过一系列的GC Root原创 2021-07-28 17:26:07 · 196 阅读 · 0 评论 -
JVM性能调优-对象内存分配+Java泛型
JVM性能调优-对象内存分配概述对象的内存布局对象头实例数据对其填充对象的访问方式句柄直接指针堆内存分配策略Java泛型泛型类泛型接口泛型方法概述加载检查分配内存,具体是使用指针碰撞还是空闲列表要看采用的GC方式内存空间初始化(如默认值)设置(对象头、元数据、分代年龄)对象初始化(constructor)对象的内存布局对象头对象自身运行数据hashcodegc垃圾回收年龄锁状态标志线程持有的锁偏向线程ID偏向时间戳等等类型指针:对象是哪个类的实例拥有的实例数据原创 2021-07-28 16:12:56 · 138 阅读 · 0 评论 -
JVM性能调优-理解JVM内存区域+常量池问题
JVM性能调优-理解JVM内存区域概述程序计数器栈本地方法栈方法区堆JVM各版本内存区域变化直接内存问题概述线程私有(运行指令):程序计数器、虚拟机栈、本地方法栈线程共享(存储数据):堆、方法区(Java8去掉了)程序计数器唯一不会OOM指向当前线程正在执行的字节码指令的地址(行号)栈存储当前线程方法所需的数据、指令、返回地址-Xss 1M每个方法在执行的时候都会创建一个栈帧局部变量表操作数帧动态连接返回地址本地方法栈保存native方法的信息,调用native方法原创 2021-07-28 14:52:16 · 128 阅读 · 0 评论 -
Java 内存逃逸分析
Java 内存逃逸分析对象分配定义栈上分配标量替换锁消除开启对象分配Java对象一定是在堆上分配的吗?绝大多数的对象是在堆上分配的,但是也有例外。随着JIT即时编译器的出现,内存逃逸分析愈发成熟,栈上分配,标量替换,锁消除等优化技术也慢慢发展起来。Java是通过javac编译成字节码,然后类加载器将该字节码文件加载到内存,逐行解析并翻译成机器码执行,因此解释执行会稍微慢一点。而JIT会将频繁运行的代码定义为热点代码,将之编译成机器指令,加快运行。内存逃逸分析是JIT重要的优化技术。定义一个对原创 2021-07-19 10:30:37 · 691 阅读 · 0 评论 -
Java stream原理
Java stream原理题一级目录一级目录原创 2021-07-18 17:05:37 · 372 阅读 · 0 评论