深度理解JVM:内存管理概述

线程共享区:

方法区 :

存储虚拟机加载的类信息(类的版本,字段,方法,接口),常量,静态变量,及时编译器编译后的代码等数据
方法区和永久代,用永久代实现方法区hotSpot
垃圾回收在方法区的行为,一般很少利用,效率低
异常的定义
运行时常量池 : String a = “abc” 这里字符串放在方法区常量池中,String b = new String(“abc”) 这里会在堆中建立字符串对象,两者的变量a,b 都是存放在栈中的局部变量表中
(对象.intern:可以在常量池中建立字符串,代替字符换对象)

java堆 :

存放对象的实例
垃圾收集器管理的主要区域
新生代,老年代,Eden空间

线程独占区:

虚拟机栈:

描述的是java方法执行的动态内存模型
栈帧 : 就是一个将要执行的方法
局部变量表:存放编译器可知的各种基本数据的类型,
(局部变量表的内存空间在编译期完成分配,当进入一个方法时,这个方法需要分配多少内存是固定的,在方法运行期间是不会改变局部变量的大小)
栈的大小: 如果栈帧内存超出栈的大小,会出现栈内存溢出异常

本地方法栈:

本地方法栈为虚拟机提供执行native方法服务
虚拟机栈为虚拟机提供执行java方法服务

程序计数器:

记录当前执行的字节码的行数行号
处于线程独占区
如果线程执行java方法,计数器记录的是正在执行的虚拟机字节码指令的地址
如果正在执行的是navtive方法,计数器的值为undefined
此区域是唯一一个在java虚拟机规范中没有规定任何 内存溢出
情况的区域 goto : (跳到某一行,已经取消),目前是保留字

发布了71 篇原创文章 · 获赞 14 · 访问量 5611

猜你喜欢

转载自blog.csdn.net/flying_hengfei/article/details/105439957