[基础]Java内存和GC汇总
来源:互联网 发布:淘宝销售属性虚拟类目 编辑:程序博客网 时间:2024/06/07 10:01
Java内存结构
主要来自JVM 8 定义。运行时数据区生命周期一部分与JVM绑定,一部分与线程绑定
pc寄存器
与线程绑定。指向当前方法地址(非native)或未定义(native)
JVM栈
与线程绑定
- 栈中都是帧(Frame)[的指针]
- Frame可以是new出来的,用来存储函数调用中的临时结果
- 栈只有push和pop
堆
与JVM绑定。用来放new出来的实例
函数区
与JVM绑定。用来保存编译后的中间代码。
运行时常量池
与类绑定。相当于扩大版的符号表(symbol table)。其实存在于函数区。
native方法栈
帧
帧是函数运行的上下文,所有函数运行的相关数据(中间变量、返回值、异常、当前类)都存放在帧中。帧还负责动态链接、抛异常。帧可以理解成是ThreadLocal的
- 本地变量:使用一个数组来存储,只有long和double占两个变量,其他都是单个变量。比较接近于组成原理的寄存器
- 操作符栈:标准的行为,没什么特殊的
- 动态链接:符号库和真实符号由帧负责对应上(虚函数感),这个提供了足够的动态能力
- 帧会在函数结束运行时失效,这个可以帮助理解finally中return会导致catch中的throw失效
内存管理和GC
主要来自于OpenJDK说明文档
- 分配内存时,可能通过RT也可能在编译时就把代码编译到执行位置。每个线程会有预留的内存分配buffer(TLABs)
分代
- 分新老代,老生常谈了,不过这种基于行为特点进行优化很有参考价值
- Young中能存活的对象很少,所以采用标记-拷贝的方法。此时不会进行全局扫描!!!
- Old不主要采用拷贝,因为能回收的内存期望值比较低,更多对象是不会被回收的
- Permanent是留个JVM用的
回收算法
- short pause:标记以最高并行度进行,最终只是清理无用内存,并不拷贝对象
- high throughput:也是搞并行度进行GC,但最后是通过拷贝来实现GC的,这样能给出更多的连续空间
话说,官方的东西,真简练。。。补充可以看这里还有这里
0 0
- [基础]Java内存和GC汇总
- JAVA 内存划分和GC
- Java 内存和GC机制
- 【Java】 Java 内存区域和GC机制
- JVM内存和GC相关的资料汇总
- Java 内存区域和GC机制
- Java内存区域和GC机制
- Java 内存区域和GC机制
- Java 内存区域和GC机制
- Java 内存区域和GC机制
- Java 内存区域和GC机制
- Java 内存区域和GC机制
- Java 内存区域和GC机制
- Java 内存区域和GC机制
- Java 内存区域和GC机制
- Java 内存区域和GC机制
- Java 内存区域和GC机制
- Java 内存区域和GC机制
- ios 后去系统当前时间c
- 【微软】软件开发工程师实习生面试
- VARIANT and VARIANTARG 中的byref
- jQuery 知识点总结
- Android studio 自动导入(全部)包 import
- [基础]Java内存和GC汇总
- C++第4次实验(基础班)
- Leetcode-Methodology-Preprocessing
- 由alert出来的对象是[object object],就感觉不知所措,而进一步思考,对象究竟是什么?即变成语言(如js、java、c等任意语言)中的变量,究竟是什么东西?
- 【Unity3d】窗体透明
- HTML5 Canvas+JS控制电脑或手机上的摄像头实例.
- c++实验三—百计百钱
- 构造函数那些事儿
- rs232公头、母头的引脚定义