JVM
荒诞离场?
切莫玩物丧志
展开
-
java对象是如何在JVM中创建过程和对象的内存布局
首先我们都知道创建一个对象可以使用new关键字直接把对象new出来,当然还可以使用(克隆,反序列化)。那么在虚拟机中又是怎么执行New这个操作的呢?虚拟机收到一条new指令时,首先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并检查这个符号是否已被加载、解析和初始化过了。如果没有,那么必须执行相应的类加载过程,在类加载检查通过后,接下来虚拟机将为新生对象分配内存,对象所需的大小...原创 2019-08-13 18:18:52 · 189 阅读 · 0 评论 -
JVM学习(一)
JVM成为java虚拟机,介绍就不用多说了。如果要学习jvm我们必须需要了解一下自己本地安装的jdk吧JVM分为两种模式:client和serverServer VM 是由jvm根据运行时的环境(操作系统的环境)自动判断mixed mode 混合模式(jvm是解释性语言也支持编译)jpsjinfo -flags 进程id-XX:MaxHeadSize 堆的最...原创 2019-08-12 12:16:05 · 159 阅读 · 0 评论 -
JVM之如何判断对象是否还存活
大家都知道JVM有垃圾回收机制,JVM会自动回收死去的对象。那么我们如何才能知道对象是否死亡(不再被任何途径使用的对象)呢?很多书上写到用引用计数算法。引用计数算法给对象添加一个引用计数器,每当有一个地方使用它时,计数器就会加1;当引用失效时,计数器减1;任何时刻计数器为0的对象就是不能再被使用的。这种方式无法解决的一个问题是对象之间的相互循环引用。 比如对象A和对象B都有字段in...原创 2019-08-13 22:52:25 · 261 阅读 · 0 评论 -
JVM垃圾收集器算法
要了解JVM的垃圾收集算法那么我们先看看各大平台的虚拟机操作内存有那些算法吧标记-清除算法最基础的算法,分为两个概念 标记和清除,首先标记出所有需要回收对象,在标记完成以后统一回收标记的对象。 缺陷:1 效率问题,标记和清除的效率都不高 2 空间问题,标记清除后会产生大量不连续的内存碎片,空间碎片较多会影响对较大对象的内存分配造成影响。复制算法为...原创 2019-08-14 12:08:58 · 129 阅读 · 0 评论 -
JVM垃圾收集器
前面既然说了JVM的集中垃圾回收集器的算法,那么现在可以来看一下垃圾收集器了。如果说垃圾收集器算法是方法论,那么垃圾收集器就是内存回收的具体实现。这里主要讨论的是jdk1.7以后的HotSpot虚拟机,采用G1收集器。上图展示了7个不同分代收集器,如果两个收集器间存在连线,就说明他们之间可以搭配使用。虚拟机所在的区域,则表示它们属于新生代收集器还是老年代收集器。 接下来逐一介绍这...原创 2019-08-14 19:00:29 · 111 阅读 · 0 评论 -
JVM类加载机制
之前我们看了Class文件中有那些内容,现在JVM如何加载这些Class文件呢?虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机使用的java类型,这就是虚拟机的类加载机制。java语言里,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略会稍微增加一些性能开销,但会为java应用提供高度的灵活性,Java语言里面的特性就...原创 2019-08-19 23:07:35 · 97 阅读 · 0 评论 -
JVM内存分配与回收策略
今天来分析一下JVM是如何给对象在堆内存分配内存的,接下来看一下几条最普遍的内存分配规则1 对象优先在Eden分配大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够的空间的时候,虚拟机将会发起一次Minor GC(新生代GC)。虚拟机提供了-XX:+PrintGCDetails这个收集器日志参数,告诉虚拟机在发生垃圾收集行为时打印内存回收日志。执行Minor GC操作时,会...原创 2019-08-15 21:40:23 · 109 阅读 · 0 评论 -
JVM的Class文件的结构
首先大家都直到java是可以跨平台的一种语言,是因为有JVM的存在,JVM不关系在它上面执行的是什么语言,JVM不和任何的语言绑定,它只与Class文件这种特定的二进制文件格式关联。Class文件包含了JVM指令集和符号以及若干其他辅助信息。Class文件是一组以8为字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有任何的分隔符,所以Class文件存储的...原创 2019-08-18 14:25:47 · 199 阅读 · 0 评论