JVM
文章平均质量分 76
浅汐王
这个作者很懒,什么都没留下…
展开
-
垃圾回收策略(二)
垃圾回收:即收集已经“死去”的对象。Java内存运行时数据区中程序计数器、虚拟机栈、本地方法栈三个部分的随线程而生,随线程而灭。每个栈帧中分配多少内存在类结构确定时就是可知的,因此这三个区域的内存分配和回收都具备确定性,不需过多考虑回收问题,因为方法结束或线程结束时,内存就回收了。而Java堆和方法区则不一样,一个接口中的多个实现类的内存可能不一样,一个方法中的分支需要的内存也可能不同,只有在...原创 2018-11-03 14:18:04 · 1092 阅读 · 0 评论 -
JDK命令(六)
jps(JVM Process Status):虚拟机进程状况命令工具jps命令格式:jps [options] [hostid]格式解释:jps可以通过RMI协议查询开启了RMI服务的远程虚拟进程状态,hostid为RMI注册表中注册的主机名。常用命令: jps -v 效果如Unix中ps -ef|grep java(tomcat)options选项表如图:...原创 2018-11-05 23:31:51 · 166 阅读 · 0 评论 -
什么是字节码指令?
字节码指令简介: Java虚拟机的指令由一个字节长度的、代表着某种特定含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。 由于Java虚拟机采用面向操作数栈而不是寄存器的架构,所以大多数的指令都不包含操作数,只有一个操作码。由于限制了Java虚拟机操作码的长度为一个字节,所以指令集的操作码总数不可能超过256条。字节码与数据...原创 2018-11-05 23:23:52 · 1999 阅读 · 0 评论 -
内存分配与回收策略(五)
回收策略:Minor GC Major GC/Full GC Minor GC:发生在新生代的GC,发生非常频繁,消耗时间短。Major GC:发生在老年代GC,消耗时间一般为新生代GC的10倍,甚至更多(1000倍)。Full GC:新生代+老年代 GC。一般情况MajorGC是由MinorGC触发,所以MajorGC一般(也有一些收集器直接进行Major GC)会伴随一次M...原创 2018-11-04 23:36:38 · 209 阅读 · 0 评论 -
新生代GC为什么快于老年代?
是由回收算法不一样决定的。minor gc是新生代的“复制”(Copying)算法:将现有的内存空间分为两快,每次只使用其中一块,在垃圾回收时将正在使用的内存中的存活对象复制到未被使用的内存块中,之后,清除正在使用的内存块中的所有对象,交换两个内存的角色,完成垃圾回收。 full gc的老年代,采取的“标记-整理”(Mark-Compact)算法,先需要从根节点开始对所有可达对象做一次标记,...原创 2018-11-04 23:35:28 · 1297 阅读 · 0 评论 -
HotSpot虚拟机对象详解
1. 对象的创建:当虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用是否已被加载、解析和初始化过,如果没有则会进行类加载过程。在类加载检查通过后,虚拟机给对象分配内存,对象所需的内存大小在类加载完成后便可确定。内存分配方式分为两种:一是“指针碰撞”,在Java堆中内存是绝对规整时(已用内存和空闲内存各占一边),通过改变分界点的指针为...原创 2018-11-03 00:24:42 · 426 阅读 · 0 评论 -
调优实践
MaxGCPauseMillis调优:前面介绍过使用GC的最基本的参数:-XX:+UseG1GC -Xmx32g -XX:MaxGCPauseMillis=200前面2个参数都好理解,后面这个MaxGCPauseMillis参数该怎么配置呢?这个参数从字面的意思上看,就是允许的GC最大的暂停时间。G1尽量确保每次GC暂停的时间都在设置的MaxGCPauseMillis范围内。 那G1是...原创 2018-11-04 20:24:30 · 2217 阅读 · 0 评论 -
G1(Gabage-First)收集器(详解)
G1是一款面向服务端应用的垃圾收集器,是从JDK1.7开始支持的。HotSpot开发团队赋予它的使命是未来可以替换JDK1.5中发布的CMS收集器,从局部看是基于“复制”算法实现的,意味着G1不会产生内存空间碎片。与其他GC收集器相比,G1最大的特点在于:可预测的停顿,这是G1相对于CMS的一大优势,降低停顿时间是G1和CMS共同的关注点,但G1除了追求低停顿外,还能建立可预测的停顿时间模型,能让...原创 2018-11-04 20:23:55 · 21686 阅读 · 1 评论 -
Java内存区域概况(一)
JVM虚拟机在执行Java程序过程中,会把所管理的内存划分为几个不同的数据区域(程序计数器、虚拟机堆、虚拟机栈、方法去、本地方法栈),统称为运行时数据区域。下图是JDK1.7及以前版本的图解:程序计数器(Program Counter Register)当前线程执行代码的行号指示器。字节码解释器通过改变程序计数器的值选取下一条要执行的字节码指令。分支、循环、跳转、异常处理、线程恢...原创 2018-11-02 22:49:57 · 273 阅读 · 0 评论 -
JVM的直接引用和符号引用
JVM在装载class文件的时候,会有一步是将符号引用解析为直接引用的过程。那么这里的直接引用到底是什么呢?对于指向“类型”【Class对象】、类变量、类方法的直接引用可能是指向方法区的本地指针。指向实例变量、实例方法的直接引用都是偏移量。实例变量的直接引用可能是从对象的映像开始算起到这个实例变量位置的偏移量。实例方法的直接引用可能是方法表的偏移量。子类中方法表的偏移量和父类中的方...原创 2018-11-06 21:14:33 · 31910 阅读 · 0 评论 -
垃圾收集器(四)
下图是HotSpot中垃圾收集器搭配使用方式:有连线说明可以搭配。Serial收集器:串行收集器是最古老,最稳定以及效率高的收集器。可能会产生较长的停顿。是一个单线程的收集器,它在进行垃圾收集时,必须暂停其他的所有的工作线程,直到收集结束。“Stop The World”这项工作是有虚拟机在后台自动发起和自动完成的,在用户不可见的情况下把用户的所有工作线程停掉,这对很多应用来说是难...原创 2018-11-04 00:38:04 · 1398 阅读 · 0 评论 -
常用垃圾收集算法(三)
标记-清除算法:最基础的收集算法“标记-清除”(Mark-Sweep)算法,算法分为“标记”和“清除”两个阶段,首先标记需要回收的对象,在标记完成后统一回收所有被标记的对象。之所以称为最基础的收集算法,是因为后续的算法都是基于这种思路并对其不足进行改进而得到的。不足:一个是效率问题,标记和清除两个过程的效率都不高。 另一个是空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太...原创 2018-11-03 16:42:44 · 175 阅读 · 0 评论 -
Class文件结构(七)
Class文件是平台无关性的基础之一。平台无关性和语言无关性。Java的一个非常著名的宣传口号:“一次编写,到处运行(Write Once,Run Anywhere)”。Sun公司以及其他虚拟机提供商发布了许多可以运行在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字节码,从而实现了程序的“一次编写,到处运行”。各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节...原创 2018-11-05 23:32:31 · 119 阅读 · 0 评论