
深入java虚拟机
文章平均质量分 91
往前的
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
第2章 Java内存区域与内存溢出异常
1、运行时数据区域 1.1 程序计数器 通俗讲就是工作开展什么位置了,每个线程都一个单独程序计数器,线程执行java方法,计数器指向字节码指令地址,执行native方法,计数器为空,它也是唯一没有规定OutOfMemoryError情况。 1.2 java虚拟机栈 执行方法会创建栈帧(Stack Frame) ,保存局部变量、操作栈、动态链接、方法出口,(可以这么认为,当前做的事情原创 2017-07-14 21:19:59 · 303 阅读 · 0 评论 -
第12章 Java内存模型与线程
1、概述 衡量一个服务性能的高低好坏,每秒事务处理数(Transactions Per Second TPS)是最重要的指标之一,它代表一秒内服务端平均能响应的请求总数。 2、硬件的效率与一致性 处理器和内存不是同数量级,所以需要在中间建立中间层,也就是高速缓存,这会引出缓存一致性问题。在多处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一主内存(Main Memory),有可能操原创 2017-08-30 21:36:05 · 358 阅读 · 0 评论 -
第11章 晚期(运行期)优化
1、概述: 虚拟机会根据代码执行情况,如果代码执行特别频繁,就将这段代码编译成本地平台相关的机器码,完成这个任务的编译器就是即时编译器(Just In Time Compiler)简称JIT编译器,涉及的虚拟机是指HotSpot虚拟机的即时编译器。 2、HotSpot虚拟机内的即时编译器 2.1 解释器与编译器 解释器:程序可以迅速启动和执行,消耗内存小 (类似人工 成本地,到后期效率低)原创 2017-08-29 21:53:10 · 518 阅读 · 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 · 337 阅读 · 0 评论 -
第8章 虚拟机字节码执行引擎
8.1. 概述 执行引擎是java虚拟机最核心的组成之一。 “虚拟机”是相对于“物理机”的概念,执行引擎在执行java代码的时候可能有解释执行和编译执行(通过即时编译器产生本地代码执行)。 8.2 运行时栈帧结构 栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构。栈帧包括 局部变量表、操作数栈、动态连接和方法返回地址等信息。 对于执行引擎来说,活动线程中,只有原创 2017-08-05 15:51:13 · 269 阅读 · 0 评论 -
第7章 虚拟机类加载机制
1、概述: 如何将类加载虚拟机中 加载、验证、准备、解析、初始化、使用和卸载七个阶段 虚拟机规范则是严格规定只有四种情况会立即对类进行初始化 1)遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,使用new关键实例化对象的时候,读取或设置一个类的静态字段(被final修饰、已在编译器把结果放入常量池的静态字段除外)的时候,以及调用一个类原创 2017-07-26 21:47:22 · 301 阅读 · 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 · 1245 阅读 · 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 · 275 阅读 · 0 评论 -
第5章 调优案例分析与实践
概述: 了解调优的思想 1、高性能硬件上的程序部署策略 如果堆的内存设置较大的时候,GC将会产生较大停顿,如果大文件不会在新生代而直接进入老生代,导致老生代内存被耗尽。 在高性能硬件上部署程序,目前主要有两种方式: 通过64位JDK来使用大内存使用若干个32位虚拟机建立逻辑集群利用硬件资源 大内存就是在夜间某个时间内进行GC不会影响用户体验 类型建立负载均衡来对于32位虚原创 2017-07-25 21:05:07 · 318 阅读 · 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 · 394 阅读 · 0 评论 -
第三章 垃圾收集器与内存分配策略
概述: 垃圾收集(Garbage Collection GC) GC历史大于java历史,最早出现在Lisp语言 程序计数器、虚拟机栈、本地方法栈三个区域随着线程而生,随线程而灭 1、回收算法思路 1.1 引用计数算法 例如一个对象引用多少次,计数器就是多少,如果为0表示该对象不再用。 弊端:难以解决对象之前的相互循环引用的问题 代码 package learn; public原创 2017-07-20 17:53:57 · 338 阅读 · 0 评论 -
第13章 线程安全与锁优化
1、概述 如何实现“高效并发”,首先需要保证并发的正确性,然后在此基础上来实现高效。 2、线程安全 定义:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。 2.1 java语言中的线程安全 按照线程安全的“安全程度”由强至弱来排序,我原创 2017-08-31 20:23:16 · 270 阅读 · 0 评论