虚拟机
文章平均质量分 70
xionglingjun
这个作者很懒,什么都没留下…
展开
-
Java虚拟机第二章2.2 学习笔记
Java运行时数据区 1、程序计数器:是一小块内存空间,是当前线程所执行的字节码的行号指示器(每个线程都有一个)。因为Java多线程中,线程轮流切换并分配处理器执行时间,实际上一个处理器在一个时间点只能执行一条指令。所以当线程切换时,为了使程序能继续恢复到正确的执行位置,就需要程序计数器告诉我们当前程序执行到哪里了。 2、Java虚拟机栈 是Java方法执行的内存模型:每个方法在执行的同时会创原创 2017-11-07 17:27:35 · 220 阅读 · 0 评论 -
第7章 虚拟机类加载机制7.1~7.3
7.1概述 虚拟机把类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 类加载、连接和初始化是在类的运行期间完成,虽然会增加一些开销,但是提高了灵活性。例如:编写一个面向接口的应用程序,可以等到运行时再指定其实际的实现类。或类的增强,都是使用了在运行期类加载的特性。 7.2类加载的时机原创 2017-11-14 20:01:03 · 219 阅读 · 0 评论 -
虚拟机 第六章 类文件结构
6.2 无关性的基石 实现语言无关性的基础是虚拟机和字节码存储格式。各种语言都可以通过对应编译器转成class文件在虚拟机运行。 6.3class类文件的结构 class类文件对应唯一一个类或接口的定义信息,类或接口并不定都定义在文件里(也可以通过类加载器直接生成类或接口) class文件是以8字节为基础单位的二进制流 ,各个数据项目严格按照顺序紧凑排列在class文件中。当数据项超过8位字原创 2017-11-09 21:48:03 · 164 阅读 · 0 评论 -
虚拟机3.6 内存分配与回收策略
对象主要分配在Eden区,如启用TLAB,将优先在TLAB分配。 3.6.1 对象优先在Eden分配 如果Eden区没有足够空间,则发起一次Minor GC. -XX:+PrintGCDetails 可设置打印手机日志参数。原创 2017-11-09 17:06:35 · 226 阅读 · 0 评论 -
虚拟机3.5 垃圾收集器
HotSpot虚拟机的垃圾收集器 3.5.1 Serial收集器 特征‘Stop the World’,GC时需停止其他所有线程,且用户不知情,体验不好,简单高效,没有线程交互的开销,在Client模式下的jvm收集几十兆到一两百兆的新生代停顿时间一般在100ms以内,单个CPU下效果可以。 3.5.2ParNew收集器 Serial收集器的多线程版本。 是Server模式下首选的新生代原创 2017-11-09 16:37:38 · 182 阅读 · 0 评论 -
虚拟机3.4 HotSpot算法实现
HotSpot算法实现原创 2017-11-09 11:58:41 · 226 阅读 · 0 评论 -
虚拟机3.3垃圾收集算法
3.3.1 标记-清除算法 先标记、再清除。缺点是标记和清除的效率不高,容易留下内存碎片,在分配较大对象时不得不再次进行GC。 3.3.2 复制算法 将内存两等分,每次使用其中一半,在GC前,将存活的对象从A复制到另一半B,然后将A全都清空。不会有碎片,但是使用率低。 用这种算法可以回收新生代,新生代98%‘朝生夕死’,将内存分为三块,第一块80%空间存放新生代,第二块10%空间存放Surv原创 2017-11-08 17:43:54 · 265 阅读 · 0 评论 -
虚拟机垃圾收集器与内存分配策略3.2
如何确定对象是否存活 1、通过计数器确定 2、通过GC Roots看是否可达 可以作为GC Roots的对象有: ·虚拟机栈中引用的对象 ·方法区中类静态属性引用的对象,常量引用的对象 ·本地方法栈JNI引用的对象 3.2.3再谈引用 有一些‘鸡肋’对象,在内存充足时保留,在内存不足时回收 强引用strong:普通的new Object( ) 软引用soft :SoftRef原创 2017-11-08 17:21:35 · 183 阅读 · 0 评论 -
Java虚拟机第二章2.4 实战:OutOfMemoryError异常
目的: ①验证各个运行时区域存储的内容、 ②内存溢出异常时,可根据异常信息判断异常区域,什么代码可能导致该异常以及解决方法 2.4.1 Java堆溢出 Java堆存储创建的对象实例,只要不断创建对象,并且保证GC Roots到对象可达,不让对象被GC,到达足够数量后,发生内存溢出异常。 堆的最小值参数 -Xms 最大值参数-Xmx设置成一样,即可避免堆自动扩展, -XX:+HeapDu原创 2017-11-07 21:15:20 · 168 阅读 · 0 评论 -
Java虚拟机第二章2.3 学习笔记
一、对象的创建 a、类加载检查 虚拟机接收到‘new’指令后,会先去常量池找这个类的符号引用,并确定这个类是否完成类的加载、解析、初始化。如果没有,则完成类的加载。 b、分配内存 在Java堆中分配内存(指针碰撞和空闲列表两种方式分配) 指针碰撞:指在方法堆中被使用内存在一起,空闲内存在另一处,即内存规整。中间有指针将其分开。 空闲列表:方法堆中已使用内存和空闲内存交错分布,即内存不规整原创 2017-11-07 18:02:01 · 214 阅读 · 0 评论 -
虚拟机7.4 类加载器 及 9.2.2OSGi
7.4.1 类与类加载器 比较两个类是否相等的两个条件:同一个类加载器加载、两个类来源于同一个class文件。public class ClassLoaderTest { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessExc原创 2017-11-21 16:06:06 · 200 阅读 · 0 评论