• 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内存模型中堆和栈的区别 -  内存分配策略

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

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

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

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

     

    感谢观看,感谢支持。

  • 相关阅读:
    HTML当中特殊字符的表示
    溢出文本用“...”代替
    【转】图标字体化浅谈
    字体在网页中画ICON图标
    图片轮播
    js获取网页屏幕可视区域高度
    MVC入口程序 | 简单调用及实例化
    初学者对于MVC架构模式学习与理解
    PHP初学习笔记(2015/4/8)
    linux常用20命令 --转载
  • 原文地址:https://www.cnblogs.com/haoprogrammer/p/11131564.html
Copyright © 2020-2023  润新知