
JVM
文章平均质量分 63
xMustang
知识点,串成线,织成网
展开
-
5. JVM 性能优化
1. 内存溢出内存溢出的方式:栈溢出堆溢出方法区溢出本级内存直接溢出1.1 栈溢出StackOverflowError:方法自己调用自己,死递归导致的溢出。OutOfMemoryError:栈内存分配有限,每个线程占据一个内存空间,比如 1M,如果线程多了,会导致内存溢出。1.2 堆溢出1.3 方法区溢出方法区垃圾回收效率很低,因此在加载动态语言、CGLIB、JSP、OSGI 时可能会内存溢出。1.4 本地直接内存溢出限制了本地直接内存的大小,分配时超过了其大小。2. 内原创 2022-05-22 14:23:55 · 328 阅读 · 0 评论 -
4. 执行子系统
1. class 文件Class文件是一组以8位字节为基础单位的二进制流,类似于结构体的伪结构来存储数据:只有两种数据类型:无符号数和表,无符号数属于基本的数据类型,以u1、u2、u4、u8。表是由多个无符号数或者其他表作为数据项构成的复合数据类型。class 文件结构详解:魔数与Class文件的版本常量池访问标志类索引、父类索引与接口索引集合字段表集合方法表集合属性表集合2. 字节码指令指令分类:加载和存储指令运算指令类型转换指令对象创建与访问指令操作数栈管理原创 2022-05-22 10:45:09 · 174 阅读 · 0 评论 -
3. 垃圾回收
1. 判断对象是否存活判断对象存活的方式:引用计数算法:会发生循环引用问题可达性分析在 Java 中可作为 GC Roots 的对象有:方法区中类静态属性引用的对象。方法区中常量引用的对象。虚拟机栈(本地变量表)中引用的对象。本地方法栈 JNI(Native方法)中引用的对象。finalize 理论上可以把对象拯救,但是不保证 finalize 一定执行。2. 引用类型强引用 =软引用 SoftReference弱引用 WeakReference虚引用 Phanto原创 2022-05-21 10:13:58 · 146 阅读 · 0 评论 -
2. JVM 中对象
1. 对象分配虚拟机遇到一条 new 指令时:对象划分内存方式有:指针碰撞、空闲列表。在对象划分内存时解决并发安全问题的方式:本地线程缓冲(TLAB)、CAS + 失败重试。2. 对象内存布局对象包括对象头、实例数据、对齐填充。对象头包括 hashcode/GC 回收年龄、锁状态标志、线程持有的锁、偏向线程 ID、偏向时间戳等。3. 对象访问方式对象访问有 2 种方式:使用句柄直接指针句柄是一种特殊的智能指针 。句柄与普通指针的区别在于:指针包含的是引用对象的内存地址,而句原创 2022-05-20 18:56:59 · 218 阅读 · 0 评论 -
0. 前置
1. Java SE 体系架构2. 虚拟机种类HotSpot VMJRockit VMJ9 VMDalvik VM3. 未来的 Java 技术4. JVM 执行流程概览原创 2022-05-19 12:49:46 · 175 阅读 · 0 评论 -
1. 内存区域
1. 概览线程私有的区域是用来运行指令的,线程共享的区域是用来存储数据的。2. 线程私有区域线程私有区域是用来运行指令的。2.1 程序计数器程序计数器指向当前线程正在运行的字节码指令的地址(行号)。为什么需要程序计数器?Java 是多线程的,在运行过程中需要线程切换,程序计数器保证在多线程情况下程序正常执行。程序计数器是 JVM 中唯一不会发生 OOM 的内存区域。2.2 栈为什么 JVM 要使用栈?可以很好地兼容方法调用方法这一个过程。1. 虚拟机栈大小设置:-Xss。存储当原创 2022-05-19 14:09:50 · 267 阅读 · 0 评论