@ 前言 在最开始讲解JVM内存结构的时候有简单分析过方法的执行原理——每一次方法调用都会生成一个栈帧并压入栈中,方法链的执行就是一个个栈帧弹出栈的过程,本篇就从字节码层面详细分析方法的调用细节。 正文 解析 Java中方法的调用对应字节码有5条指令: invokestatic:用于调用静态方法。 ...
分类:
其他好文 时间:
2020-08-06 00:56:51
阅读次数:
87
在java语言中,除了基本数据类型以外,其他的引用都是各类对象的引用,根据生命周期的长短,分为以下四类: 强引用:我们new的对象所关联的引用就是强引用,当jvm内存空间不足时,宁肯抛出oom运行时错误,也不会将该引用回收来解决内存不足的问题。除非将其赋值为null或者超过引用的作用范围,该引用指向 ...
分类:
其他好文 时间:
2020-07-30 22:02:24
阅读次数:
74
阅读相关资料,自己先画了一个jvm内存模型草图 类装在子系统不过多解释,上一篇类加载机制说的就是这个。 字节码执行引擎(执行编译好后class文件指令码的程序),为C语音实现,不可见,不展开讲,下面主要来看内存模型中的5块。 芜湖起飞~ 先从栈开始讲: 栈后面加了个括号,线程,栈就是线程在执行方法的 ...
分类:
其他好文 时间:
2020-07-27 23:53:29
阅读次数:
73
1:jvm遇到new :首先判断是否别类加载器加载,然后class 加载到 jvm内存数据区 类加载 检查加载:检查这个指令参数是否可以在常量池中有对应类的符号引用,并检查是否被加载/解析/初始化 分配内存 -》指针碰撞 (适合内存规整)/ 空闲列表(适合内存不规整) 并发情况下 cas加失败重试/ ...
分类:
其他好文 时间:
2020-07-23 15:53:57
阅读次数:
68
1、运行时数据区域 1.1、程序计数器 一块较小的内存,它可以看作是当前线程所执行的字节码的行号指示器。 线程独有 唯一一个没有规定OutOfMemoryError情况的区域 1.2、Java虚拟机栈 线程私有,生命周期与线程相同 每个方法被执行的时候都会创建一个栈帧,方法的开始到结束对应了栈帧的入 ...
分类:
其他好文 时间:
2020-07-22 02:07:10
阅读次数:
65
解释 在java中也有引用的概念,其实就可以认为是变量。标题中的引用级别是指变量与对象之前的引用级别。java中分为4种,按引用强弱关系排序分别是:强引用、软引用、弱引用、虚引用。 强引用(Strong references) 特点:当JVM内存满了之后也不会断开引用关系,即使是发成OOM 我们平时 ...
分类:
编程语言 时间:
2020-07-19 23:22:47
阅读次数:
59
程序计数器:线程私有。是一块较小的内存,是当前线程所执行的字节码的行号指示器。是Java虚拟机规范中唯一没有规定OOM(OutOfMemoryError)的区域。 Java栈:线程私有。生命周期和线程相同。是Java方法执行的内存模型。执行每个方法都会创建一个栈帧,用于存储局部变量和操作数(对象引用 ...
分类:
其他好文 时间:
2020-07-18 00:33:28
阅读次数:
63
@Autowired与@Resource的区别 @RequestMapping 作用 ThreadLocal与 synchronized @Required 作用 jvm内存模型-常量存放位置 oracle merge into oracle 游标 mybatis SQLSessionFactory ...
分类:
编程语言 时间:
2020-07-15 16:00:11
阅读次数:
77
虽然 WeakReference 与 SoftReference 都有利于提高 GC 和 内存的效率, 但是 WeakReference ,一旦失去最后一个强引用,就会被 GC 回收,而软引用 虽然不能阻止被回收,但是可以延迟到 JVM 内存不足的时候。 ...
分类:
编程语言 时间:
2020-07-14 16:19:50
阅读次数:
88
JVM内存包含以下部分: 堆内存,它是Java对象的存储 非堆内存,Java用于存储加载的类和其他元数据 其他,JVM代码本身,JVM内部结构,加载的探查器代理代码和数据等。 堆 JVM有一个堆,它是运行时数据区,从中分配所有类实例和数组的内存。它是在JVM启动时创建的。 可以使用以下VM选项配置堆 ...
分类:
其他好文 时间:
2020-07-13 18:32:11
阅读次数:
60