java虚拟机内存
2022-08-30 19:51:54 0 举报
AI智能生成
JVM知识点概览
作者其他创作
大纲/内容
控制字节码的执行顺序
每个处理器都有一个独立的程序计数器,用于保存和恢复各个线程之间切换的上下文环境
java方法:记录正在执行的虚拟机字节码指令的地址
本地方法(c语言实现):计数器的值为空(undeifned)
程序计数器
每个方法被执行时,都会创建一个栈帧
存储局部变量,操作数栈,动态链接,方法出口
每次方法调用对应了虚拟机栈的入栈,执行完毕,对应了虚拟机栈的出栈。(debug模式的调试栈信息)
栈帧
我们一般笼统说的\"栈\"就是java虚拟机栈
有时候我们说的“栈”其实只代表局部变量表(Local Variables)https://wenku.baidu.com/view/37592fa380d049649b6648d7c1c708a1284a0a3e.html
栈
Java 虚拟机规范允许 Java 栈的大小是动态的或者是固定不变的如果采用固定大小的 Java 虚拟机栈,那每一个线程的 Java 虚拟机栈容量可以在线程创建的时候独立选定。如果线程请求分配的栈容量超过 Java 虚拟机栈允许的最大容量,Java 虚拟机将会抛出 StackOverflowError 异常如果 Java 虚拟机栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的虚拟机栈,那 Java 虚拟机将会抛出一个 OutOfMemoryError 异常
异常
java虚拟机栈
其结构,实现和虚拟机栈类似,区别就是其加载的是本地方法(Native)
其异常情况也和虚拟机栈一样
本地方法栈
线程私有
虚拟机所管理的内存中最大的一块
存储了几乎所有对象实例,例外的情况暂时不做了解
java垃圾回收管理的就是java堆内存
Eden空间
From Survivor空间
To Survivor空间
新生代
老年代
空间区分
堆大小通过-Xmx和-Xms设置
堆中内存完成实例引用分配,但无内存可分配存储对象真实数据,且内存无法扩容,抛出OOM
只有直接用 \"\
子主题
字符串常量池
外框
堆
类,方法的元数据
-XX:MetaspaceSize,初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。 -XX:MaxMetaspaceSize,最大空间,默认是没有限制的。
元空间
直接内存
https://www.cnblogs.com/duanxz/p/3520829.html
jdk1.8倍移除,在jdk1.6时其涵盖jdk1.8中的字符串常量池+元空间,jdk1.7时你函盖了现在的元空间,字符串常量池被迁移到堆中
永久代
方法区(非堆)
线程共享
java虚拟机内存1.8
收藏
收藏
0 条评论
下一页