JVM
文章平均质量分 80
不知努力的bd
这个作者很懒,什么都没留下…
展开
-
JVM系列之对象的创建过程
java是一门面向对象的编程语言,在程序运行过程中无时无刻都有对象被创建。在语言层面上,创建对象通常(例外:复制、反序列化)仅仅是一个new关键字而已,而在虚拟机中对象的创建又是怎样的一个过程呢?1.检查当Java虚拟机遇到一条字节码new指令时,首先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。2.分配内存在类加载检查通过后,将为新生对象分配内存。对象所需的内存大小在类加载完成后原创 2022-04-03 01:19:30 · 368 阅读 · 0 评论 -
JVM系列之内存分配与回收策略
1.对象优先在Eden分配大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。HotSpot虚拟机提供了-XX:+PrintGCDetails这个收集器日志参数,告诉虚拟机在发生垃圾收集行为时打印内存回收日志,并且在进程退出时输出当前内存各区域分配情况。2.大对象直接进入老年代大对象就是指需要大量连续内存空间的Java对象,最经典型的大对象便是那种很长的字符串,或者元素数量很庞大的数组。避免大对象的原因是,在分配空间时,他容易导致原创 2022-04-02 22:54:37 · 1314 阅读 · 0 评论 -
JVM系列之Java的类加载机制
类加载的时机一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,他的整个生命周期将会经历加载、验证、准备、解析、初始化、使用、卸载七个阶段,其中验证、准备、解析三部分统称为连接。什么情况下需要加载过程的第一阶段“加载”1.使用new关键字实例化对象的时候2.读取或设置一个类型的静态字段(被final修饰、已在编译期把结果放入常量池的静态字段除外)的时候。3.调用一个类型的静态方法的时候。4.使用java.lang.reflect包的方法对类型进行反射调用的时候。5.当初始化原创 2022-03-18 15:20:49 · 527 阅读 · 0 评论 -
JVM系列之经典垃圾收集器
Serial收集器原创 2022-03-16 00:35:08 · 373 阅读 · 0 评论 -
JVM系列之垃圾回收算法
一、如何判断某个对象是否为“垃圾”1.引用计数算法在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效计数值就减一;任何时刻计数器为零的对象就是不可能在被使用。引用计数算法虽然占用了一些额外的内存空间来进行计数,但原理简单,判断效率也很高,但是无法检测出循环引用。2.可达性分析算法基本思路就是通过一系列称为“GC Roots"的根对象作为起始节点,从这些结点开始,根据引用关系向下搜索,搜索过程所走过的路径成为”引用链“,如果某个对象到GC Roots间没有任何引原创 2022-03-14 00:40:15 · 838 阅读 · 0 评论 -
JVM系列之详解运行时数据区域
运行时数据区1.程序计数器是一块较小的内存空间,可以看作当前线程所执行字节码行号指示器。程序控制流的指示器,分支、循环、跳转、异常处理、线程回复等功能功能都需要依赖这个计数器完成。2.Java虚拟机栈3.方法栈4.方法区5.Java堆...原创 2022-03-13 20:34:20 · 1208 阅读 · 0 评论