Jvm浅析

    以下内容为菜鸟本人阅读相关博客文章,自我总结的一些关于Jvm的相关知识,第一次使用csdn记录东西,图相关并不是太会弄,主要是当做个人笔记存放这里,同时希望有不足和错误的地方,大牛们多多指正。觉得有帮助的朋友就当是我们的交流分享。
    得嘞,各位,第一篇csdn博客热乎出炉啦!!!!
    Jvm中文java虚拟机.是虚拟的计算机,能够将程序员的代码翻译成jvm所安装的平台能识别的指令从而在其上执行的虚拟计算机

####################################################################
Jvm的组成
类加载器 —加载类进jvm
执行引擎 —执行字节码命令或者本地方法
寄存器 —线程独享
内存空间
栈内存 statck — 线程独享
堆内存 heap —线程共享
方法区 —包含了运行时常量
本地方法接口 —调用本地方法库到本地方法栈
等。。。还有哪些组成部分,目前不清楚只了解到上边这些

  ##################################################################

Jvm类加载的过程
载入
这一阶段将不同来自不同地方的字节码(可能是.class文件,jar包,网络等)转化成二进制的字节流加载到内存中
验证
验证二进制字节流是否符合jvm字节码规范,符合的才能被jvm正确执行
准备
对类变量也就是静态变量 分配内存并初始化 0 null false。。
解析
将常量池中符号引用转化为直接引用,编译时,java的类并不知道所引用的其他类的实际地址,都是同过com.abc的字面量符号引用的。在解析阶段实现找到引用类的实际地址
初始化
在准备阶段对类变量进行了默认赋值,那么在初始化阶段就是给类变量赋予程序期望的值得阶段就是执行累的构造器方法的时候

#################################################################
类加载器
任何一个类都需要通过它的类加载器和这个类本身来确定他在jvm中的唯一性,也就是说同一个类加载器不同,那么他们 要是不相等的
启动类加载器
扩展类加载器
应用类加载器
自定义加载器
所谓加载器也是类
双亲委派机制
如果一个类收到了被加载的请求时,他会向上委托上一级加载器加载,以此类推至最顶层的类加载器,若是上层加载其中没有能加载的该类的加载器
那么由当前类加载器完成加载,这样的机制还出就是保证同一个类会被相同的加载器加载 保证类唯一性和jvm的稳定性
Jvm内存
pc寄存器:用于存储每个线程下一步要执行的jvm命令,如果命令是本地的寄存器中什么也不存 线程独享
jvm栈内存:是与线程相伴而生的或者说是与方法相伴而生而灭的,存储的是基本类型的变量,部分方法返回值,以及非基本类型的地址引用 线程独享
方法区:也是成为持久代,用来存储类的相关信息(名称,修饰符),静态变量,常量,以及一些属性字段和方法的信息 线程共享。其中运行时常量池也是方法区的一部分存储编译期产生的字面量和符号引用的
堆内存:jvm的堆内存是用来存储java几乎所有对象的地方,new 反射,clone都可以产生一个新的对象,堆内存分为新生代和老生代两部分(方法区也可以划分进来叫持久代,此处不划进来了),新生代分为伊甸园区和幸存区,幸存区采用标记复制的回收策略所有内存上又划分为两部分使用
每个新生的对象都是在在伊甸园诞生的除非这个对象是个巨婴那就直接扔给老生代了,jvm的会内存各个区域进行扫描,已查看有哪些对象已经死掉了就拉走
回收了,扫描频率最高的就是就是伊甸园了,再其次是幸存区,最后是老生代,哦对了 默认的内存分配比例大小为伊甸园:幸存区:老生代=8:1:1
怎么判断一个对象已经死了尼-就是没有人在引用他了。jvm有个GCroots什么之类的方法可以判断这个对象是否还有别人引用他。
在新生代发生的gc是minorGC,在老生代发生的GC是FullGc,,为什么要避免频繁的GC尼因为 堆内存是线程共享的,当你创建对象的时候就要枷锁而这样
资源开销是很大的。
几种回收算法
标记清除
会产生时间碎片
效率低
标记复制
将存储分为两部分使用,一半一半的用,当一块用完了,将这块上边的存货对象一起复制到另一块上,然后统一清除这半块,虽然解决了内存碎片的问题但对内存的利用率低同时若是存活对象数量较多每次复制也是个影响效率的过程 --这个用在新生代(幸存区就是这么用的)新生代的对象朝生夕死存活少
标记整理
死去的对象会标记,让后会将这些对象压缩到一个边上统一处理掉,这样不会产生内存的碎片了 —老生代的对象存活率高,所以采用标记整理

		############################################################	

垃圾回收器
历经发展都是在发生垃圾回收时 stop world的暂停时间做优化,现在用的G1回收器整体上是标记整理局部标记复制(符合上边的描述),同时
优先处理更具备回收价值的区域。
目前个人对jvm的了解就这些。理论原理偏多,关于内存等的操作设置需要时百度可查。额,很不喜欢复制粘贴原文内容,全部为个人手码读后感,所以有错别字或者对技术予以表达不都准确的还请诸位见谅和批评指出。敬礼啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值