
JVM
lzcWHUT
这个作者很懒,什么都没留下…
展开
-
深入理解Java虚拟机(第二版) 第二章:Java内存区域与内存溢出异常
第二章 Java内存区域与内存溢出异常2.1 运行时数据区2.1.1 程序计数器2.1.2 Java虚拟机栈2.1.3 本地方法栈2.1.4 Java堆2.1.5 方法区2.1.6 运行时常量池2.1.7 直接内存2.2 HotSpot虚拟机对象探秘2.2.1 对象的创建2.2.2 对象的内存布局2.2.3 对象的访问定位2.1 运行时数据区2.1.1 程序计数器可以看做是当前线程所执行...原创 2019-05-14 11:29:06 · 293 阅读 · 0 评论 -
Java 如何有效地避免OOM:善于利用软引用和弱引用
Java 如何有效地避免OOM:善于利用软引用和弱引用 想必很多朋友对OOM(OutOfMemory)这个错误不会陌生,而当遇到这种错误如何有效地解决这个问题呢?今天我们就来说一下如何利用软引用和弱引用来有效地解决程序中出现的OOM问题。下面是本文的目录大纲: 一.了解 强引用、软引用、弱引用、虚引用的概念 二.进一步理解软引用和弱引用 三.如何利用软引用和弱引用解决OO...原创 2019-08-22 09:04:12 · 389 阅读 · 0 评论 -
强引用、弱引用、软引用、虚引用
1、强引用(StrongReference)强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下:Object o=new Object(); // 强引用当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。如果不使用时,要通过如下方式来弱化引用,如下:o=nu...转载 2019-07-30 14:29:38 · 227 阅读 · 0 评论 -
内存溢出和内存泄漏的区别、产生原因以及解决方案
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;...转载 2019-07-12 23:35:41 · 330 阅读 · 0 评论 -
访问者模式:java的动态绑定与双分派
java的动态绑定所谓的动态绑定就是指程执行期间(而不是在编译期间)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。java继承体系中的覆盖就是动态绑定的,看一下如下的代码:class Father { public void method(){ System.out.println("This is Father's method"); }} class Son1 ...转载 2019-05-24 11:17:07 · 196 阅读 · 0 评论 -
内存屏障底层原理
主题是什么?我写这个系列的博客主要目的是解析Disruptor是如何工作的,并深入了解下为什么这样工作。理论上,我应该从可能准备使用disruptor的开发人员的角度来写,以便在代码和技术论文[Disruptor-1.0.pdf]之间搭建一座桥梁。这篇文章提及到了内存屏障,我想弄清楚它们到底是什么,以及它们是如何应用于实践中的。什么是内存屏障?它是一个CPU指令。没错,又一次,我们在讨论...转载 2019-05-23 08:44:16 · 5785 阅读 · 2 评论 -
深入理解Java虚拟机(第二版) 第十二章:Java内存模型与线程
第十二章 Java内存模型与线程12.1 概述12.2 硬件的效率与一致性12.3 Java内存模型12.3.1 主内存与工作内存12.3.2 内存间交互操作12.3.3 volatile型变量12.3.4 对于long和double型变量的特殊规则12.3.5 JMM模型的三大特性12.1 概述因为CPU速度和其它设备之间的速度差别太大,比如磁盘IO、网络传输、数据库访问等等,如果不希望C...原创 2019-05-22 23:40:31 · 324 阅读 · 0 评论 -
深入理解Java虚拟机(第二版) 第三章:垃圾收集器与内存分配策略
第三章:垃圾收集器与内存分配策略3.1 概述3.2 判断对象是否已死3.2.1 再谈引用3.2.2 引用记数法(Reference counting)3.2.3 可达性分析算法(Reachability Analysis)3.2.4 对象的自救3.2.5 回收方法区3.3 垃圾收集算法3.3.1 标记—清除算法(Mark-Sweep)3.3.2 标记—整理算法(Mark—Com...原创 2019-05-17 17:05:23 · 228 阅读 · 0 评论 -
深入理解Java虚拟机(第二版) 第十一章: 晚期(运行期)优化
1、概述:虚拟机会根据代码执行情况,如果代码执行特别频繁,就将这段代码编译成本地平台相关的机器码,完成这个任务的编译器就是即时编译器(Just In Time Compiler)简称JIT编译器,涉及的虚拟机是指HotSpot虚拟机的即时编译器。2、HotSpot虚拟机内的即时编译器2.1 解释器与编译器解释器:程序可以迅速启动和执行,消耗内存小 (类似人工 成本地,到后期效率低)编译...转载 2019-05-22 16:59:45 · 142 阅读 · 0 评论 -
深入理解Java虚拟机(第二版) 第十章:早期(编译期)优化
早期-编译期-优化10.1 概述10.2 Javac编译器10.2.1 解析与填充符号表10.1 概述Java编译器可能是指一个前端编译器(其实叫“编译器的前端”更准备一些),把*.java文件转变成*.class文件的过程;也可能是指虚拟机的后端运行期编译器(JIT编译器,Just In Time Compiler)把字节码转变成机器码的过程;还可能是指使用静态提前编译器(AOT编译器,Ah...原创 2019-05-22 16:21:51 · 408 阅读 · 0 评论 -
深入理解Java虚拟机(第二版) 第九章:类加载及执行子系统的案例与实战
第九章 类加载及执行子系统的案例与实战9.1 概述9.2 Tomcat: 正统的类加载器架构9.3 OSGi:灵活的类加载器架构9.4 字节码生成技术与动态代理的实现9.5 Retrotranslator:跨越 JDK 版本9.1 概述在 Class 文件格式与执行引擎这部分中,用户的程序能直接影响的内容并不太多,Class 文件以何种格式存储,类型何时加载、如何连接,以及虚拟机如何执行字节码...原创 2019-05-21 17:42:27 · 288 阅读 · 0 评论 -
深入理解Java虚拟机(第二版) 第十三章:线程安全与锁优化
第十三章:线程安全与锁优化13.1 概述13.2 线程安全13.2.1 Java语言中的线程安全13.2.2 线程安全的实现方法13.1 概述直接站在计算机的角度去抽象问题和解决问题,称为面向过程的编程思想;站在现实世界的角度去抽象和解决问题,称为面向对象的编程思想。现实中的对象在一项工作进行期间,会被不停地中断和切换,对象的属性(数据)可能会在中断期间被修改和变“脏”,而这些事情在计算机世界...原创 2019-05-24 12:46:34 · 247 阅读 · 0 评论 -
深入理解Java虚拟机(第二版) 第八章:虚拟机字节码执行引擎
第八章 虚拟机类加载机制8.1 概述8.2运行时栈帧结构8.2.1 局部变量表8.2.2 操作数栈8.2.3 动态连接8.2.4 方法返回地址8.3 方法调用8.3.1 解析8.3.2 分派特征8.3.3 动态类型语言支持8.1 概述执行引擎是jvm最核心的部分,jvm是java虚拟机,有自己实现的指令集和执行引擎结构体系,能够支持那些不被硬件直接支持的指令集。执行引擎在不同的jvm实现中是...原创 2019-05-20 20:10:11 · 1019 阅读 · 0 评论 -
深入理解Java虚拟机(第二版) 第七章:虚拟机类加载机制
第七章 虚拟机类加载机制7.1 概述7.2 类加载的时机7.3 类加载过程7.3.1 加载7.3.2 验证7.3.3 准备7.3.4 解析7.3.5 初始化7.4 类与加载器7.4.1 类与类加载器7.4.2 双亲委派模型7.4.3 破坏双亲委派模型7.1 概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是...原创 2019-05-19 15:11:16 · 200 阅读 · 0 评论 -
深入理解Java虚拟机(第二版) 第六章:类文件结构
第六章 类文件结构6.1 概述6.2 Class类文件结构6.2.1 魔数与Class文件版本号6.2.2 常量池6.2.3 访问标志6.2.4 类索引、父类索引和接口索引集合6.2.5 字段表集合6.2.6 属性表集合6.1 概述Java虚拟机具有语言无关性的。而实现语言无关性的基础是虚拟机和字节码的存储格式,Java虚拟机已经不和包括Java语言在内的任何语言绑定。它只与“class”文件...原创 2019-05-19 11:26:50 · 358 阅读 · 0 评论 -
volatile 与处理器的嗅探技术
在《java并发编程的艺术》这本书中,关于volatile的内存原理本质的描述如下:有volatile变量修饰共享变量在编译器编译后,后多出一个“lock” 来(lock前缀指令相当于一个内存屏障,会强制将对缓存的修改操作写入主内存),该字符在多核处理器下回引发两个事件:1.将当前处理器缓存行的数据写回系统内存;2.这个写会内存的操作会使得其他处理器里缓存的该内存地址的数据无效。在该书籍第...转载 2019-09-04 15:36:58 · 2325 阅读 · 2 评论