
JVM学习笔记
文章平均质量分 85
调活
这个作者很懒,什么都没留下…
展开
-
Java内存区域与内存溢出异常
对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写分配对的delete/free代码(C++中的内存释放方式),不容易出现内存泄漏和内存溢出的问题,由虚拟机管理内存,这一切看起来都很美好。不过,正因为Java程序员把内存控制权利交给了Java虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎么使用内存的,那么排查错误将会成为一项异常艰难的工作。1.原创 2016-05-11 17:34:11 · 675 阅读 · 0 评论 -
高效并发-Java内存模型和线程
1:Java内存模型1.1:主内存和工作内存 Java内存模型规定了所有变量(包括了实例字段、静态字段和构成数组对象的元素)都存储在主内存中, 每条线程有自己的工作内存,线程的工作内存中保存了被该线程调用的变量的主内存副本拷贝,线程对变量的所有操作(读取、赋值)都必须在工作内存下进行。1.2:内存间的交互操作 八种原子操作:lock、unlock、read、load、use、assign原创 2016-07-30 00:55:07 · 580 阅读 · 0 评论 -
程序编译与代码优化-晚期(运行期)优化
1:Hotspot虚拟机内的即时编译器1.1:解释器与编译器 当程序需要快速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行;在程序运行后,随着时间的推移,编译器发挥着作用,把越来越多的代码编译成本地代码之后,可以获得更高的执行效率。 Hotspot编译器有两个即时编译器,分别称为Client Compiler和Server Compiler,或者简称为C1和C原创 2016-07-30 00:43:12 · 796 阅读 · 0 评论 -
程序编译与代码优化-早期(编译期)优化
1:概述前端编译器:Sun的Javac、Eclipse JDT中的增量式编译器(EJC)JIT编译器:Hotspot VM的C1,C2编译器AOT编译器:GNC Compiler for the Java(GCJ)、Excelsior JET 本章先介绍第一种前端编译器,也是大家都认可的编译器。2:Javac编译器 源码编译自OpenJdk7,从Sun Ja原创 2016-07-29 17:27:26 · 703 阅读 · 0 评论 -
虚拟机类加载机制
1:类加载的时机 类从被加载到虚拟机内存中开始,到卸载出内存为止,他的整个生命周期包括:加载(loading)、验证( Verification)、准备(preparation)、解析(resolution)、初始化( initialization)、使用(using)、卸载(unloading)七个阶段。 下面的五中情况必出触发类的初始化阶段。遇到new、getstatic、pu原创 2016-07-16 18:31:23 · 269 阅读 · 0 评论 -
类加载及执行子系统的案例与实践
1:案例分析1.1 Tomcat:正统的类加载器架构 一个功能鉴权的Web服务器,需要解决的问题:部署在同一服务器上的两个Web应用程序所使用的Java类库可以实现相互隔离。服务器需要尽可能的保证自身的安全不受部署的Web应用程序影响。支持Jsp应用的Web服务器,大多数都要支持HotSwap功能。 对于Tomcat5.X的版本,存在common、server、shared、和应原创 2016-07-23 11:26:42 · 628 阅读 · 0 评论 -
JVM垃圾回收器
### 1. **概述** JAVA的内存回收的原理是作为JAVA开发者必须要了解的,因为:当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要去对JVM的自动GC做必要的监控和调节。2. JVM是如何判断对象已死引用计数法 此方法很简单,判断效率也高,在大多数情况下都是不错的算法,也有一些比较成功的案例。但是主流的JVM原创 2016-05-14 17:40:17 · 560 阅读 · 0 评论 -
虚拟机类文件结构
1:Class文件的结构1.1:Class类文件的结构 class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。当遇到需要占用8位字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。 C原创 2016-07-14 22:49:20 · 464 阅读 · 1 评论 -
虚拟机性能监控与故障处理工具
1:概述 给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里所说的数据包括:运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore)、堆转储快照(heapdump/hprof文件)等。2:JDK命令行工具 Sun JDK的主要监控和处理工具 名称 主要作用 jps JVM Process Status To原创 2016-07-11 20:32:11 · 290 阅读 · 0 评论 -
虚拟机字节码执行引擎
1:概述 在Java虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,这种概念模型成为各种虚拟机执行引擎的统一外观(Facade)。不同的虚拟机,可能通过解释器执行或者编译器产生本地代码执行,或者包含几个不同级别的编译器执行引擎。2:运行时栈帧结构 栈帧是用户支持虚拟机进行方法调用和方法执行的数据结构,他是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量原创 2016-07-19 21:52:15 · 331 阅读 · 0 评论 -
高效并发-线程安全与锁优化
1:线程安全1.1:Java语言中的线程安全不可变:被final修饰。绝对线程安全**相对线程安全:**Java语言中,大部分的线程安全类都属于这种类型,例如Vector、HashTable、Collections的 synchronizedCollection()方法包装的集合线程兼容:对象本身不是现场安全的,但可以通过在调用端通过正确的使用同步手段来保证在并发环境下安全的使用。线程对立原创 2016-07-30 11:24:31 · 1620 阅读 · 0 评论