jvm
文章平均质量分 70
David_lou
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
《深入理解JVM》11-锁
根据java的内存模型引发的问题,数据竞争(data race),就是我们平常说的线程并发问题。线程并发的三大特性:可见行, 原子性, 有序性。遵循并发的这三大特性,我们要求线程在操作共享变量的时候要保证自己写入的内容要被其他线程读取到,并且保证写操作的操作一次执行完成,不可分割。并且执行过程的操作保证有序不被重排序。那JVM怎么保证并发的三大特性呢?锁JVM中使用锁保证并发的三大特性,编程时通常使用Synchronized 同步原语Synchronized同步实例..原创 2020-10-16 12:17:05 · 372 阅读 · 0 评论 -
《深入理解JVM》10-垃圾回收
本系列的第七篇写过一次垃圾回收,今天看起来优点脏乱差,贻笑大方。这节课是对郑雨迪老师的课程总结,希望对大家有点帮助。在第五节的时候我们已经总结过JVM的内存设计了就是上面这张图,相比大家对这个图已经熟记于心了,我们知道新生成的对象都会被分配到堆这块区域,但是随着系统的不断运行,堆内的对象越来越多,这个时候就要清理一下,回收无用的对象的内存空间,分配给新创建的对象。这就是垃圾回收机制,Java语言能够如此的风靡有很大一部分原因是JVM自带了优秀的垃圾回收器,让开发人员不用关注内存空间分配的问题。原创 2020-10-15 20:25:44 · 427 阅读 · 0 评论 -
《深入理解JVM》9-如何实现反射
在本系列的第8节,我们总结了一下jvm怎么执行方法调用,是在类中维护一个方法表,指向的是方法的实际内存地址。查找内存地址的执行时间不通,可以划分为静态绑定和动态绑定。那么反射是怎么执行的呢 public void invokeTest() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { Class deClazs = Demo.class; Me原创 2020-10-15 16:57:35 · 373 阅读 · 0 评论 -
《深入理解JVM》9-jvm是如何处理异常的
上一节总结了方法调用,在类信息中的方法表中会标记目标方法的地址信息,这个地址信息一开始是符号引用,比如(类名+方法名+参数+返回参数)符号。在运行时必须要解析为实际的内存地址,那么这个过程是分为动态绑定和静态绑定,动态绑定也可以根据单态缓存来提高性能。这一节我们来了解一下异常处理的流程。jvm的异常体系Error:特别严重且无法修复的异常Exception:可以挽救的异常try-catch:在方法执行到RuntimeException时,如果有异常处理代码(try-catch)时就会查看原创 2020-10-15 16:25:34 · 343 阅读 · 0 评论 -
《深入理解JVM》8-jvm怎么执行方法调用
上面我们讲到类加载的过程分为三步:加载:查找读取class文件 链接:验证,准备,解析三个阶段,在准备阶段会给静态属性分配空间,并且生成方法表 初始化:执行<clinit>方法,执行静态语句块,并且给静态属性赋值那么我们把类加载到JVM的方法区后,怎么执行的方法呢,之前我们说到,调用方法的时候,我们会把目标方法生成java方法栈帧,这个栈帧包含可执行代码,参数数组等信息。那么就会产生一个问题:class Father{ abstract void sayHi();原创 2020-10-14 21:50:55 · 241 阅读 · 0 评论 -
《深入理解JVM》7-类加载
从Class文件到类的过程要经过加载- 链接- 初始化三个过程。根据上一节讲到的内容,java语言中分为基本类型和引用类型基本类型是虚拟机预先定义好的,引用类型分为数组-类-接口。数组也是虚拟机直接生成的,只有类和接口对应的是字节流(操作码流)操作码可以是class文件形式,也可以是网络上读取,也可以是机器内部生成。我们以常见的class文件为例。加载查找类文件,并读取字节码到内存双亲委派机制jvm提供了默认的三个类加载器启动类加载器(boot strap classL原创 2020-10-14 16:30:24 · 309 阅读 · 0 评论 -
《深入理解jvm》6-java的基本类型
上一节讲到了jvm中代码执行的过程,class文件被加载到方法区,需要执行的时候,会生成java方法栈的栈帧。然后提供给解释执行器进行命令翻译。java语言中有几个基本类型,boole/byte/short/char/int/long/float/double。jvm提供基本类型的初衷是为了提高计算速度和节省内存空间,java语言中有基本类型和引用类型两大类基础类型在堆中存储的长度分别为:boolean 1字节 byte 1字节 short 2字节 char 2字节 int 4字..原创 2020-10-14 15:33:51 · 203 阅读 · 0 评论 -
《深入理解jvm》5-java代码是怎么运行的
深入理解jvm系列是对郑雨迪老师在极客时间的课程深入拆解java虚拟机的笔记,想要查看完整课程的可以点击前面的链接,需要购买的同学可以扫面下方的二维码大家都知道java代码都是运行在java虚拟机上的,那么到底代码怎么样执行的呢?下面两个图帮大家有个总体的认识java的代码需要编译成class文件,class文件保存的是java的操作码(opcode),操作码又被称为java字节码,因为每条java的操作码都是一个字节。java的操作码可以被反汇编成人类能读懂的指令:# 最左列是偏移;中间原创 2020-10-14 11:39:33 · 241 阅读 · 0 评论 -
【深入理解java虚拟机】第4集--class汇编文件初识
java代码被编译成class文件,class文件的结构分为几部分1:文件基本信息(大小,修改时间,MD5)2:版本号,访问标志(public/private)3:常量池(constant pool)文件中出现的单词,数字等4:方法区(所有的方法,包括默认生成的构造方法)5:方法区的异常表(异常范围,异常类型,异常处理)Classfile /Users/david/Des...原创 2019-12-18 20:12:37 · 374 阅读 · 0 评论 -
【深入理解java虚拟机】第3集-动态代理的原理之CGLIB
上面一篇文章JDK动态代理的原理讲到Java内部的JDK动态代理的原理,这一集讲一下CGLIB的原理CGLIB生成代理类的工厂:Enhancer看demopublic class EnhancerFactoryTest { /** * 生成新的代理 * @param obj * @return */ public static ...原创 2019-11-05 15:36:41 · 286 阅读 · 0 评论 -
【深入理解java虚拟机】第2集-JDK动态代理的原理
java有两种动态代理一:JDK动态代理:Proxy二:CGLIB动态代理:Enhancer动态代理的实质是利用字节码工具,生成新的代理类,替换原始的类。我们首先看JDK代理模式创建代理对象需要入参 ClassLoader,被代理的对象的接口数组,一个新的InvocationHandler。看demopublic class ProxyFactoryTest {...原创 2019-11-05 14:41:44 · 348 阅读 · 0 评论 -
【深入理解java虚拟机】第1集--Java内存区域和java内存模型
首先我们清楚【内存区域】和【内存模型】是两个不一样的概念。当时我电面阿里的时候,面试官让我讲讲内存模型的理解,我巴拉巴拉说了一通方法区-堆分区,垃圾算法,面试官耐心的听我说完就把电话挂了。【内存区域】对应的是jvm进程。jvm启动之后,自身是一个大的进程,操作系统会根据jvm的内存配置参数分配给jvm进程相应大小的内存区域,对于32位操作系统的限制,单个进程最大的内存分配是2G(书上写的,不知...原创 2018-10-30 14:12:02 · 270 阅读 · 0 评论
分享