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