Understanding the JVM
ChuckLin
轮子爱好者与总结狂热分子
展开
-
线程安全
#线程安全与锁优化##如何定义线程安全?当多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境的调度和交替执行,也不需要额外的同步措施,或者在调用方法进行任意其他的协调操作的情况下每次调用这个对象的行为都可以获得正确的结果,则该对象是线程安全的。##1、Java中的共享数据可分为五种:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。不可变:只要一个不可变对象被正确构建出来...原创 2019-02-17 11:20:57 · 99 阅读 · 0 评论 -
垃圾收集
#Java虚拟机之垃圾收集##1、对象存活判定算法引用计数算法:记录对象的被引用个数,引用计数为0的对象应该被回收,实现简单,但很难解决相互引用的问题。根搜索算法:从GC Roots节点往下搜索,如果不存在到该节点的引用链则对象应该被回收,根搜索算法是主流的判定算法。###方法区类对象存活判定标准:I.该类无实例对象II.class loader已经被回收III.class...原创 2019-02-17 11:21:12 · 160 阅读 · 0 评论 -
内存区域
#Java虚拟机之内存区域##1、Java有5个运行时数据区域方法区、堆、虚拟机栈、本地方法栈和程序计数器。###方法区线程共享区域,存放已被虚拟机加载的类信息、常量信息、静态信息等,而常量信息会存放在方法区的运行时常量池中。###堆线程共享区域,存放虚拟机创建的类实例对象。###虚拟机栈线程私有区域,每当调用一个方法便会在虚拟机栈中创建一个方法栈,包含局部变...原创 2019-02-17 11:21:27 · 185 阅读 · 0 评论 -
class文件格式
#虚拟机之类文件结构##1、Java实现语言无关性的基石:虚拟机和字节码存储格式字节码存储指使用8位字节编码来描述程序内容并存储起来。##2、.class文件结构###Class文件一组以8位字节为基础单位的二进制流,其格式采用一种类似于c语言结构体的伪结构来存储,该伪结构只有两种数据类型:无符号数和表无符号数属于基本的数据类型,以u1,u2,u4,u8来分别代表1个字节、...原创 2019-02-17 11:21:40 · 1392 阅读 · 0 评论 -
编译期
#Java虚拟机之编译期及其优化##1、有三种可能的编译期I.前端编译器将.java文件转换成.class文件的过程II.虚拟机的后端运行期编译器(JIT编译器:Just In Time Complier)把字节码转换成机器码的过程III.静态提前编译器(AOT编译器:Ahead Of Time Complier)直接把.java文件转换成本地机器代码的过程而一般认知中的...原创 2019-02-17 11:21:55 · 381 阅读 · 0 评论 -
类加载
#虚拟机之类加载机制当我们编写完程序,生成了.class文件,再编译成.java文件,接着我们便要开始执行这个程序,那么虚拟机把文件加载进入并生成类结构数据放置再内存中这个过程是什么样的呢?##1、加载的时机除了主动引用类会触发类加载外,引用子类继承自父类的静态字段会触发父类加载。I.主动引用①当使用显式代码并生成了new,getstatic,putstatic,invokest...原创 2019-02-17 11:22:06 · 92 阅读 · 0 评论 -
字节码执行
#虚拟机之字节码执行##1、字节码执行从栈帧说起栈帧就是Java虚拟机里执行由字节码编译成的机器代码的地方,包含两个结构:局部变量表和操作栈。局部变量表时一组变量值的存储空间,代码里用到的变量值都会放到局部变量表中,其最小单位为slot,每一个slot都是可复用的,而没被复用或清空的slot对象仍存在关联时,该slot不会被GC回收。实例方法中第一个即第0位索引slot是“this”参...原创 2019-02-17 11:22:17 · 789 阅读 · 0 评论 -
运行期
#Java虚拟机之运行期及其优化在前面对编译期的介绍中我们提到了运行期,实际上运行期也是编译期的一种,是将字节码转化为机器代码的过程,但我们一般把前端编译期称为编译期,因此为了区分,将这一过程叫做运行期。##1、解释执行和编译执行执行字节码的两种选择:解释执行:将字节码一行一行解释成指令流去执行,执行指令前不耗时间且不生成中间本地代码但执行效率低编译执行:将字节码以方法为单位解释...原创 2019-02-17 11:22:29 · 385 阅读 · 0 评论 -
线程模型
#Java线程及线程内存模型##1、说线程从线程的实现说起线程在操作平台上有三种实现方式:使用内核线程实现方式、使用用户线程实现方式和混合方式使用内核线程实现方式:使用内核线线程高级接口——轻量级进程也就是线程的一对一线程模型[轻量级线程(LWT-Light weight Thread):内核线程(KLT-Kernal Thread)=1:1],各种线程操作由内核通过操纵调度器进行系统调...原创 2019-02-17 11:22:39 · 536 阅读 · 0 评论