jvm
文章平均质量分 50
everyD_struggle
任重而道远
展开
-
深入理解并发编程 - sun.misc.Unsafe
文章目录1. TODO1. TODO原创 2021-01-31 15:51:17 · 226 阅读 · 0 评论 -
理解字符串常量池(StringTable)
文章目录一、什么是StringTable?二、字符串的创建1. 字面量创建2. 拼接创建三、intern方法四、常量池的位置五、一些例子一、什么是StringTable?字面量方式创建的字符串,会放入 StringTable 中,StringTable 管理的字符串,才具有不重复的特性。而 char[],byte[],int[],String,以及 + 方式本质上都是使用 new 来创建,它们都是在堆中创建新的字符串对象,不会考虑字符串重不重复,这种字符串的缺点就是如果存在大量值相同的字符串,对内存原创 2020-08-29 21:48:05 · 1808 阅读 · 1 评论 -
对象的创建与访问
当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定。对象创建在方法区去寻找类的符号引用,并检查这个类是否被类加载过为新生对象分配内...原创 2020-05-05 14:33:54 · 172 阅读 · 0 评论 -
理解jvm故障处理工具
文章目录1. jps:虚拟机进程状况工具2. jstat:虚拟机统计信息监视工具3. jinfo:Java配置信息工具4. jmap:Java内存映像工具5. jhat:虚拟机堆转储快照分析工具6. jstack:Java堆栈跟踪工具性能监控和故障处理工具总结7. JConsole:Java监视与管理控制台8. JHSDB:基于服务性代理的调试工具9. VisualVM:多合-故障处理工具...原创 2020-04-25 17:00:18 · 270 阅读 · 0 评论 -
深入理解jvm-垃圾回收算法与垃圾回收器
书籍: 深入理解jvm文章目录1. 如何判断对象是否该回收?1.1 引用计数算法引用概念扩充(4种)1.2 可达性分析算法1.3 回收方法区2. 垃圾回收算法2.1 标记-清除算法2.2 标记-复制算法2.3 标记-整理算法3. Hotspot算法细节4. 垃圾收集器4.1 Serial收集器4.2 ParNew收集器4.3 Parallel Scavenge收集器4.4 Parallel...原创 2020-04-24 22:14:14 · 266 阅读 · 0 评论 -
深入理解并发编程-ReentranLock
本文为读书笔记,书籍为Java并发编程的艺术1.公平锁使用公平锁时,加锁方法lock()调用轨迹如下。1)ReentrantLock:lock()。2)FairSync:lock()。3)AbstractQueuedSynchronizer:acquire(int arg)。4)ReentrantLock:tryAcquire(int acquires)。在第4步真正开始加锁,下...原创 2020-04-17 17:11:00 · 397 阅读 · 0 评论 -
深入理解jvm-synchronized(线程安全的实现)
本文为读书笔记1. 实现方法-互斥同步(互斥同步属于一种悲观的并发策略)同步是指在多个线程并发访问共享数据时,保证共享数据在同一个时刻只被一条线程使用。互斥是实现同步的一种手段,临界区(CriticalSection)、互斥量(Mutex)和信号量(Semaphore)都是常见的互斥实现方式。互斥是因,同步是果;互斥是方法,同步是目的。在Java里面,最基本的互斥同步手段就是syn...原创 2020-04-17 15:11:06 · 285 阅读 · 0 评论 -
深入理解jvm-java内存模型(结合volatile)
1. 结构所有的变量存储在主内存每条线程都有自己的工作内存线程的工作内存保存了该线程所使用变量的主内存副本线程对变量的所有操作必须在工作内存中进行,不得直接操作主内存线程间变量的传递必须由主内存来交互完成2.内存间交互原子操作·lock(锁定):作用于主内存的变量,它把一个变量标识为一条线程独占的状态。·unlock(解锁):作用于主内存的变量,它把一个处于锁定状态的变量释...原创 2020-04-16 22:25:48 · 430 阅读 · 0 评论 -
深入理解jvm-后端编译与优化
本文为读书笔记1. 即时编译器热点代码某个方法或者代码块执行得特别频繁(递归),这些代码称为热点代码而讲热点代码编译成本地代码的后端编译器就称为即时编译器围绕文章开头提出的几个问题:1.为何HotSpot虚拟机要使用解释器与即时编译器并存的架构?当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即运行。程序启动后,随着时间的推移,编译器逐渐发挥作用,把...原创 2020-04-16 21:52:39 · 268 阅读 · 0 评论 -
深入理解jvm-泛型擦除与语法糖(拆箱装箱)
本文为读书笔记1. 泛型擦除擦除式泛型的实现几乎只需要在Javac编译器上做出改进即可,不需要改动字节码、不需要改动Java虚拟机,也保证了以前没有使用泛型的库可以直接运行在Java 5.0之上。泛型擦除的实现:擦除前:擦除后:可见:java的类型擦除是把T 在编译时直接抹去,编程类似于ArrayList list 这样的裸类型;而在调用的时候进行强制类型转换;但是问题...原创 2020-04-16 17:56:33 · 279 阅读 · 0 评论 -
深入理解jvm-栈帧&方法调用
本文为读书笔记1. 基本概念Java虚拟机以方法作为最基本的执行单元,“栈帧”(Stack Frame)则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈(VirtualMachine Stack)的栈元素。**基本组成:**局部变量表、操作数栈、动态连接、方法返回地址和一些额外的附加信息。在编译Java程序源码的时候,栈帧中需要多大的局部变...原创 2020-04-15 20:04:55 · 1054 阅读 · 0 评论 -
深入理解jvm-类加载过程
本文为读书笔记,个人觉得相比垃圾回收,这一部分是十分重要的,故做个留存笔记1.类的生命周期加载->验证->准备->解析->初始化->使用->卸载要点:加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的解析阶段在某些情况下可以在初始化阶段之后再开始类加载过程的第一个阶段“加载”的实际没有明确定义但六种情况必须立即对类进行“初始化” :1...原创 2020-04-14 22:04:16 · 722 阅读 · 0 评论