深入java虚拟机
文章平均质量分 91
往前的
这个作者很懒,什么都没留下…
展开
-
第2章 Java内存区域与内存溢出异常
1、运行时数据区域1.1 程序计数器通俗讲就是工作开展什么位置了,每个线程都一个单独程序计数器,线程执行java方法,计数器指向字节码指令地址,执行native方法,计数器为空,它也是唯一没有规定OutOfMemoryError情况。1.2 java虚拟机栈执行方法会创建栈帧(Stack Frame) ,保存局部变量、操作栈、动态链接、方法出口,(可以这么认为,当前做的事情原创 2017-07-14 21:19:59 · 261 阅读 · 0 评论 -
第12章 Java内存模型与线程
1、概述衡量一个服务性能的高低好坏,每秒事务处理数(Transactions Per Second TPS)是最重要的指标之一,它代表一秒内服务端平均能响应的请求总数。2、硬件的效率与一致性处理器和内存不是同数量级,所以需要在中间建立中间层,也就是高速缓存,这会引出缓存一致性问题。在多处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一主内存(Main Memory),有可能操原创 2017-08-30 21:36:05 · 318 阅读 · 0 评论 -
第11章 晚期(运行期)优化
1、概述:虚拟机会根据代码执行情况,如果代码执行特别频繁,就将这段代码编译成本地平台相关的机器码,完成这个任务的编译器就是即时编译器(Just In Time Compiler)简称JIT编译器,涉及的虚拟机是指HotSpot虚拟机的即时编译器。2、HotSpot虚拟机内的即时编译器2.1 解释器与编译器解释器:程序可以迅速启动和执行,消耗内存小 (类似人工 成本地,到后期效率低)原创 2017-08-29 21:53:10 · 464 阅读 · 0 评论 -
第10章, 早期(编译期)优化
1、概述:编译过程的编译器:1、前端编译器:Sun的Javac、Eclipse JDT中的增量式编译器(ECJ) (.java文件变为*.class过程)2、JIT编译器:HotSpot VM 的C1、C2编译器(.class文件变成机器码的过程)3、AOT编译器:GNU Compiler for the java(GCJ)、Excelsior JET(.java文件直接变成机器码原创 2017-08-26 15:05:48 · 307 阅读 · 0 评论 -
第8章 虚拟机字节码执行引擎
8.1. 概述执行引擎是java虚拟机最核心的组成之一。 “虚拟机”是相对于“物理机”的概念,执行引擎在执行java代码的时候可能有解释执行和编译执行(通过即时编译器产生本地代码执行)。8.2 运行时栈帧结构栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构。栈帧包括 局部变量表、操作数栈、动态连接和方法返回地址等信息。对于执行引擎来说,活动线程中,只有原创 2017-08-05 15:51:13 · 238 阅读 · 0 评论 -
第7章 虚拟机类加载机制
1、概述:如何将类加载虚拟机中加载、验证、准备、解析、初始化、使用和卸载七个阶段虚拟机规范则是严格规定只有四种情况会立即对类进行初始化1)遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,使用new关键实例化对象的时候,读取或设置一个类的静态字段(被final修饰、已在编译器把结果放入常量池的静态字段除外)的时候,以及调用一个类原创 2017-07-26 21:47:22 · 262 阅读 · 0 评论 -
第6章 类文件结构
概述:类文件就是二进制和源码的中介其实java可以被编译成.class文件、JRuby,Groovy等都可以编译成.class文件,然后都java虚拟机上运行1、Class类文件的结构采用是8位字节为基础单位的二进制流,没有空隙,按顺序,Class 文件格式采用一种类似于C语言结构,分为无符号树和表。无符号数属于基本的数据类型,以u1 u2、u4、u8来分别代表1个字节、2原创 2017-07-26 18:28:19 · 1207 阅读 · 1 评论 -
第9章 类加载及执行子系统的案例与实战
1、字节码生成技术与动态代理的实现package com.jack;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class DynamicProxyTest { interface IHello {原创 2017-08-17 15:14:09 · 243 阅读 · 0 评论 -
第5章 调优案例分析与实践
概述:了解调优的思想1、高性能硬件上的程序部署策略如果堆的内存设置较大的时候,GC将会产生较大停顿,如果大文件不会在新生代而直接进入老生代,导致老生代内存被耗尽。在高性能硬件上部署程序,目前主要有两种方式:通过64位JDK来使用大内存使用若干个32位虚拟机建立逻辑集群利用硬件资源大内存就是在夜间某个时间内进行GC不会影响用户体验类型建立负载均衡来对于32位虚原创 2017-07-25 21:05:07 · 288 阅读 · 0 评论 -
第4章 虚拟机性能监控与故障处理工具
4.1 概述一切尽在掌控之中(是不是暴露啥),学习JDK提供哪些免费,被我们忽略的工具4.2 JDK的命令行工具用的最多的就是java.exe 和 javac.exe ,其实你打开bin下更多的工具在哪儿静静等着你召唤Sun JDK监控和故障处理工具jps : JVM Proccess Status Tool, 显示指定系统内所有的HotSpot虚拟机进程jstat:原创 2017-07-24 21:55:26 · 351 阅读 · 0 评论 -
第三章 垃圾收集器与内存分配策略
概述:垃圾收集(Garbage Collection GC) GC历史大于java历史,最早出现在Lisp语言程序计数器、虚拟机栈、本地方法栈三个区域随着线程而生,随线程而灭1、回收算法思路1.1 引用计数算法例如一个对象引用多少次,计数器就是多少,如果为0表示该对象不再用。弊端:难以解决对象之前的相互循环引用的问题代码package learn;public原创 2017-07-20 17:53:57 · 298 阅读 · 0 评论 -
第13章 线程安全与锁优化
1、概述如何实现“高效并发”,首先需要保证并发的正确性,然后在此基础上来实现高效。2、线程安全定义:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。2.1 java语言中的线程安全按照线程安全的“安全程度”由强至弱来排序,我原创 2017-08-31 20:23:16 · 233 阅读 · 0 评论