JVM
文章平均质量分 70
雨下一整碗儿
进修中的小码农
展开
-
JVM垃圾收集
JVM垃圾收集(GC)文章目录JVM垃圾收集(GC)介绍运行时区域Java堆与方法区如何确定对象已经可以回收了?引用计数算法可达性分析算法GC Roots几种引用生存还是死亡?垃圾收集算法标记-清除标记-复制标记-整理分代收集Java内存分配机制年轻代(Young Generation)年轻代的内存分配年老代(Old Generation)永久代(Perm Generation)常见的垃圾收集器SerialParNew(Serial的多线程版本)Parallel ScavengeCMS (Concurre原创 2021-06-07 21:57:03 · 98 阅读 · 0 评论 -
04-内存泄漏和内存溢出
内存泄漏和内存溢出内存泄漏内存泄漏就是对内存中不再使用的对象,垃圾收集器无法从内存中将它们回收,因此它们会一直存在。这种情况可能会导致内存溢出static字段引起的内存泄漏:大量使用static关键字导致静态变量拥有与整个应用程序相同的生命周期未及时关闭资源:字节流,通道等引用了外部类的内部类:非静态内部类的实例化需要先实例化外部类,默认情况下,内部类的实例隐式包含了外部类的引用,所以在适当情况下应当选用静态内部类重写了finalize()方法:在finalize()方法中重新对该类进行了引用原创 2021-06-07 20:38:52 · 70 阅读 · 0 评论 -
对象的创建、内存布局
对象的创建、内存布局对象的创建过程当Java虚拟机遇到一个new指令时,会先检查这个指令的参数能否在运行时常量池中定位到一个类的符号引用,并且检查这个符号引用所代表的类有没有被加载、解析、初始化过。如果没有,那么必须先执行相应类的加载过程。在类检查通过后,将为新生对象分配内存。为对象分配内存空间实际上是在堆区划分一块指定大小的内存区域。如果堆区是规整的,那么内部应该是被使用过的内存放在一边,没使用过的放在另一边,中间有一个指针作为分界点的指示器。分配内存时指针往没使用过的内存移动对象大小原创 2021-06-07 13:14:03 · 72 阅读 · 0 评论 -
Java内存区域:堆、栈、方法区、运行时常量池、直接内存
Java内存区域目录文章目录Java内存区域目录介绍运行时数据区域程序计数器(线程私有)Java虚拟机栈(线程私有)本地方法栈(线程私有)堆方法区运行时常量池直接内存介绍Java虚拟机在执行Java程序的过程中将自己所管理的内存区域划分为不同的数据区域。有的区域随着虚拟机进程的启动而一直存在,有的则是跟随线程的启动和结束而建立和销毁。运行时数据区域Java虚拟机运行时数据区结构:程序计数器(线程私有)当前线程所执行的字节码行号指示器,所占内存很小,如果在执行的是一个Java方法,那么他的值原创 2021-06-07 12:59:26 · 515 阅读 · 0 评论 -
虚拟机类加载机制及双亲委派模型
虚拟机类加载机制及双亲委派模型类的生命周期加载 - 验证 - 准备 - 解析 - 初始化 - 使用 - 卸载(验证、准备、解析三个阶段统称为连接)加载、验证、准备、解析、初始化和卸载这五个阶段的顺序是确定的,而解析则不一定,它在某些情况下也可以在初始化之后再开始。类的加载过程加载在加载阶段,Java虚拟机主要完成以下三件事:通过类的全限定名来获取定义此类的二进制字节流讲这个字节流所代表的静态存储结构转化为方法区的运行时数据结构在内存中生成一个代表这个类的java.lang.Class原创 2021-06-06 18:30:21 · 97 阅读 · 0 评论