摘要:前言Java具备三种特性:封装、继承、多态。Java文件在编译过程中不会进行传统编译的连接步骤,方法调用的目标方法以符号引用的方式存储在Class文件中,这种多态特性给Java带来了更灵活的扩展能力,但也使得方法调用变得相对复杂,需要在类加载期间,甚至到运行期间才能确... 阅读全文
posted @ 2018-06-09 23:21 91vincent 阅读(221) 评论(0) 推荐(0) 编辑
摘要:在《JVM 之(1)运行时数据区》提到,虚拟机栈是描述Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。本篇主要分析局部变量表的原理结构。 局... 阅读全文
posted @ 2018-06-09 21:26 91vincent 阅读(398) 评论(0) 推荐(0) 编辑
摘要:类加载器 虚拟机设计团队把类加载阶段中“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的模块称为“类加载器”。类加载器分类 启动(Bootstra... 阅读全文
posted @ 2018-06-09 18:15 91vincent 阅读(170) 评论(0) 推荐(0) 编辑
摘要:在《JVM 之 (12) 类加载机制》一文中详细阐述了类加载的过程,并举了几个例子进行了简要分析,在文章的最后留了一个悬念给各位,这里来揭开这个悬念。建议先看完《JVM 之 (12) 类加载机制》这篇再来看这个,印象会比较深刻,如若不然,也没什么关系~~ 下面是程... 阅读全文
posted @ 2018-06-09 14:38 91vincent 阅读(105) 评论(0) 推荐(0) 编辑
摘要:1.概述 Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能。 ... 阅读全文
posted @ 2018-06-09 14:27 91vincent 阅读(153) 评论(0) 推荐(0) 编辑
摘要:加载和内存指令 记载和内存指令是用于将数据在栈帧中的局部变量表和操作数栈之间来回传输 将局部变量表加载到操作数栈:iload lload fload dload aload 将一个数值从操作数占存储到局部变量表: istore lfda 将一个常量加载到操作数栈: b... 阅读全文
posted @ 2018-06-09 14:25 91vincent 阅读(86) 评论(0) 推荐(0) 编辑
摘要:Class文件是一组以8位字节为基础单位的二进制流,包含多个数据项目(数据项目的顺序,占用的字节数均由规范定义),各个数据项目严格按照顺序紧凑的排列在Class文件中,不包含任何分隔符,使得整个Class文件中存储的内容几乎全部都是程序运行的必要数据,没有空隙。当遇到... 阅读全文
posted @ 2018-06-09 14:24 91vincent 阅读(141) 评论(0) 推荐(0) 编辑
摘要:1、Jconsole 从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM ... 阅读全文
posted @ 2018-06-06 14:11 91vincent 阅读(194) 评论(0) 推荐(0) 编辑
摘要:1.jps (Java Virtual Machine Process Status Tool) 用来查看基于HotSpot的JVM里面中,所有具有访问权限的Java进程的具体状态, 包括进程ID,进程启动的路径及启动参数等等,与unix上的ps类似,只不过... 阅读全文
posted @ 2018-06-05 18:34 91vincent 阅读(239) 评论(0) 推荐(0) 编辑
摘要:堆内存划分为 新生代(Eden空间、Survivor空间)和 老年代(Tenured/Old 空间)。1.对象优先在Eden分配大多是情况下,对象在新生代Eden区中分配。当Eden区中没有足够空间进行分配时,虚拟机将发起一次Minor GC-verbose:gc ... 阅读全文
posted @ 2018-06-05 12:50 91vincent 阅读(86) 评论(0) 推荐(0) 编辑