![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 74
rickey17
这个作者很懒,什么都没留下…
展开
-
深入理解JVM(一)——运行时的数据区域
Java与C++的围墙:内存动态分配,垃圾收集技术程序计数器当前线程所执行的字节码的行号指示器,通过改变这个计数器的值来选择下一条执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等依赖计数器。线程私有,唯一不会OutOfMemory的区域。执行Java方法时指向正在执行的虚拟机字节码,执行Native方法时为空。Java虚拟机栈描述方法执行的内存模型,每个方法执行的同时会创建一个栈帧。用于存储原创 2017-07-01 11:52:27 · 256 阅读 · 0 评论 -
深入理解JVM(八)——字节码执行引擎
不用虚拟机,执行引擎在执行Java代码时,会有解释执行(通过解释器执行)和编译执行(通过及时编译器产生本地代码执行)两种选择。运行时栈帧结构栈帧用于支持虚拟机进行方法调用和方法执行的数据结构。栈帧存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面 从入栈到出栈的过程。一个线程中的方法调用链可能很长,很多方法都同时处于执原创 2017-07-29 12:31:17 · 402 阅读 · 0 评论 -
深入理解JVM(十一)——Java内存模型与线程
计算机运算的速度,与它的存储和通讯子系统相差太大,大量的时间花费在磁盘IO,网络通讯和数据库上。衡量一个服务性能的高低好坏,每秒事务处理数TPS是最重要的指标。对于计算量相同的任务,程序线程并发协调的越有条不紊,效率越高;反之,线程之间频繁阻塞或是死锁,将大大降低并发能力。硬件的效率与一致性绝大多数的运算任务不能只靠处理器计算就能完成的,至少要与内存交互,如读取运行数据,存储运算结果等,由于计算机的原创 2017-08-12 17:49:50 · 330 阅读 · 0 评论 -
深入理解JVM(十)——晚期(运行期)优化
对效率的追求是程序员天生的坚定信仰当虚拟机发现某个方法或代码块运行特别频繁时,就会把这些认定为热点代码(Hot Spot Code),为了提供热点代码的执行效率,运行时,虚拟机会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,JIT编译器)解释器与编译器许多主流的商用虚拟机都同时包含解释器和编译器,两者各有原创 2017-08-12 13:03:25 · 460 阅读 · 0 评论 -
深入理解JVM(七)——虚拟机类加载机制
虚拟机类加载机制虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析,初始化,最终形成可以被虚拟机直接使用的Java类型,这就是Java的类加载机制。类的加载,连接,初始化是在程序运行时完成的。生命周期加载—->连接(验证->准备->解析)—->初始化—->使用—->卸载加载,验证,准备,初始化和卸载这5个步骤是确定的,类加载过程必须按照这个顺序。而解析阶段则不一定,某些情况下原创 2017-07-22 16:04:44 · 273 阅读 · 0 评论 -
深入理解JVM(六)——类文件结构——code
CodeJava程序中方法体中的代码经过Javac编译器处理之后,最终变成字节码指令存储在Code属性内。Code属性出现在方法表的属性集合之中,但不是所有的方法表都必须有,譬如接口或者抽象类。Code是Class文件中最重要的一个属性,如果把一个Java程序中的信息分为代码(Code,方法体里面的Java代码)和元数据(MetaData,包括类,字段,方法定义以及其它信息)两部分 类型 名原创 2017-07-22 13:09:36 · 1141 阅读 · 0 评论 -
深入理解JVM(六)——类文件结构
Java诞生之初就有的口号,Write Once,Run AnywhereJava规范分为Java语言规范和Java虚拟机规范,Java实现平台无关性的基础是虚拟机和字节码存储格式,Java虚拟机不与包括Java在内的任何语言绑定,它只与Class文件这种特定的二进制文件格式关联时至今日,已经有很多语言运行在Java虚拟机之上,包括Groovy,JRuby,Jython,Scala等,只要他们通过编原创 2017-07-02 17:55:38 · 283 阅读 · 0 评论 -
深入理解JVM(九)——早期(编译期)优化
从Sun Javac的代码来看,编译过程大致分为3个过程,分别是:解析与填充符号表过程插入式注解处理器的注解处理过程分析与字节码生成过程解析与填充符号表过程词法,语法分析词法分析是将源代码的字符流转变成标记(Token)集合,单个字符是程序编写过程的最小元素,而标记则是编译过程的最小元素,关键字,变量名,字面量,运算符都可以成为标记,如int a=b+2这段代码包含6个标记int,a,=,b原创 2017-07-29 17:02:58 · 323 阅读 · 1 评论 -
深入理解JVM(五)——JVM调优 Eclipse调优
在开发,测试环境,我们可以通过JConsole或者VisualVM去监控Java程序的运行时,但是生产环境是不会给你安装这些应用的。JDK1.6之后,JMX管理默认都是开启的,所以你也可以通过JMX管理达到监控和调优的目的。这也是我下一阶段的工作一部分。大体的需求包括:显示虚拟机进程以及进程的配置,环境信息(jps,jinfo)监视应用程序的CPU,GC,堆,方法区以及线程信息(jstat,js原创 2017-07-02 14:34:39 · 622 阅读 · 0 评论 -
深入理解JVM(四)——各个版本提供的垃圾收集器
上一篇将的回收算法是内存回收的方法论,本篇讲垃圾收集器的具体实现,Java虚拟机规范并没有对齐做出规定和限制,所以不同厂商,不同版本的虚拟机,垃圾收集器有很大的区别。 收集器名称 区域 说明 Serial 新生代 单线程,GC时必须停止其它线程直到收集结束;JVM运行在client模式下新生代的默认收集器,简单有效;采用复制算法 ParNew 新生代 Serial收原创 2017-07-01 18:53:39 · 2445 阅读 · 0 评论 -
深入理解JVM(三)——垃圾收集器
需要了解GC吗?Q:需要了解GC和内存分配吗? A:当需要排查各种内存溢出,内存泄露问题时;当垃圾回收成为系统高并发的瓶颈时哪些内存需要回收?程序计数器,虚拟机栈,本地方法栈随着线程生而生,线程灭而灭,栈帧随着方法的进入和退出而进栈和出栈。基本上类结构确定下来就已知了。 Java堆和方法区则不同,只有运行时才知道要创建哪些对象,这部分内存的分配和回收是动态的。对象已死吗?引用计数算法给对象中添原创 2017-07-01 14:19:07 · 284 阅读 · 0 评论 -
深入理解JVM(一)——对象的创建
对象的创建对象的创建,在语言层面上,通常只是new这个关键字而已。(本章所讨论的对象限于普通Java对象,不包括数组和 Class对象)虚拟机遇到new指令时:检查这个指令的参数是否能在常量池定位到一个类的符号引用。检查这个符号引用代表的类是否已被加载,解析,初始化过。如果没有必须执行相应的类加载过程类加载检查后,虚拟机会为新生对象分配内存。对象所需的内存在类加载时可完全确定,为对象分配空间原创 2017-07-01 12:59:15 · 372 阅读 · 0 评论 -
学习JEE规范,去看JBoss源码;学习类加载器,去看OSGI源码
学习JEE规范,去看JBoss源码;学习类加载器,去看OSGI源码原创 2017-07-29 13:02:25 · 454 阅读 · 0 评论