程序计数器: Java虚拟机栈 【示例1-1】: Java虚拟机栈内存溢出: Java方法执行动态内存模型图: 本地方法栈:与Java虚拟机栈的运行都是一致的,唯一的区别是:Java虚拟机栈为虚拟机执行Java方法服务,而本地方法栈为虚拟机执行native方法服务。 Java堆:是虚拟机中管理内存最 ...
分类:
编程语言 时间:
2019-01-28 10:52:55
阅读次数:
195
由于前几天做生成文档的功能大量用到了反射机制,所以我闲时看了一下java反射机制的原理,发现里面大量使用了代理模式(java方法的method.invoke()代理native方法的method.invoke,不在此文章展开),由于对代理模式有点陌生了。写这篇文章重新加深一下我对代理模式的理解。 代 ...
分类:
其他好文 时间:
2019-01-28 10:45:22
阅读次数:
179
JVM下的内存分布: 1.程序计数器:每一个线程都有一个程序计数器,执行java方法时,计数器存放着正在执行的虚拟机字节码指令的地址,执行Native方法时,计数器为空。 2.栈:线程私有,生命周期与线程的生命周期相同,内存空间在编译期完成分配,运行时不会改变。 3.堆:堆是被所有线程共享的一块内存 ...
分类:
其他好文 时间:
2019-01-14 23:13:06
阅读次数:
217
程序计数器:保存的是当前存成执行命令的地址,每次得到当前的地址后会执行下一条命令,每个线程都是独立的 在JVM规范中规定,如果线程执行的是非native方法,则程序计数器中保存的是当前需要执行的指令的地址;如果线程执行的是native方法,则程序计数器中的值是undefined。 由于程序计数器中存 ...
分类:
其他好文 时间:
2019-01-12 20:54:49
阅读次数:
162
程序计数器 1、 线程所执行的字节码的行号指示器; 2、JVM的多线程是通过线程轮流切换并分配处理器执行时间的方式; 3、 每条线程都需要有一个独立的程序计数器,所以是线程私有的内存区域; 4、 执行Java方法,记录的是正在执行的虚拟机字节码指令的地址; 5、 执行Native方法,计数器值为空; ...
分类:
其他好文 时间:
2019-01-06 18:10:46
阅读次数:
181
一.JVM内存管理 1.1JVM运行时数据区 1.1.1程序计数器:记录当前线程正在执行的字节码指定的地址(行号) 为什么需要它:程序容易被打断 1.1.2虚拟机栈:存储当前线程运行方法时所需要的数据、指令、返回地址 1.1.3本地方法栈:和虚拟机栈类似,存储的是native方法 1.1.4方法区: ...
分类:
编程语言 时间:
2019-01-06 15:36:48
阅读次数:
236
一、运行时数据区域 ? 1、程序计数器: 当前线程执行字节码的行号指示器(通过改变计数器的值来选择下条需要执行的字节码指令) 每个线程有独立的程序计数器(线程私有,为了切换线程时能恢复到挣钱的执行位置) 如果执行java方法,计数器记录正在执行的字节码指令地址。如果执行的是Native方法,计数器为 ...
分类:
编程语言 时间:
2018-11-25 20:36:43
阅读次数:
199
1.判断对象是否已死的方法可达性分析可作为GCRoots的对象包括下面几种:虚拟机栈(栈帧中的本地变量表)中引用的对象。方法区中类静态属性引用的对象。方法区中常量引用的对象。本地方法栈中JNI(即一般说的Native方法)引用的对象。2.垃圾收集算法:标记-清除(MarkSweep)算法:分标记和清除两个阶段,缺点:一是两个阶段效率低,二是产生内存碎片。复制(Copying)算法:把内存平均分为两
分类:
编程语言 时间:
2018-11-19 21:39:48
阅读次数:
210
1.程序计数器--线程私有,生命周期与线程一致(执行java方法时,则是虚拟机字节码指令的地址,定长。若是native方法,则为空,所以这个内存不存在outOfMemeryError,也没有规定) 每个线程都会拥有(因为多线程执行,上下文切换,需要保留当前线程执行状态),,记录当前线程执行的代码(字 ...
分类:
编程语言 时间:
2018-11-19 17:23:04
阅读次数:
100
阅读本文章前需要了解 CAS 操作是什么。 首先大致介绍一下需要讲到的几个类,只需要理解这几个类是什么关系即可,后面会有详细解析。 Unsafe :这个类提供了 native 方法,未开源,提供了线程阻塞和唤醒,原子操作等方法。 LockSupport :包装了一层 Unsafe 类,非常类似于代理 ...
分类:
编程语言 时间:
2018-11-16 23:36:33
阅读次数:
259