JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Java进程内存结构深度剖析!

wys521 2024-11-18 18:03:33 精选教程 34 ℃ 0 评论
  • 每一个java都是一个单独的进程,进程是表示正在运行的程序实例,每个进程都有独立的内存空间,其中jvm虚拟机就运行在java进程中。
  • jvm内有堆、栈、程序计数器、本地方法栈,堆是共享区域,存储着java对象,其内存区域主要有新生代和老年代,且比例默认为1(新生):3(老年),新生代中,也分为eden、s0、s1三个区域,默认比例为8(eden):1(s0):1(s1);其次是栈信息,这里的私有区域,一个线程分配一个栈内存,其中栈信息主要有局部变量,方法调用、动态连接、方法返回地址信息;本地方法栈用于执行本地方法(native)调用;程序计数器存储当前线程所执行的字节码指令地址,即当前正在执行的指令或将要执行的指令的位置。本地程序计数器在线程切换时被保存和恢复,确保线程恢复执行时能准确地从之前的执行位置继续执行,本地程序计数器在jvm中起着非常重要的作用,保证线程能够正确执行。
  • 本地内存,通常指堆外内存,共享区域,其内有方法区和直接内存区;方法区中存储了类结构信息、静态变量、常量池、方法信息等,在java8中该区域由元空间取代;直接内存区可以用于存储大量数据或需要快速访问的数据提高IO效率
  • 本地内存不受 JVM 内存管理,这些内存通常由操作系统管理,但它虽不受jvm管理,但它是java进程中的一部分,工作中,它可以提高内存的使用效率,减少受垃圾回收的影响,同时由于不占用jvm内存,它间接提高了程序性能,降低了因为程序代码的失误而造成的内存泄漏风险,适用于需要大内存操作的场景。
import java.nio.ByteBuffer;
 
public class DirectBuffer {
    public static void main(String[] args) {
        // 创建一个直接内存的ByteBuffer
        ByteBuffer directBuffer = ByteBuffer.allocateDirect(1024);
 
        // 使用directBuffer来实现自己的业务功能
 
        // 当不再需要时,清理直接内存
        directBuffer = null;
        System.gc(); // 建议JVM进行垃圾回收,但不保证一定会回收
    }
}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表