美文网首页
Jvm运行时数据区

Jvm运行时数据区

作者: 于占伍 | 来源:发表于2020-04-24 10:07 被阅读0次
    结构.jpg

    浅色为线程共享,深色为线程私有


    联系.jpg


    用于存放对象实例的一块区域,几乎所有的对象都在这里分配内存
    堆在jvm启动时创建,堆中对象不用显式释放,gc会帮我们释放并回收内存。
    (通过 -Xmx 和 -Xms 控制)。如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出 OutOfMemoryError 异常。


    新生代.jpg

    方法区
    主要是存储类信息(类版本号,方法,接口),常量,静态变量,即时编译后的代码等
    hotspot同永久代
    本地方法区
    主要为Native方法服务(rt.jar)
    Java虚拟机栈
    用于方法执行的一块内存区域,执行顺序跟栈一样,先进后出
    栈的结构是栈帧组成的,调用一个方法就压入一帧,帧上面存储局部变量表,操作数栈,方法出口等信息
    局部变量表存放编译期可知的基本数据类型boolean byte char short int float long double以及对象引用reference
    线程请求深度大于虚拟机允许的最大深度抛出异常StackOverFlowError(典型场景,递归死循环)
    程序计数器
    记录当前线程执行的行号,为了线程切换能恢复到正确的执行位置,各个线程之间互不影响

    运行时常量池
    String a = “123” String b = ‘123’ == 为true 在方法区里面分配内存
    String c = new String(“123) 分配到堆里 ==为false

    相关文章

      网友评论

          本文标题:Jvm运行时数据区

          本文链接:https://www.haomeiwen.com/subject/ursxwhtx.html