JVM
文章平均质量分 80
FlyingZCC
Apache ShardingSphere Committer
GitHub: https://github.com/FlyingZC
Blog: https://flyingzc.github.io
展开
-
Java字节码增强
字节码增强技术是什么1.对现有字节码进行修改;2.或者 动态生成全新字节码文件.为什么需要字节码增强技术,能做什么字节码增强技术有哪些,分别的实现,优缺点![[20210831212739.png| 字节码增强技术]]ASM在指令层次上操作字节码.可以直接生成.class字节码文件.通过访问者模式操作字节码文件.访问者模式: 主要用于修改或操作一些数据结构比较稳定的数据.分为 core api (类似于xml中的sax方式,速度快)和 tree api(类似于xml中的dom方式).原创 2021-08-31 23:58:06 · 184 阅读 · 0 评论 -
MAT使用
MAT使用Eclipse Memory Analyzer 使用设置1.运行时堆内存配置/Applications/mat.app/Contents/Eclipse/MemoryAnalyzer.ini-Xmx1024m2.选项配置![[Pasted image 20210804140711.png]]Keep unreachable objects:如果勾选这个,则在分析的时候会包含dump文件中的不可达对象;Hide the getting started wizard:隐藏分析完成后原创 2021-08-09 00:06:44 · 1553 阅读 · 0 评论 -
G1的对象分配
G1的对象分配对象分配直接关系到内存的使用效率、垃圾回收的效率,不同的分配策略也会影响对象的分配速度.G1提供了两种对象分配策略:基于线程本地分配缓冲区(Thread Local Allocation Buffer,TLAB)的 快速分配 和 慢速分配.当不能成功分配对象时就会触发垃圾回收.对象分配概述为了提高效率,无论快速分配还是慢速分配,都应该在STW之外调用,即都应该尽量避免使用全局锁.把内存分配算法设计成几个层次,首先进行无锁分配,再进行加锁,从而尽可能地满足并行化分配。快速分配T原创 2021-05-31 23:19:58 · 1026 阅读 · 0 评论 -
G1新生代回收笔记
YGC算法概述YGC算法主要分为两部分:并行部分和其他部分。我们根据YGC的执行顺序来看一下整个收集过程的主要步骤。1)进行收集之前需要STW。2)选择要收集的CSet,对于YGC来说整个新生代分区就是CSet。3)进入并行任务处理:·根扫描并处理;处理过程会把根直接引用的对象复制到新的Survivor区,然后把被引用对象的field入栈等待后续的复制处理。·处理老生代分区到新生代分区的引用;首先会更新所有的代际引用,即更新RSet[1],然后从RSet出发,把RSet所在卡表对应的分区内存块中原创 2021-05-30 22:57:18 · 214 阅读 · 0 评论 -
G1 GC
G1G1 关注: 可控的停顿时间,在此基础上提高吞吐量.G1 没有 CMS 的碎片化问题(不那么严重),提供可控的停顿时间。若应用使用了较大的堆(如 6GB 及以上),还要求有较低的垃圾收集停顿时间(如 0.5 秒),选择 G1,放弃 CMS。G1 总览分代收集器将整个堆分为年轻代、老年代和永久代,每个代的空间是确定的。而 G1 将整个堆划分为一个个大小相等的 region,每一块的内存是连续的。和分代算法一样,G1 中每个块也会充当 Eden、Survivor、Old 三种角色,但是它们不是原创 2021-05-27 22:26:10 · 341 阅读 · 0 评论 -
JVM虚拟机指令
HelloWorld// getstatic: 获取静态字段.指令的操作码是0xB2,该指令需要一个操作数,该操作数是常量池中某个CONSTANT_Fieldref_info常量的索引。// 该指令表示获取System的out静态字段,该静态字段的类型为java.io.PrintStream。该指令执行完成后,操作数栈顶存放的就是System的out静态字段的引用 getstatic #2 <java/lang/System.out>// ldc 指令的操作码是0x12,该指令也需要一个原创 2021-04-27 22:43:43 · 460 阅读 · 0 评论 -
反射实现原理
反射的实现原理Java的反射机制允许我们运行时动态地调用某个对象的方法、新建对象实例、获取对象的属性等。Connected to the target VM, address: '127.0.0.1:49230', transport: 'socket'java.lang.Exception: test#0 at com.zc.srjvm.c06.ReflectionTest.foo(ReflectionTest.java:9) at sun.reflect.NativeMethodAccesso原创 2021-04-23 23:20:29 · 953 阅读 · 0 评论 -
Java字节码
Java字节码类型名称数量u4magic1u2minor_version1u2major_version1u2constant_pool_count1cp_infoconstant_poolconstant_pool_count - 1u2access_flags1u2this_class1u2super_class1u2interfaces_count1u2interfacesinterf原创 2021-04-21 00:57:07 · 261 阅读 · 0 评论 -
线程dump
blocked监视,红色,等待获取 synchronized 锁"thread-2" #12 prio=5 os_prio=0 tid=0x000000001c25c000 nid=0x2354 runnable [0x000000001d0ae000] java.lang.Thread.State: RUNNABLE at com.zc.z01demo.T23ThreadState....原创 2019-09-17 09:01:37 · 153 阅读 · 0 评论 -
深入理解Java虚拟机 读书笔记
内存区域程序计数器当前线程所执行的字节码的行号指示器.字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令.每条线程都需要有一个独立的程序计数器.如果线程正在执行的是一个 Java 方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是 Native 方法,这个计数器值则为空(Undefined).Java虚拟机栈Java虚拟机栈(Jav...原创 2019-06-22 11:18:42 · 254 阅读 · 0 评论