- 博客(12)
- 问答 (3)
- 收藏
- 关注
原创 DepthJVM-类文件结构
1.无关性平台无关性、语言无关性各种平台虚拟机与所有平台统一使用的程序存储格式--字节码是构成平台无关性的基石。Java虚拟机不与任何语言绑定,只与"Class文件"这种特定的二进制文件相关联,任何语言都可以表示为一个能被Java虚拟机所接受的有效Class文件,虚拟机不关心Class文件的来源是何种语言2.Class类文件结构Class文件是一组以8位字节为基础单位的
2017-04-20 21:35:15 219
原创 DepthJVM-运行期优化
1.解释器和编译器当程序需要迅速启动和执行时,解释器首先发挥作用,省去编译时间,立即执行,在程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地代码后,获取更高的运行效率。当程序运行环境中内存资源限制较大时,可以使用解释执行节约内存,反之可以使用编译执行提高效率。解释器还可以作为编译器激进优化时的一个“逃生门”,让编译器根据概率选择一些大多数时候能提升运行速度的优化手
2017-04-20 21:34:19 259
原创 DepthJVM-编译期优化
1.Java编译器编译过程1.1 解析与填充符号表词法、语法分析:填充符号表:1.2 插入式注解处理器的注解处理过程用于处理注解,类似于一组编译器插件,可以读取、修改、添加语法树中的任意元素,如果对语法树进行了修改编译器将回到解析及填充符号表过程重新处理,直至没有修改位置,每一个循环称为一个Round(回环)插入式注解处理器初始化过程在initProcess
2017-04-20 21:33:31 327
原创 DepthJVM-线程安全与锁优化
线程安全与锁优化1、线程安全2、线程安全的实现3、自旋锁和自适应自旋4、锁消除5、锁粗化6、轻量级锁7、偏向锁
2017-03-29 17:02:55 469
原创 DepthJVM-Java内存模型与线程
1、内存交互主内存:线程共享的JVM部分内存工作内存:线程独有,线程对变量的所有操作均在工作内存中进行,线程间变量值传递需要通过主内存来完成交互操作:1.lock(锁定,作用于主内存变量,把一个变量标识为一个线程独占状态) 2.unlcok(解锁,作用于主内存变量,释放处于锁定状态的变量) 3.read(读取,作用于主内存变量,把一个变量值从主内存传输到线程的工
2017-03-29 17:02:30 308
原创 DepthJVM-虚拟机类加载机制
1、类加载时机仅加载直接引用的类(如:子类使用父类的静态字段,只初始化父类);有且仅有以下情况:1.new/getstatic/putstatic/invokestatic指令(Java场景:new对象、读取或设置静态字段、调用静态方法)2.java.lang.reflect包方法对类进行反射调用3.初始化一个类时,如果发现其父类还未初始化则先初始化父类4.
2017-03-29 17:01:49 177
原创 DepthJVM-垃圾收集器与内存分配策略
1、对象是否“存活”引用计数器:每个对持有一个计数器,被引用时加1,引用失效时减1,难以解决循环引用问题可达性分析:当对象到GC Roots没有引用链时表示该对象不可用GC Roots:枚举根节点,必须Stop The World;可以作为根节点的节点:1.虚拟机栈(本地变量表)中引用的对象 2本地方法栈中JNI引用的对象 3.方法区中类静态属性引用的对象 4.方法区中常量引用的对象
2017-03-29 17:00:26 300
原创 DepthJVM-Java内存区域与内存溢出异常
1.程序计数器:线程私有;记录线程执行字节码行号;如果执行Java方法计数器值为正在执行的虚拟机字节码执行地址,native方法值为空2.JVM栈:线程私有;OOM、SOF;栈帧存储局部变量表(编译期可知的基本数据类型、对象引用、returnAddress类型)、操作数栈、动态链接、方法出口等;为Java方法服务;方法执行过程就是栈帧从入栈到出栈的过程局部变量空间(Slot):long/d
2017-03-29 16:58:30 229
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人