JVM
文章平均质量分 80
今天学不学?
1 + 1 =| |
展开
-
Java对象内存布局和对象头
创建一个object对象,,首先我们要明确知道创建对象的那一行代码的存储位置,Object相当于一个Object类的模板,类加载的时候放在方法区,存放类的信息o:在方法体中,随着方法的调用,存储在栈中栈帧信息中,new Object():创建的对象信息放在堆空间中了解到了对象的存储位置,这时我们要知道对象在堆中存放哪些信息?对象在堆内存中存储布局可以划分为三个:对象头,实例数据,填充属性对象头:包括Markword和类型指针hashcode值,自己的hash值,记录在内存中什么地方给对象可以加锁,原创 2022-06-25 15:17:20 · 218 阅读 · 0 评论 -
JVM篇(五)之垃圾回收
Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时,Java 自动内存管理最核心的功能是 堆 内存中对象的分配与回收。Java 堆是垃圾收集器管理的主要区域,因此也被称作GC 堆(Garbage Collected Heap)....原创 2022-06-07 11:17:57 · 191 阅读 · 0 评论 -
JVM篇(四)之JMM内存模型
JMM定义了一套多线程读写共享数据时(成员变量,数组)时,对数据的可见性,有序性和原子性的规则和保障.两个线程对初始值为0的静态变量一个做自增,一个做自减,各做5000次,结果是0吗?以上结果可能为正数,负数,零原创 2022-06-02 10:37:15 · 200 阅读 · 1 评论 -
JVM篇(三)之内存结构
文章目录程序计数器定义作用特点虚拟机栈定义面试问题栈内存溢出线程运行诊断本地方法栈定义堆定义堆内存溢出堆内存诊断方法区定义方法区内存溢出运行时常量池StringTableStringTable位置StringTable垃圾回收StringTable性能调优JVM内存结构包括程序计数器,本地方法栈,虚拟机栈,堆,方法区,程序计数器java源代码----->编译器----->二进制字节码 .class文件---->解释器----->机器码------>cpu执行定义是线程原创 2022-05-30 16:39:40 · 143 阅读 · 0 评论 -
JVM篇(二)之语法糖
语法糖语法糖其实就是java编译器把*.java源码编译成 *.class字节码的过程,自动生成和转换这些代码,主要为了减轻程序员的负担默认构造器java文件当没有任何构造器时,java编译器会为我们自动生成无参构造器public class User { }编译后的class文件public class User { public User() { //这个无参构造是编译器帮助我们加上的 super();//调用父类Object的无参构造原创 2022-05-30 16:33:23 · 155 阅读 · 0 评论 -
JVM篇(一)之类加载器
文章目录类加载过程类什么时候加载类加载器双亲委派机制?为什么需要双亲委派模型打破双亲委派模型示例一:Tomcat类加载过程类的加载为三个阶段:加载,链接,初始化加载:由类加载器负责将硬盘中的class文件加载到内存中原来静态的数据结构转化为方法区的动态数据结构,在堆中生成class对象链接分为三个阶段:验证,准备,解析**验证:**查看class文件中的字节流是否符合虚拟机要求准备:为class对象中的静态变量分配内存,并初始化解析:将类中的逻辑引用变为内存中的直接引用初始化:初始原创 2022-05-25 17:13:34 · 120 阅读 · 1 评论 -
用代码实现一个内存溢出
概念内存泄漏Memory Leak:是指程序在申请内存后,无法释放已经获取的内存;一次内存泄漏似乎没什么影响,但是多次堆积后会发生内存溢出内存溢出Out of Memory:是指程序在运行时获取内存,没有足够的内存供请求者请求注:在java虚拟机中,除了程序计数器,其他几个运行时区域都有可能发生内存溢出Java堆溢出java堆用于存储对象实例,只要不断地创建对象,并且保证GC避免清除这些对象,那么随着总容量到达堆的最大容量就会产生内存溢出代码实现堆溢出(提前设置好XMS和XMX) stati原创 2022-04-06 21:01:48 · 2694 阅读 · 1 评论