自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 深入理解JVM(九)——早期(编译期)优化

从Sun Javac的代码来看,编译过程大致分为3个过程,分别是:解析与填充符号表过程插入式注解处理器的注解处理过程分析与字节码生成过程解析与填充符号表过程词法,语法分析词法分析是将源代码的字符流转变成标记(Token)集合,单个字符是程序编写过程的最小元素,而标记则是编译过程的最小元素,关键字,变量名,字面量,运算符都可以成为标记,如int a=b+2这段代码包含6个标记int,a,=,b

2017-07-29 17:02:58 311 1

原创 学习JEE规范,去看JBoss源码;学习类加载器,去看OSGI源码

学习JEE规范,去看JBoss源码;学习类加载器,去看OSGI源码

2017-07-29 13:02:25 441

原创 深入理解JVM(八)——字节码执行引擎

不用虚拟机,执行引擎在执行Java代码时,会有解释执行(通过解释器执行)和编译执行(通过及时编译器产生本地代码执行)两种选择。运行时栈帧结构栈帧用于支持虚拟机进行方法调用和方法执行的数据结构。栈帧存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面 从入栈到出栈的过程。一个线程中的方法调用链可能很长,很多方法都同时处于执

2017-07-29 12:31:17 394

原创 深入理解JVM(七)——虚拟机类加载机制

虚拟机类加载机制虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析,初始化,最终形成可以被虚拟机直接使用的Java类型,这就是Java的类加载机制。类的加载,连接,初始化是在程序运行时完成的。生命周期加载—->连接(验证->准备->解析)—->初始化—->使用—->卸载加载,验证,准备,初始化和卸载这5个步骤是确定的,类加载过程必须按照这个顺序。而解析阶段则不一定,某些情况下

2017-07-22 16:04:44 264

原创 深入理解JVM(六)——类文件结构——code

CodeJava程序中方法体中的代码经过Javac编译器处理之后,最终变成字节码指令存储在Code属性内。Code属性出现在方法表的属性集合之中,但不是所有的方法表都必须有,譬如接口或者抽象类。Code是Class文件中最重要的一个属性,如果把一个Java程序中的信息分为代码(Code,方法体里面的Java代码)和元数据(MetaData,包括类,字段,方法定义以及其它信息)两部分 类型 名

2017-07-22 13:09:36 992

原创 深入理解JVM(六)——类文件结构

Java诞生之初就有的口号,Write Once,Run AnywhereJava规范分为Java语言规范和Java虚拟机规范,Java实现平台无关性的基础是虚拟机和字节码存储格式,Java虚拟机不与包括Java在内的任何语言绑定,它只与Class文件这种特定的二进制文件格式关联时至今日,已经有很多语言运行在Java虚拟机之上,包括Groovy,JRuby,Jython,Scala等,只要他们通过编

2017-07-02 17:55:38 276

原创 深入理解JVM(五)——JVM调优 Eclipse调优

在开发,测试环境,我们可以通过JConsole或者VisualVM去监控Java程序的运行时,但是生产环境是不会给你安装这些应用的。JDK1.6之后,JMX管理默认都是开启的,所以你也可以通过JMX管理达到监控和调优的目的。这也是我下一阶段的工作一部分。大体的需求包括:显示虚拟机进程以及进程的配置,环境信息(jps,jinfo)监视应用程序的CPU,GC,堆,方法区以及线程信息(jstat,js

2017-07-02 14:34:39 604

原创 深入理解JVM(四)——各个版本提供的垃圾收集器

上一篇将的回收算法是内存回收的方法论,本篇讲垃圾收集器的具体实现,Java虚拟机规范并没有对齐做出规定和限制,所以不同厂商,不同版本的虚拟机,垃圾收集器有很大的区别。 收集器名称 区域 说明 Serial 新生代 单线程,GC时必须停止其它线程直到收集结束;JVM运行在client模式下新生代的默认收集器,简单有效;采用复制算法 ParNew 新生代 Serial收

2017-07-01 18:53:39 2427

原创 深入理解JVM(三)——垃圾收集器

需要了解GC吗?Q:需要了解GC和内存分配吗? A:当需要排查各种内存溢出,内存泄露问题时;当垃圾回收成为系统高并发的瓶颈时哪些内存需要回收?程序计数器,虚拟机栈,本地方法栈随着线程生而生,线程灭而灭,栈帧随着方法的进入和退出而进栈和出栈。基本上类结构确定下来就已知了。 Java堆和方法区则不同,只有运行时才知道要创建哪些对象,这部分内存的分配和回收是动态的。对象已死吗?引用计数算法给对象中添

2017-07-01 14:19:07 278

原创 深入理解JVM(一)——对象的创建

对象的创建对象的创建,在语言层面上,通常只是new这个关键字而已。(本章所讨论的对象限于普通Java对象,不包括数组和 Class对象)虚拟机遇到new指令时:检查这个指令的参数是否能在常量池定位到一个类的符号引用。检查这个符号引用代表的类是否已被加载,解析,初始化过。如果没有必须执行相应的类加载过程类加载检查后,虚拟机会为新生对象分配内存。对象所需的内存在类加载时可完全确定,为对象分配空间

2017-07-01 12:59:15 365

原创 深入理解JVM(一)——运行时的数据区域

Java与C++的围墙:内存动态分配,垃圾收集技术程序计数器当前线程所执行的字节码的行号指示器,通过改变这个计数器的值来选择下一条执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等依赖计数器。线程私有,唯一不会OutOfMemory的区域。执行Java方法时指向正在执行的虚拟机字节码,执行Native方法时为空。Java虚拟机栈描述方法执行的内存模型,每个方法执行的同时会创建一个栈帧。用于存储

2017-07-01 11:52:27 248

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除