• JVM有哪些分区?(解释详细 通俗易懂)


    JVM的分区可以分为两种:线程私有的内存区线程共享的内存区

     

    一.JVM中线程私有的内存区:

     

    1.程序计数器:当前线程所执行的字节码行号计数指示器,是线程私有的,即每个线程都有自己的程序计数器,需要注意的是,如果当前JVM执行的是Native代码(即非JAVA代码),那么程序计数器值为空

     

    2.JAVA虚拟机栈:存放栈帧的地方,每个JAVA方法执行的时候会创建一个栈帧,该栈帧保持的是该方法的相关信息(局部变量表等),栈帧随着方法的执行和跳出进栈和出栈,JAVA虚拟机栈是线程私有的,即每个线程都要自己的JAVA虚拟机栈

     

    3.本地方法栈:类似JAVA虚拟机栈,但是JAVA虚拟机栈是为JAVA方法提供服务的,而本地方法栈是为非JAVA方法提供服务的(Native方法)

     

    二.JVM中线程共享的内存区:

     

    1.堆:存放对象实例的地方,从GC(垃圾回收)的角度讲,又分为新生代和老年代,属于线程共享的内存区域

     

    2.方法区:储存已经被JVM加载的类信息,比如常量,静态变量,类的名称,方法信息等等,方法区中还包含运行时常量池和常量池,区别是运行时常量池是动态的,因为JAVA语言并不要求常量一定只能在编译期间生成,运行期间也有可能产生新的常量,这些常量就被放入运行常量池,这里所说的常量包括包装类和String类

     

    个人觉得从是否线程共享的角度看待JVM中的内存区更容易理解!

    另外堆和栈的解析可以参考这个:https://www.cnblogs.com/yinbiao/p/8073999.html

     

     

     

     

  • 相关阅读:
    Shadow SSDT详解、WinDbg查看Shadow SSDT
    两种方法获取shadow ssdt
    r0遍历系统进程方法总结
    枚举PEB获取进程模块列表
    用户层获取TEB PEB结构地址 遍历进程模块.doc
    Process32First 返回FALSE的原因
    windows内核需要注意的
    hive中遇到的问题
    解读:计数器Counter
    hadoop System times on machines may be out of sync. Check system time and time zones.
  • 原文地址:https://www.cnblogs.com/yinbiao/p/10589703.html
Copyright © 2020-2023  润新知