JVM
weixin_43115433
这个作者很懒,什么都没留下…
展开
-
垃圾回收算法和垃圾回收器
垃圾回收算法**标记清除算法: 标记所有要回收对象,标记结束后统一回收。标记清除分别效率较低,造成大量碎片。复制算法: 将空间一分为二,每次用其中一块内存,将不需要的回收的对象复制到另外一块内存上,回收时将原来的半块区域全部回收。比较适合年轻代3.标记整理算法: 标记需要回收的对象,将不需回收的对象移向一端,然后清楚端界外的内存。比较适合老年代。分代收集算法:将堆分为年轻代和老年代...原创 2019-06-19 09:56:54 · 155 阅读 · 0 评论 -
happen before
先行发生原则(Happens-Before)是判断数据是否存在竞争、线程是否安全的主要依据。先行发生是Java内存,模型中定义的两项操作之间的偏序关系,如果操作A先行发生于操作B,那么操作A产生的影响能够被操作B观察到。口诀:如果两个操作之间具有happen-before关系,那么前一个操作的结果就会对后面的一个操作可见。是Java内存模型中定义的两个操作之间的偏序关系。常见的happen-b...原创 2019-07-04 20:18:30 · 369 阅读 · 0 评论 -
简述虚拟机栈的各个部分
每一个方法从调用开始到执行完成的过程,就对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。 每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。局部变量表: 局部变量表是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量。操作数栈:在方法执行的过程中,会有各种字节码指向操作数栈中写...原创 2019-07-01 20:26:14 · 579 阅读 · 0 评论 -
对象的内存布局
对象的内存布局:对象头 对象头包括两部分信息,一部分是存储对象运行时的数据,如哈希码(HashCode)、GC分代年龄、状态标志位、锁记录指针、偏向线程ID等。对象头的另外一部分是一个类型指针,即指向对象的类元数据的指针实例数据 实例数据,即对象真正存储的有效信息,也是程序代码中所定义的各种类型的字段内容。无论是从父类继承下来的,还是子类中定义的,都需要记录起来。对齐填充** 对齐...原创 2019-07-01 19:39:10 · 68 阅读 · 0 评论 -
java中的强引用,软引用,弱引用,虚引用
强引用:类似Object o=new Object(),强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。软引用如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就 会回收这些对象的内存弱引用弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它 所管辖的内存区域的过程中,一旦发现了只具有弱引...原创 2019-06-18 09:43:44 · 88 阅读 · 0 评论 -
简单可达性分析
当一个对象到gc root不存在任何引用链时,则对象不可活。其中可作为gc root的对象包括下面几种:虚拟机栈中引用的对象方法区中静态属性引用的对象方法区中常量引用的对象本地方法引用的对象...翻译 2019-06-18 09:18:31 · 580 阅读 · 0 评论 -
java中的init的方法和clinit方法
1.Java编译后在字节码文件中生成init<>方法,称为实例构造器,将1,父类变量初始化2,父类语句块3,父类构造函数 4,子类变量初始化 5,子类语句块 6,子类构造函数收敛到该方法中。2.Java编译后在字节码文件中生成clinit方法,类构造器。将1,父类静态变量初始化2,父类静态语句块3,子类静态变量初始化4,子类静态语句块clinit时在类加载过程中执行的,而init...原创 2019-06-17 21:46:42 · 2626 阅读 · 0 评论 -
JAVA对象的创建过程
1.检测类是否已加载当虚拟机执行到new时,会先去常量池中查找这个类的符号引用。如果能找到符号引用,说明此类已经被加载到方法区(方法区存储虚拟机已经加载的类的信息),可以继续执行;如果找不到符号引用,就会使用类加载器执行类的加载过程,类加载完成后继续执行。2.为对象分配内存3.为分配的内存空间初始化零值4.设置对象头包括这个对象所属的类,类的元数据信息,对象的hashcode,GC分代年...原创 2019-06-17 20:44:09 · 57 阅读 · 0 评论 -
简述JVM内存布局
JVM中将内存分为若干部分:堆,方法区,虚拟机栈,本地方法栈,程序计数器程序计数器:当前线程在执行的字节码的行号指示器,且线程私有,是唯一一个没有任何OUTOFMEMORYERROR情况的区域虚拟机栈:每个方法在执行时会创建一个桢栈存储局部变量表(存放了基本数据类型,对象的引用,returnaddress)等信息,每个方法的调用与结束都需入栈和出栈。线程的请求深度大于虚拟机所允许的深度报...原创 2019-06-17 20:09:34 · 122 阅读 · 0 评论 -
java的类加载机制
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading) 7个阶段。其中验证、准备、解析3个部分统称为连接(Linking)。加载、验证、准备、初始化和卸载这5个阶段的顺序是确定...转载 2019-06-20 21:46:34 · 65 阅读 · 0 评论 -
Minor GC,full gc
从年轻代的回收称为minor gc,l老年代的回收称为major gcFull gc是针对整个堆来讲的。原创 2019-06-20 20:23:05 · 81 阅读 · 0 评论 -
Minor GC FULL GC,对象存活时间
一般的,新生的对象先出现在Eden区,当Eden区填满时,虚拟机发起一次MinorGC.其过程是将eden区垃圾回收之后还存在的对象复制到FROM区,当From区也填满时,将垃圾回收后还存在的对象包括EDEN和From区,都复制到to区,并交换from和to的角色。每经过一次minor GC进入到survier的对象年龄计数器加一,当年龄超过预设值则进入年老代,或者通过动态判定进入老年代。大...原创 2019-06-20 19:33:43 · 348 阅读 · 0 评论 -
双亲委派模型,类加载器
java中类加载器主要用于实现类的加载,java中的类加载器和类一起唯一确定类在jvm的唯一性。类加载器定义:类加载过程阶段中的“通过一个类的全限定名来获取此类的二进制字节流”这个动作放在JAVA虚拟机外部实现,以便应用程序自己决定如何获取所需的类。实现这个动作的代码称作类加载器。启动类加载器扩展类加载器应用程序类加载器自定义类加载器双亲委派模型:除了顶层的启动类加载器其他加载器都有...原创 2019-07-01 09:03:51 · 80 阅读 · 0 评论