- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1.JVM内存的分类程序计数器当前线程执行的代码的行号虚拟机栈
1. JVM 内存的分类
程序计数器:当前线程执行的代码的行号
虚拟机栈:
本地方法栈:
Java 堆:
方法区:
运行时常量池(属于方法区):
直接内存:
2. GC 标记对象的死活
A .引用计数法
给对象添加一个引用计数器,没当被引用的时候,计数器的值就加一。引用失效的时候减一,
当计数器的值为0 的时候就表示改对象可以被GC 回收了。
弊端:A-》B,B-》A ,那么AB 将永远不会被回收了。也就是引用有环的情况。
B.根搜索算法GC Roots Tracing
通过一个叫GC Roots 的对象作为起点,从这些结点开始向下搜索,搜索所走过的路径称为
引用链,当一个对象没有与任何的引用链相连的时候则改对象就可以被GC 回收回收了。GC
Roots 包括:java 虚拟机栈中引用的对象,本地方法栈中引用的对象,方法区中常量引用的
对象,方法区中静态属性引用的对象。
当一个对象没有出现在引用链的时候,对象的生命就被判了缓刑:如果对象没有重写finalize()
方法或者finalize()方法已经被执行了一次了,这时候对象在GC 来到时候一定会被回收了,
否则会进入一个F-Queue 队列,执行finalize()方法。
3. GC 回收算法
A .标记-清除法:标记出没有用的对象,然后一个一个回收掉。两个问题:效率和空间问题。
产生很多的内存碎片,怡然不可以使用。
B.复制算法: 按照容量,划分二个大小相等的内存区域,当一块用完的时候将存活的对
象复制过来。
C .标记-整理法:将存活的对象向前移动,连续起来,然后将端以外的内存区域全部清空。
D.划代收集算法:一般分为新生代和老年代,新生代一般使用复制算法,老年代使用 “标
记-清除”或者“标记-整理”。
Java 堆内存的分配策略:
1. Young 区
又分为Eden 区,survivior 1 和survivior 2 。
一般小型的对象都会在 Eden 区上分配内存,当内存不够时候发生minor GC(年轻代的GC),
将存活的对象拷贝到survivor 1 区域,(此时2 是空的),然后清空Eden
在清理survivor1 的时候将存活的拷贝到2 区域,长时间存活的可以晋升到old 区。
这里是停止-复制算法。
2.Old 区一般使用标记清除或者标记整理的方法进行垃圾回收。
4. Class 的加载过程
一个class 在内存中要经过七个阶段:加载,验证,准备,解析,初始化,使用.卸载
类加载过程:加载.验证.准备.解析.初始化
这个三个阶段称为连接过程
1.加载过程:
1) 通过一个全类限定名称来获取定义此类的二进制字节流.
2) 将这个字节流所代表的静态数据结构转化为方法区的运行时数据结构
3) 在java 堆生成一个代表这个类的java .lang.class 对象,作为方法区这些数据访问的入口。
2.验证过程:
确保二进制字节流中包含的信息符合当前虚拟机的要求,并且不会危害到虚拟机自身的安
全。
文件格式验证,元数据验证,字节码验证,符号引用验证,
3.准备过程:
为类变量分配内存并设置类变量初始值的阶段,这些内存都将在方法区中分配。
注意两点:1. 类变量指的是static 类型的变量,实例变量分配在堆内存,不在这初始化。
如果仅仅是一个static 变量,那么将会被初始化为0,要是final static ,则被初始化为指定的
数值。-==》书上原话是这样的,通常情况下将会被初始化为0 。Static 直到被初始化后才
会被初始化为指定的数值。
4.解析阶段:
虚拟机将常量池内的符号引用替换成直接引用的过程
符号引用- 以符号来描述引用的目标
直接引用-可以是指向目标的指针,相对偏移量,或者能间接定位到目标的句柄
5.初始化阶段
初始化阶段就是执行类构造器clinit方法的过程。
该方法是编译器自动收集类中的多有类变量的赋值动作和静态语句块中的语句合并而成。编
译器收集的顺序就是语句在源文件中出现的顺序,静态语句块只能访问到他之前的变量,定
义在他之前的变量只能赋值不能访问。
父类的《clinit》方法在子类的之前调用完毕
5. 类加载器
Class 和classloader 一同确立了class 在虚拟机中的唯一性。
Classloader 有两种:1.启动类加载器,由c++完成,属于虚拟机的一部分。2.所有其他类加载
器,由java 语言实现,全部继承自抽象类java.lang.ClassLoader
细分又可分为三类:
启动类加载器
扩展类加载器
应用程序类加载器
您可能关注的文档
- (1)流体在圆形管道中作层流流动,如果只将流速增加一倍,则阻力损失为.doc
- (+) 核外电子.PPT
- (1H06)计算机(97年7月18日十七版)勘误表P.5表中第四代执行速度10.doc
- (A)梅雨带来的雨量最多(B).ppt
- (B)PDA(C)超级电脑(D)-台北市私立十信高级中学.doc
- (Hz)电流形式低频(低周波).ppt
- (N)1.675×10-27kg电中性{{核内质子数=核电荷数=核外-温州二中.PPT
- (SPSS13.0)变量加权.ppt
- (A) 同源器官及趋异演化.PPT
- (mol),摩尔质量、气体摩尔体积.PPT
- 《建筑施工手册》(第四版)之第二册 15 滑动模板施工.pdf
- 2021年山东省莱芜市公共基础知识国家公务员模拟考试试题(含答案).pdf
- 2024年中考化学试题分类汇编:常见仪器及化学实验基本操作(第01期).pdf
- 2024年中考化学试题分类汇编:综合实验和科学探究题(第01期).pdf
- 西式面点师(中级)理论知识模拟题(含答案).pdf
- 四川省乐山市马边县2023-2024学年八年级上学期期末考试生物试题.pdf
- 山东滨州阳信县2024年中考数学模拟预测题(含解析).pdf
- 山东省济宁某中学2023-2024学年下学期七年级数学期末模拟试卷.pdf
- 山东省德州市陵城区2023-2024学年下学期期中考试八年级历史试题(解析版).pdf
- 光学综合-2023年中考物理选择题专项训练.pdf
文档评论(0)