首页
编程随笔
Java笔记
Html/Css/Js
Android
后端笔记
服务器搭建
BUG收集
Java异常
Android异常
在线工具
Json格式化
编码/解码
Epub在线编辑
登录
发布文章
个人文章
退出登录
首页
技术教程
BUG收集
在线工具
资源下载
登录
发布文章
退出登录
搜索
当前位置:
首页
-
博客
- 正文
关闭
jvm之运行时数据库
更新时间:2022-08-25 21:25:46
阅读数:742
发布者:落幕
### 1、Java代码执行流程 ![Java代码执行流程](https://www.speechb.com/blog/Java%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C%E6%B5%81%E7%A8%8B%E7%AE%80%E5%8D%95%E7%89%88%E6%9C%AC.jpg "Java代码执行流程") #### 1、方法区
元空间(jdk1.8及以上)和永久代(jdk1.8之前)都是方法区的具体实现,存储类和类加载器的元数据信息
java8中移除了永久代,新增了元空间的概念。原来的方法区是逻辑划分中的一个区域,对应hotspot jdk6中的永久代,可以说永久代是方法区在hotspot的一个具体实现,但是从jdk7以后方法区就“四分五裂了”,不再是在单一的一个去区域内进行存储。 java8中继承了一些jdk7中的改变:符号引用存储在native heap中,
字符串常量和静态类型变量存储在普通的堆区中
,这个影响了String的intern()方法的行为,这里不做intern的详述。 而在java8中移除了永久代,新增了元空间,其实在这两者之间存储的内容几乎没怎么变化,而是在内存限制、垃圾回收等机制上改变较大。
元空间的出现就是为了解决突出的类和类加载器元数据过多导致的OOM问题
,而从jdk7中开始永久代经过对方法区的分裂后已经几乎只存储类和类加载器的元数据信息了,到了jdk8,元空间中也是存储这些信息,而符号引用、字符串常量等存储位置与jdk7一致,还是“分裂”的方法区。 符号引用没有存在元空间中,而是存在native heap中,这是两个方式和位置,不过都可以算作是本地内存,在虚拟机之外进行划分,没有设置限制参数时只受物理内存大小限制,即只有占满了操作系统可用内存后才OOM。