
Java虚拟机
Living_Z
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
深入理解Java虚拟机 CentOS编译OpenJDK源码总结
首先楼主是在CentOS 6.5的版本进行编译的 其它版本会有些差异 建议使用CentOS编译的进行参考 1.安装mercurial 先更新list sudo yum update 安装mercurial sudo yum install mercurial 验证安装成功 hg命令显示帮助信息 hg 2.下载OpenJDK源码 hg clone http://hg.openjdk.j...原创 2019-03-14 14:20:48 · 1009 阅读 · 0 评论 -
深入理解Java虚拟机 晚期(运行期)优化总结
解释器与编译器 解释器与编译器两者各有优势:当程序需要迅速启动和执行的时候 解释器可以首先发挥作用 省去编译的时间 立即执行 在程序运行后 随着时间的推移 编译器逐渐发挥作用 把越来越多的代码编译成本地代码之后 可以获取更高的执行效率 HotSpot虚拟机中内置了两个即时编译器 分别称为Client Compiler和Server Compiler 或者简称为C1编译器和C2编译器(也叫Opto编...原创 2019-03-28 10:51:43 · 270 阅读 · 0 评论 -
深入理解Java虚拟机 插入式注解处理器实战总结
实战目标 通过阅读Javac编译器的源码 我们知道编译器在把Java程序源码编译为字节码的时候 会对Java程序源码做各方面的检查校验 这些校验主要以程序 写得对不对 为出发点 虽然也有各种WARNING的信息 但总体来讲还是较少去校验程序 写得好不好 我们将会使用注解处理器API来编写一款拥有自己编码风格的校验工具:NameCheckProcessor NameCheckProcessor的目标...原创 2019-03-28 10:25:46 · 752 阅读 · 2 评论 -
深入理解Java虚拟机 线程安全与锁优化总结
线程安全 “当多个线程访问一个对象时 如果不用考虑这些线程在运行时环境下的调度和交替执行 也不需要进行额外的同步 或者在调用方进行任何其他的协调操作 调用这个对象的行为都可以获得正确的结果 那这个对象是线程安全的” Java语言中的线程安全 按照线程安全的“安全程度”由强至弱来排序 我们可以将Java语言中各种操作共享的数据分为以下5类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立 1....原创 2019-04-01 10:24:44 · 246 阅读 · 0 评论 -
深入理解Java虚拟机 类文件结构总结
计算机只认识0和1 所以我们写的程序需要经编译器翻译成由0和1构成的二进制格式才能由计算机执行 平台无关性 Java虚拟机不和包括Java在内的任何语言绑定 它只与“Class文件”这种特定的二进制文件格式所关联 Class文件中包含了Java虚拟机指令集和符号表以及若干其他辅助信息 基于安全方面的考虑 Java虚拟机规范要求在Class文件中使用许多强制性的语法和结构化约束 但任一门功能性语言都...原创 2019-03-19 12:29:16 · 172 阅读 · 0 评论 -
深入理解Java虚拟机 虚拟机字节码执行引擎总结
执行引擎是Java虚拟机最核心的组成部分之一 虚拟机 是一个相对于 物理机 的概念 这两种机器都有代码执行能力 其区别是物理机的执行引擎是直接建立在处理器 硬件 指令集和操作系统层面上的 而虚拟机的执行引擎则是由自己实现的 因此可以自行制定指令集与执行引擎的结构体系 并且能够执行那些不被硬件直接支持的指令集格式 运行时栈帧结构 栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行...原创 2019-03-22 16:52:53 · 186 阅读 · 0 评论 -
深入理解Java虚拟机 自己动手实现远程执行功能实战总结
目标 首先 在实现“在服务端执行临时代码”这个需求之前 先来明确一下本次实战的具体目标 我们希望最终的产品是这样的: 不依赖JDK版本 能在目前还普遍使用的JDK中部署 也就是使用JDK 1.4~JDK 1.7都可以运行 不改变原有服务端程序的部署 不依赖任何第三方类库 不侵入原有程序 即无须改动原程序的任何代码 也不会对原有程序的运行带来任何影响 考虑到BeanShell Script或Java...原创 2019-03-25 12:46:58 · 689 阅读 · 0 评论 -
深入理解Java虚拟机 调优案例分析与实战总结
案例分析 1.高性能硬件上的程序部署策略 在高性能硬件上部署程序 目前主要有两种方式: 通过64位JDK来使用大内存 使用若干个32位虚拟机建立逻辑集群来利用硬件资源 对于用户交互性强 对停顿时间敏感的系统 可以Java虚拟机分配超大堆的前提是有把握把应用程序的Full GC频率控制得足够低 至少要低到不会影响用户使用 譬如十几个小时乃至一天才出现一次Full GC 这样可以通过在深夜执行定时任务...原创 2019-03-18 10:33:23 · 524 阅读 · 0 评论 -
深入理解Java虚拟机 虚拟机类加载机制总结
类加载的时机 类从被加载到虚拟机内存中开始 到卸载出内存为止 它的整个生命周期包括:加载(Loading) 验证(Verification) 准备(Preparation) 解析(Resolution) 初始化(Initialization) 使用(Using)和卸载(Unloading)7个阶段 其中验证 准备 解析3个部分统称为连接(Linking) 加载 验证 准备 初始化和卸载这5个阶段的...原创 2019-03-20 13:43:53 · 146 阅读 · 0 评论 -
深入理解Java虚拟机 虚拟机性能监控与故障处理工具总结
JDK的命令行工具 1.jps:虚拟机进程状况工具 可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier LVMID) 2.jstat:虚拟机统计信息监视工具 jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机...原创 2019-03-15 15:13:55 · 151 阅读 · 0 评论 -
深入理解Java虚拟机 垃圾收集器与内存分配策略总结
虚拟机如何判断对象是否存活 1.引用计数算法 给对象中添加一个引用计数器 每当有一个地方引用它时 计数器值就加1 当引用失效时 计数器值就减1 任何时刻计数器为0的对象就是不可能再被使用的 主流的Java虚拟机里面没有选用引用计数算法来管理内存 其中最主要的原因是它很难解决对象之间相互循环引用的问题 2.可达性分析算法 这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点 从...原创 2019-03-15 12:41:55 · 171 阅读 · 0 评论 -
深入理解Java虚拟机 OutOfMemoryError异常实战总结
1.OutOfMemoryError异常 测试代码 /** *VM Args:-Xms20m-Xmx20m-XX:+HeapDumpOnOutOfMemoryError *@author zzm */ public class HeapOOM{ static class OOMObject{ } public static void main(String[]args){ List<OOMObje...原创 2019-03-15 11:40:17 · 319 阅读 · 0 评论 -
深入理解Java虚拟机 Java内存模型与线程总结
Java内存模型 Java内存模型规定了所有的变量都存储在主内存(Main Memory)中(此处的主内存与物理硬件的主内存名字一样 两者也可以互相类比 但此处仅是虚拟机内存的一部分) 每条线程还有自己的工作内存(Working Memory 可与处理器高速缓存类比) 线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝 线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行 而不能直接...原创 2019-03-29 13:13:11 · 280 阅读 · 0 评论