Java 运行时数据区

Java 运行时数据区

  • 线程栈
  • 本地方法栈
  • 方法区
  • 程序计数器

Java 运行时数据区
我们的java文件,首先编译成class文件。通过类加载器加载到我们的Java虚拟机。Java虚拟机中,最大的一块是运行时数据区。

其中堆和方法区是所有线程共有的。线程栈、本地方法栈、程序计数器是每个线程单独拥有一份的。

类装载系统: 把class文件加载到Java虚拟机中
字节码执行引擎: 修改程序计数器
堆:存放对象
线程栈:存放线程私有的一些数据

    局部变量表: 存放局部变量
    操作数栈:存放需要的一些操作
    动态链接:把符号引用转换为真实的引用
    方法出口: 记录这个方法执行完成后的返回位置

本地方法栈:存放本地方法的一些数据

Heap 堆区

Java 运行时数据区
Heap堆区是发生 OOM故障最多的地方,堆中保存着我们创建的实例对象。堆是线程共享的。

堆的内存空间是可以自定义大小的,同时也支持运行时动态修改。通过 -Xms-Xmx者两个参数可以修改堆的 初始值最大值-X指的是JVM运行参数, ms即memeory start的简称,代表 最小堆容量mx是memeory max的简称,代表的是 最大堆容量; 例如,-Xms256M:表示堆的初始值为256M,-Xmx1024M:表示堆的最大值是1024M

Heap堆区主要分两个区,Young区和Old区,又称为新生代和老年代。

Young区分为1个 Eden和2个 Survivor.

Old区,当 Young区的对象满足一定的条件就可以放入 Old区。每个对象都有一个计数器,每当进行一次MiniGC,对象的年龄就会+1。当对象的的年龄到达指定的阈值,就会从 Young区移到 Old区。可以通过 -XX:MAXTenuringThrehold参数来指定,默认值是15。 有些大对象也会直接被放入Old区,这种情况一定要特别关注

元空间的前身是 Pern区(Pern区,又叫永久代,在JDK8及以后的版本中已经被淘汰)。
Pern区,又叫永久代,在启动时大小就已经确定,难以进行调优,
Metaspace元空间,在本地内存中进行分配。并且 Pern区中所有内容中 字符串常量移至 堆内存,其他的内容,包括 类元信息字段静态属性方法常量等都移至 Metaspace

Original: https://www.cnblogs.com/hardyzhou/p/16618144.html
Author: hardyzhou
Title: Java 运行时数据区

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585140/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JAVA基础学习第六天!

    精华笔记: 1.数组: -复制: -System.arraycopy(a,1,b,0,4); -int[] b = Arrays.copyOf(a,6); a = Arrays.c…

    Java 2023年6月13日
    061
  • 面试突击57:聚簇索引=主键索引吗?

    在 InnoDB 引擎中,每张表都会有一个特殊的索引”聚簇索引”,也被称之为聚集索引,它是用来存储行数据的。 一般情况下,聚簇索引等同于主键索引,但这里有一…

    Java 2023年5月29日
    085
  • MYSQL8存储过程生成日历表以及异常处理

    一、环境 数据库:mysql8.0.25 社区版 操作系统:windows 11 Original: https://www.cnblogs.com/lzfhope/p/16503…

    Java 2023年6月9日
    0100
  • Docker之常用命令

    Docker常用命令 查看本地所有镜像【常用】 docker images 搜索镜像 docker search 镜像名称 docker search tomcat 拉取镜像,未指…

    Java 2023年6月8日
    079
  • SpringBoot整合knife4j

    一、 knife4j简介 1、简介 knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,它封装了swagger。前身是swagger-bootst…

    Java 2023年5月30日
    084
  • 微信公众号分享知识

    欢迎大家关注我的公众号,分享最新的学习知识点,谢谢! Original: https://www.cnblogs.com/yachao1120/p/12416297.htmlAut…

    Java 2023年6月5日
    071
  • DispatcherServlet 分发流程

    0 太长不看版 HTTPServlet 的 Service 方法将请求按类进行分解 主要是根据HTTP方法的类型调用 doXXX 方法 GET 和 HEAD 方法需要对 if-mo…

    Java 2023年6月9日
    0105
  • IDEA使用Gittee提交代码

    今天给大家分享一下如何从idea提交代码到gitee上面。1.先在gitee上创建仓库2.填写相应的信息3.下载git直接next一站式安装4.鼠标右键点击 Git Bash He…

    Java 2023年6月9日
    0101
  • SpringCloud微服务实战——搭建企业级开发框架(三十八):搭建ELK日志采集与分析系统

    一套好的日志分析系统可以详细记录系统的运行情况,方便我们定位分析系统性能瓶颈、查找定位系统问题。上一篇说明了日志的多种业务场景以及日志记录的实现方式,那么日志记录下来,相关人员就需…

    Java 2023年6月9日
    067
  • 面试题详解:如何用Redis实现分布式锁?

    说一道常见面试题: 使用Redis分布式锁的详细方案是什么? 一个很简单的答案就是去使用 Redission 客户端。Redission 中的锁方案就是 Redis 分布式锁的比较…

    Java 2023年6月7日
    090
  • 【Java分享客栈】一文搞定CompletableFuture并行处理,成倍缩短查询时间。

    前言 工作中你可能会遇到很多这样的场景,一个接口,要从其他几个service调用查询方法,分别获取到需要的值之后再封装数据返回。 还可能在微服务中遇到类似的情况,某个服务的接口,要…

    Java 2023年6月9日
    093
  • java反射机制(1)

    java反射概述 Java反射( Reflection )是Java非常重要的动态特性,通过使用反射我们不仅可以获取到任何类的成员方法( Methods)、成员变量( Fields…

    Java 2023年6月6日
    080
  • 使用etcd+confd管理nginx配置

    1、前言 最近在项目中用nginx做反向代理,需要动态生成nginx的配置。大概流程是用户在页面上新增域名、http或https协议以及端口信息,后台会根据域名自动生成一个ngin…

    Java 2023年5月30日
    086
  • Myeclipse+svn相关文章

    Myeclipse安装svn插件https://www.cnblogs.com/liuyk-code/p/7519886.html 使用svn https://jingyan.ba…

    Java 2023年6月5日
    078
  • rocketmq延时消息

    rocketmq提供一种延时消息的解决方案,就是在特定的时间到了,消息才会被投递出去供 consumer消费。 总体来是简单的场景是满足了,但是需要注意的是延时的时间是需要按照默认…

    Java 2023年6月16日
    095
  • 50道Redis高频面试题(13-20)

    十三、线上Redis持久化策略一般如何设置 如果对性能要求较高,在master最好不要做持久化,可以在某个slave开启aof备份数据,策略设置为每秒同步一次即可。 十四、一次线上…

    Java 2023年6月9日
    073
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球