go语言网站开发,江门网站建设方案开发,怎么把网页里的视频提取出来,专业网站开发建设目录 1. 说明2. 堆上分配3. 栈上分配#xff08;逃逸分析和标量替换#xff09;4. 方法区分配5. 直接内存#xff08;非堆内存#xff09; 1. 说明
1.JVM的对象并不总是分配在堆上。2.堆是JVM用于存储对象实例的主要内存区域#xff0c;存在一些特殊情况#xff0c;对象… 目录 1. 说明2. 堆上分配3. 栈上分配逃逸分析和标量替换4. 方法区分配5. 直接内存非堆内存 1. 说明
1.JVM的对象并不总是分配在堆上。2.堆是JVM用于存储对象实例的主要内存区域存在一些特殊情况对象可能会被分配在其他地方。
2. 堆上分配
1.堆Heap是JVM内存管理的核心区域用于存储几乎所有的对象实例和数组。2.当创建一个新的对象时JVM通常会在堆上为其分配内存。3.堆内存的管理由垃圾回收器GC负责GC会定期扫描堆内存回收不再使用的对象所占用的内存空间。
3. 栈上分配逃逸分析和标量替换
1.逃逸分析是JVM的一种优化技术用于判断一个对象是否可能逃逸出当前作用域。2.如果一个对象在方法执行过程中始终只在当前作用域内使用不会逃逸到方法外部那么JVM可能会将这个对象分配到栈上而不是堆上。3.标量替换是逃逸分析的一种结果。如果一个对象可以被拆解为多个标量如基本数据类型并且这些标量可以在栈上独立使用那么JVM会将这些标量直接分配到栈上而不是创建一个对象。
4. 方法区分配
1.方法区Method Area或称为永久代PermGen space在JDK 8之前或元空间Metaspace在JDK 8及之后是JVM用于存储类的结构信息的内存区域。2.类加载器将类的元数据如类名、字段、方法、常量池等加载到方法区中。3.方法区不是用于存储对象实例的但一些与类相关的特殊对象如类的静态变量、常量池中的字符串和符号引用等会存储在方法区中。
5. 直接内存非堆内存
1.直接内存Direct Memory或称为本地内存Native Memory不是由JVM直接管理的而是由操作系统管理的。2.在Java中可以使用sun.misc.Unsafe类或java.nio.ByteBuffer类来分配直接内存。3.直接内存通常用于高性能IO操作如网络IO和文件IO因为它可以避免将数据从JVM堆内存复制到操作系统的内存缓冲区中。