![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
文章平均质量分 75
Violet-Zhao
不忘初心,方得始终
展开
-
对象创建、布局、访问相关内容
在了解java内存区域以后,需要进一步了解对象是如何在堆中创建,分配内存以及如何进行定位访问。由于不同虚拟机对对象的操作存在差别,这里选取常用虚拟机hotspot中对象进行分析。1.对象如何创建?在语言层面上,对象的创建常见方式是new关键字进行创建,(当然,还有通过反射、反序列化、克隆),那么在jvm内部,jvm碰到new指令以后在内部是如何操作的?jvm碰到new指令执行流...原创 2018-06-11 15:39:34 · 208 阅读 · 0 评论 -
类加载过程
类加载过程包括加载、验证、准备、解析、初始化,下面将对这5个阶段进行详细的学习。1.加载加载是将二进制字节流加载到jvm方法区中,并生成一个Class对象,作为类的访问入口,在这一阶段主要完成的工作如下:通过类的全限定名获取类的二进制字节流 (没有限定二进制字节流就是class文件,所以可以通过多种方式获取二进制字节流,如文件,网络,数据库等)将字节流所代表的静态存储结构...原创 2018-06-26 22:06:23 · 680 阅读 · 0 评论 -
类加载时机
jvm运行时通过将需要的class文件加载到方法区中,并对其进行验证、准备、解析和初始化,最终将二进制字节流转换成jvm方法区中的java类型。jvm加载class文件与其他语言加载二进制文件不一样,jvm加载是懒加载,只有在需要使用到该class文件时才会进行加载。既然如此,class文件该何时加载,加载过程中需要完成的工作有哪些?1.类生命周期 以上步骤并非严格按照顺序执行,...原创 2018-06-26 18:25:15 · 293 阅读 · 0 评论 -
class文件结构
java语言具有平台无关性,因为有jvm的支持,编译过后的java代码可以在任意平台上运行。java语言经编译后变成class文件,class文件在jvm上运行。现在jvm添加对其他语言的支持,其他语言编译成class文件也可以在jvm上运行,所以,jvm不仅提供了平台无关性,还提供了语言无关性。在jvm规范中定义了class文件格式,所有能够在jvm上运行的class文件必须要满足jvm定...原创 2018-06-25 10:11:00 · 1107 阅读 · 0 评论 -
垃圾收集器
hotspot虚拟机中提供了多款垃圾收集器,每款收集器有它的特点以及适用范围,开发人员可根据对象生命周期特点,内存使用情况等使用参数选择合适的垃圾收集器。下面给出hotspot中所有虚拟机的结构图。这些虚拟机有些用于新生代垃圾手机,有些用于老年代垃圾手机,新生代垃圾收集器采用的都是复制算法,老年代垃圾手机采用的有标记-清除算法、标记-整理算法。 下面对这几种收集器做一个简单的总结...原创 2018-06-15 18:59:36 · 1038 阅读 · 0 评论 -
java内存区域
在学习jvm之前,觉得有必要先了解一下虚拟机是个什么操作。虚拟机有很多种,有常用的vmvare,我想学习linux指令,最好安装一个linux系统,但是我又不想安装双系统,怎么办,那就在vmvare中安装linux,仿佛多了一台计算机。 c,c++编译好的程序,换到另一台计算机上运行,可能会出错,而java程序,一次编译,到处运行,这是因为jvm的无比威力。所以什么是虚拟机?...原创 2018-06-08 22:11:08 · 180 阅读 · 0 评论 -
内存分配和回收策略
jvm提供的内存管理主要包括内存分配和内存回收,内存分配主要是在堆上分配,jvm将堆区划分为新生代:Eden区,2个survivor区,老年代,创建的对象主要分配在Eden区,也有大对象、长期存活的对象分配到老年代中。对象的分配与垃圾收集器组合以及jvm中设置的参数有关。下面将介绍几种常用的内存分配策略。1.对象优先在Eden区分配一般情况下,创建的新对象会直接分配到新生代的Ede...原创 2018-06-22 10:08:16 · 385 阅读 · 0 评论 -
垃圾收集算法
jvm中的垃圾收集算法有标记-清除法,复制法、标记整理法以及分代法,下面对这四种垃圾收集算法进行一个简单的描述。1.标记-清除法标记所有需要被回收的对象,然后再统一清除被标记的对象。其标记过程采用的是可达性分析算法。 不足:效率 标记和清除俩个过程的效率都不高,清除过程是将被标记的对象一个一个进行清除。 空间 由于被标记的对象分布在内存的各个地方,清除之后会产生大量的...原创 2018-06-13 12:24:39 · 446 阅读 · 0 评论 -
垃圾收集相关知识
在c或c++中,由开发人员创建对象并且手动释放对象。在java中,程序员不需要自己去释放对象,由jvm帮助我们去释放对象。jvm将java内存区域划分为方法区、堆、虚拟机栈、本地方法栈、程序计数器。其中,虚拟机栈、本地方法栈、程序计数器是随线程而生,随线程而灭。栈中所需的内存在类结构确定下来的时候就已经确定,程序计数器保存的是下一条指令的地址,所以只占一个内存空间。 而堆、方法区是线...原创 2018-06-13 11:25:25 · 167 阅读 · 0 评论 -
类加载器
在类加载过程中,第一步是将二进制字节流加载到jvm方法区中,从外部加载二进制字节流到jvm中,需要使用到加载器。加载器可以使用自定义加载器,也可以使用jvm提供的加载器。1.为何要使用类加载器类加载器的作用是从外部加载二进制字节流到jvm方法区,从外部加载东西到内部,自然需要传输工具。(懒加载)类加载是在程序运行期间进行的,属于懒加载,也就是jvm需要使用到某个类时,才会对其进...原创 2018-06-27 22:42:38 · 179 阅读 · 0 评论