随笔分类 -  jvm

摘要:定义 java虚拟机字节码执行引擎是jvm最核心的组成部分之一,它做的事情很简单:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。在不同的虚拟机实现里,执行引擎在执行java代码的时候可能会有解释执行和编译执行两种选择,也可能两者兼备。 运行时栈帧结构 java字节码执行引擎在 阅读全文
posted @ 2017-01-24 17:44 叫我家宝 阅读(520) 评论(1) 推荐(0)
摘要:在看java虚拟机字节码执行引擎的时候,里面提到了java虚拟机里调用方法的字节码指令有5种: 前4种很容易理解,但是第5种笔者本人从这段描述上无法理解这个invokedynamic到底是什么东西,于是决定从实践入手来剖析一下。 invokedynamic本身是字节码命令,我们想直接调用这个命令只能 阅读全文
posted @ 2017-01-23 16:26 叫我家宝 阅读(7247) 评论(0) 推荐(2)
摘要:定义 虚拟机把描述类的数据从Class文件加载到内存,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 类加载的过程 类的加载过程分为5个步骤:加载、验证、准备、解析、初始化 其中的验证、准备、解析阶段又统称为连接,如下图所示。 在这5个阶段中,加载、验证、准备、初始化这4个阶 阅读全文
posted @ 2017-01-19 11:56 叫我家宝 阅读(268) 评论(0) 推荐(0)
摘要:JVM指令助记符 变量到操作数栈:iload,iload_,lload,lload_,fload,fload_,dload,dload_,aload,aload_ 操作数栈到变量:istore,istore_,lstore,lstore_,fstore,fstore_,dstore,dstor_,a 阅读全文
posted @ 2017-01-12 17:25 叫我家宝 阅读(1475) 评论(0) 推荐(0)
摘要:通用配置 -Xms4096m //最小堆内存 -Xmx4096m //最大堆内存 -Xmn2048m //年轻代大小 -XX:SurvivorRatio=8 //设置eden区和survivor区的内存大小比例,例如8就代表eden和两个survivor区的比例是8:1:1 -XX:MaxTenur 阅读全文
posted @ 2017-01-11 15:15 叫我家宝 阅读(928) 评论(0) 推荐(0)
摘要:jps jps -mlv //列出正在运行的虚拟机进程 jstat jstat -gc pid //监视java堆状况 显示列名 具体描述 S0C 年轻代中第一个survivor(幸存区)的容量 (字节) S1C 年轻代中第二个survivor(幸存区)的容量 (字节) S0U 年轻代中第一个sur 阅读全文
posted @ 2017-01-09 14:36 叫我家宝 阅读(249) 评论(0) 推荐(0)
摘要:要做JVM内存垃圾回收首先要明确两个问题: 1.哪些内存需要回收 jvm内存可以分为两类: 对于线程独占内存区域来说,他们的回收时机是非常确定的,在方法结束或线程结束的时候回收即可。 对于线程共享区域里的堆和方法区两个区域,都可以进行垃圾收集,但是方法区的收集效率远低于堆,因此java虚拟机规范中不 阅读全文
posted @ 2017-01-04 19:36 叫我家宝 阅读(197) 评论(0) 推荐(0)
摘要:1.对象的创建 Java是一门面向对象语言,在运行过程中无时不刻不在创建对象。从语言层面,创建对象仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象仅限于普通java对象,不包含数组和Class对象等)的创建又是怎么样的过程呢? 1.1类加载检查 虚拟机遇到一条new指令的时候,首先将去 阅读全文
posted @ 2016-12-29 17:02 叫我家宝 阅读(233) 评论(0) 推荐(0)
摘要:学习JVM第一个要了解的就是JVM的内存区域。 Java虚拟机在运行时会从操作系统内存中划分一部分出来作为JVM内存,而JVM内存又划分为以下几个区域: 大体上可以分为两种: 线程共享数据区 该类型的数据区,多个线程共用一个数据区。 线程私有数据区 该类型的数据区,每个线程都拥有自己独立的数据区。 阅读全文
posted @ 2016-12-28 23:05 叫我家宝 阅读(210) 评论(0) 推荐(0)