jvm
文章平均质量分 64
cb李先生
这个作者很懒,什么都没留下…
展开
-
object在内存
测试代码引入maven环境 <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.9</version> </dependency>测试代码public class Obj原创 2020-06-16 22:46:20 · 219 阅读 · 0 评论 -
java中的引用类型
强引用(strong references)如果有该引用关系,gc就不会回收该对象.常见的赋值操作都是强引用软引用(soft reference)当内存不足时,会打破该引用,将对象回收可用于缓存弱引用(weak reference)下次gc时就会打破该引用,将对象回收虚引用(phantom reference)甚至不能算作一种引用, 因为从reference中不能拿到对象final引用(final reference)有默认实现...原创 2020-06-14 17:26:03 · 127 阅读 · 0 评论 -
创建对象时的内存分配算法
判断空闲内存根据内存是否规整使用不同的方法内存规整:指针碰撞在空闲区域,按照分配顺序一个接着一个往后排。常用于自带内存整理的垃圾收集器。内存不规整:空闲列表虚拟机会维护一个空闲内存列表,会把对象分配到空闲的内存上。空闲列表的优化在CMS的实现里面,为了能在多数情况下分配得更快,设计了一个叫作Linear Allocation Buffer的分配缓冲区,通过空闲列表拿到一大块分配缓冲区之后,在它里面仍然可以使用指 针碰撞方式来分配。多个线程同时争抢一个内存位置CAS方式如果分配内存失败重试原创 2020-06-11 20:43:32 · 186 阅读 · 0 评论 -
java运行时数据区内存
程序计数器每一个线程独享一个程序计数器,在运行时数据区唯一不会发生内存溢出的区域。如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地 址;如果正在执行的是本地(Native)方法,这个计数器值则应为空(Undefined)。虚拟机栈每一个线程独占一个虚拟机栈。每当一个线程执行,jvm都会创建一个对应的栈帧。1)栈帧内部包含局部变量表、操作数栈、动态连接、方法出口等信息(因为虚拟机栈是线程独享的,对于局部变量表中的变量来说不会发生被多线程同时操作的数据安全...原创 2020-06-03 22:11:46 · 115 阅读 · 0 评论 -
类加载器,双亲委派模型java9之前之后的区别
jdk8以及以前的类的加载机制,主要依托双亲委派模型对类进行加载启动类加载器负责加载目录(<JAVA_HOME>\lib)下或者被-Xbootclasspath参数所指定的路径中存放的, 制定包名文件名的类(jdk内置的包名)。该加载器属于jvm,使用c语言编写,如果使用该加载器的类获取其加载器会出现null情况,如:2. 扩展类加载器负责加载载<JAVA_HOME>\lib\ext目录中,或者被java.ext.dirs系统变量所 指定的路径中所有的类库。该加载器使原创 2020-06-02 23:12:57 · 522 阅读 · 0 评论 -
类的加载过程
类的加载阶段此时jvm会选用不用的类加载器(ClassLoader)进行加载我们的类,通常将class文件以二进制流的方式读入到内存当中,生成Class对象类的连接阶段此阶段又分为3个小阶段1)验证:启动项目时,遇到的java版本不匹配的的问题都是在此过程出现的;还会检验二进制流是否已魔数咖啡宝贝开始(0xCAFEBABE);还有常量池中的常量类型等其他信息。2)准备:此阶段比较有意思,主要作用是为分配静态变量分配内存和分配初始值阶段(这里的初始值是默认的“0”值,并不是=右边的具体数值)..原创 2020-06-01 22:18:16 · 127 阅读 · 0 评论