zoukankan      html  css  js  c++  java
  • Java内存模型

    Java内存模型(JDK8)

    程序计数器:(Program Counter  Register)

    当前线程所执行的字节码行号指示器(逻辑)

    改变计数器的值来选取下一条需要执行的字节码指令

    和线程是一对一的关系即“线程私有”

    对Java方法计数,如果是Native方法则技术器的值为Undefined

    不会发生内存泄露

    Java 虚拟机栈(Stack)

    Java方法执行的内存模型

    包含多个栈帧

    递归为什么会引发java.lang.StackOverflowError 异常

    递归过深,栈帧数超过虚拟机深度

    虚拟机栈过多,会引发java.lang.OutOfMemoryError异常

    元空间(MetaSpace)与永久代(PermGen)的区别

     元空间使用本地内存,而永久代使用JVM内存

      java.lang.OutOfMemoryError:PermGen space

    MetaSpace相比PermGen的优势

    1. 字符串常量池存在永久代中,容易出现性能问题和内存溢出。  
    2. 列和方法的信息大小难以确定,给永久代的指定带来困难。
    3. 永久代会为GC带来不必要的复杂性。

    Java堆(Heap)

    对象实例的分配区域

    GC管理的主要区域

     

    1.新生代:Eden+From Survivor+To Survivor

    2.老年代:OldGen

    3.永久代(方法区的实现) : PermGen----->替换为Metaspace(本地内存中)

    常见问题

    JVM 三大性能调优参数  -Xms -Xmx -Xss的含义

    -Xss :  规定了每个线程虚拟机栈(堆栈)的大小,256k一般足够,影响此进程中,并发线程数的大小。

    -Xms:  堆的初始值

    -Xmx:  堆能达到的最大值

    Java内存模型中堆和栈的区别 -  内存分配策略

    静态存储: 编译时确定每个数据目标在运行时的存储空间需求

    栈式存储: 数据区需求再编译是未知,运行时模块入口确定

    堆式存储:编译时或运行时模块入口都无法确定,动态分配。

    联系: 引用对象、数组时,栈里定义变量保存堆中目标首地址

     

    感谢观看,感谢支持。

  • 相关阅读:
    BZOJ.1034.[ZJOI2008]泡泡堂(贪心)
    BZOJ.4247.挂饰(背包DP)
    Codeforces.1040E.Network Safety(思路 并查集)
    LOJ.2863.[IOI2018]组合动作(交互)
    BZOJ.3624.[APIO2008]免费道路(Kruskal)
    BZOJ.4237.稻草人(CDQ分治 单调栈)
    BZOJ.3551.[ONTAK2010]Peaks加强版(Kruskal重构树 主席树)
    BZOJ.4946.[NOI2017]蔬菜(贪心 离线)
    BZOJ.2660.[BJOI2012]最多的方案(DP)
    BZOJ.3994.[SDOI2015]约数个数和(莫比乌斯反演)
  • 原文地址:https://www.cnblogs.com/haoprogrammer/p/11131564.html
Copyright © 2011-2022 走看看