JVM
文章平均质量分 79
内存模型、GC
chenglun17
这个作者很懒,什么都没留下…
展开
-
JVM调优
1、相关命令jps/*内存信息输入到 log.txt 文件中*num:序号 instances:实例数量 bytes:占用空间大小 *class name:类名称,[C is a char[],[S is a short[],*[I is a int[],[B is a byte[],[[I is a int[][]*/jmap -histo 进程id > ./log.txt//查看堆的详细信息,各个区域的使用情况jmap -heap 进程id//查找死锁jstack 进程i原创 2020-08-03 10:06:45 · 119 阅读 · 0 评论 -
GC算法 - 垃圾收集器
1、内存的回收引用计数法:给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加1;当引用失效,计数器就减1;任何时候计数器为0的对象就是不可能再被使用的。(很难解决循环引用的问题)可达性分析算法:将“GC Roots” 对象作为起点,从这些节点开始向下搜索引用的对象,找到的对象都标记为非垃圾对象,其余未标记的对象都是垃圾对象(根节点:线程栈的本地变量、静态变量、本地方法栈的变量等等)标记-清除法:算法分为“标记”和“清除”阶段:标记存活的对象, 统一回收所有未被标记的对象;也可原创 2020-08-03 10:04:11 · 202 阅读 · 0 评论 -
对象创建流程 - 内存分配机制
1、对象创建流程加载检查(类):检查指令(new、clone、对象序列化等)的参数是否能常量池找到类的符号引用,并检测这个类是否被加载过(类加载机制博主前面文章写过)内存分配:JVM为对象分配内存。对象所需的内存空间大小在类加载完后可以完全确定,其本质是在堆中开辟一块确定的内存空间划分内存的方法:1.“指针碰撞”:如果Java堆中内存是绝对规的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间那边挪动一段与对象原创 2020-08-03 10:01:43 · 251 阅读 · 0 评论 -
JVM-内存模型
1、内存模型**程序计数器:指向当前线程所执行的字节码的行号指示器 (JVM的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器只能执行一条线程中的指令,因此,为了线程切换之后能恢复到正常的执行位置,每条线程都需要一个独立的程序计数器,互不影响,独立存储)Java虚拟机栈:线程私有的,生命周期随着线程的生而生,随着线程的死亡而死亡。存储当前线程运行方法时所需要的额数据、指令、返回地址。每个方法执行时候,都会创建一个栈帧本地方法栈:为虚拟机使用到的原创 2020-08-03 09:59:20 · 117 阅读 · 0 评论 -
深度解析类加载机制
1、类加载宏观图:2、ClassLoader.loadClass() 关键流程:加载:在磁盘上查找并通过io读入字节码文件;将字节流所代表的静态存储结构转化为方法区的运行时数据结构;在内存中生成一个代表这个类的java.lang.Class对象,作为方法去这个类的各种数据的访问入口验证:1、文件格式验证:验证字节流是否符合Class文件格式的规(如:.class文件开头为CAFE BABE),并且能够被当前虚拟机处理。2、元数据验证:内容是否符合JVM规定。3、字节码验证:验证字节码文件方法中的原创 2020-08-03 09:55:54 · 173 阅读 · 0 评论