JVM
weixin_45849726
这个作者很懒,什么都没留下…
展开
-
强引用、软引用、
强引用: 直接new出来的对象就是强引用。 Object o = new Object(); 当设置o=null后,o才会等待gc回收。 软引用: public void quote(){ SoftReference<byte[]> s = new SoftReference<>(new byte[1024*1024*10]); System.out.println(s.get());//[B@5c8da962 try {原创 2021-12-16 16:45:36 · 122 阅读 · 0 评论 -
几种类加载器
JVM支持两种类加载器,分别是引导类加载器(BootStrap ClassLoader)和自定义加载器(User-Defined ClassLoader) 所有派生于抽象类ClassLoader的类加载器都是自定义加载器(Extension ClassLoader和System ClassLoader也属于自定义加载器) 程序中常见的三种类加载器: 主要分为引导类加载器(BootStrap ClassLoader)、扩展类加载器(Extension ClassLoader)、系统类加载器(System原创 2021-12-09 14:09:32 · 1460 阅读 · 0 评论 -
类加载器加载
加载 通过一个类的全限定名获取定义此类的二进制文件流。 将这个字节流所代表的的静态存储结构转化为方法区运行时的数据结构 在内存中生成一个代表类的java.lang.Class对象,作为方法区这个类各种数据的访问入口 链接 验证、准备、解析 验证 确保Class文件的信息符合虚拟机要求,确保被加载类的正确性。 主要验证方式:文件格式验证、元数据验证、字节码验证、符号引用验证 准备 为类变量分配内存并设置默认初始值 这里不包含被final修饰的static、不包含实例变量 解析 将常量池内的符号引用转化为直接.原创 2021-12-09 11:11:09 · 377 阅读 · 0 评论 -
JVM内存结构
运行时数据区 JVM运行时数据区主要包括 堆、栈、方法区、程序计数器等。其中JVM内存优化主要在线程的共享区域:***堆,方法区***中 程序计数器 程序计数器可以看做是当前执行的字节码的行号计数器,指向下一个要执行的指令代码。 如果手机java方法,记录的是虚拟机正在执行的字节码指令的地址,如果是native方法,记录的值是undifined。 程序计数器不会发生内存溢出问题 栈 本地方法栈和虚拟机栈 栈线程私有,生命周期和线程相同。 栈桢是栈的元素,每个方法在执行时会创建一个栈桢,存储局部变量表,方法出原创 2021-12-09 09:58:00 · 58 阅读 · 0 评论 -
打印GC日志
idea打印GC日志是在 命令:-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggs:./gc.log原创 2020-11-22 19:23:42 · 257 阅读 · 0 评论 -
堆
new出来的对象会放到堆空间的Eden区中。 老年的默认站整个堆空间的三分之二大小,年轻代占三分之一。其中Eden区占年轻代的十分之八,From和To各占十分之一。 当Eden区放满之后,JVM的执行引擎会触发垃圾收集的线程,会使用minor gc做垃圾收集,收集无效的对象。之后还有引用的对象会被移动到Survivo区,且对象(分代)年龄加一(对象年龄也记录在对象头中)。 当Survivo区被放满后也会触发minor gc,会将From区的无效对象回收,有效对象移动到To区,对象年龄加一,之后Eden区.原创 2020-11-22 19:18:58 · 68 阅读 · 0 评论 -
动态链接
动态链接: 动态链接中存放所有方法的JVM指令码的内存地址。 public class Math { public static final Integer CONSTANT=444; public int compute(){ //一个方法会创建一块栈帧内存区域 int a=1; int b=2; int c=(a+b)*10; return c; } public static void main(Str原创 2020-11-22 15:12:13 · 106 阅读 · 1 评论 -
JVM
JVM jvm整体架构: .java文件通过javac编译成.class文件,通过JVM(从软件屏蔽不同操作系统在底层硬件指令上的区别)编译成机器码(不同操作系统对应相应的jdk版本)。 JVM分为类装载子系统,内存模型和执行引擎 当用java命令执行.class文件时,JVM首先通过类装载子系统,把字节码文件装载到内存区(一般装载到方法区),之后执行引擎执行内存区域的字节码文件。 栈(又叫线程栈) 栈是一种数据结构,FILO,先进后出 存放局部变量,是每个线程独享 栈帧:在执行main方法时,会在当前栈原创 2020-11-19 18:25:37 · 53 阅读 · 0 评论