zoukankan      html  css  js  c++  java
  • java内存区域

      java在运行过程中会把内存分为若干区域。分别是

    1.程序计数器

      程序计算器是一块较小的内存,是当前线程所执行字节码的行号指示器。分支、循环、跳转、异常处理、线程恢复等功能都依赖于这个计数器来完成。

    2.java虚拟机栈

      java虚拟机栈是线程私有的,生命周期与线程相同。每个方法在执行的时候都会创建一个栈帧,用于存储局部变量表、操作栈,动态链接、方法出口等信息。java虚拟规范中,对该区域定义了两种异常。如果线程请求的栈深度超过虚拟机运行的深度则抛StackOverflow异常,如果线程无法横向扩展时,抛OutOfMemoryError异常。

    3 本地方法栈

      本地方法栈和java虚拟机栈类似,区别时,本地方法栈为虚拟机使用到的native方法服务。

    4 java堆

      java堆是最大的一块内存。线程共享。堆内存可分为新生区和老年区。新生区又分为Eden区、From Suvivor区、to Suvivor区。

    5 方法区(java8后叫永久区)

      方法区线程共享,用于存储被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

    6 运行时常量区

      运行时常量区是方法区的一部分,Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池。用于存放编译期生成的各种字面量和符号引用,这部分将在类加载后存放到方法区的运行时常量池中。

    7 直接内存

      直接内存不是java运行时数据区的一部分。可以由本地native方法分配的堆外内存,通过堆内的引用进行操作。

  • 相关阅读:
    mybatis使用Example进行条件查询
    博客园页面DIY
    内网穿透
    使用ResponseEntity进行返回json数据
    spring中的ResponseEntity理解
    springboot整合mybatis通用Mapper
    解决pip安装过慢的问题
    【记录】linux 命令拷贝文件到远程服务器,linux下载文件到本地
    【记录】ELK之logstash同步mysql数据到Elasticsearch ,配置文件详解
    【记录】logstash 命令解释
  • 原文地址:https://www.cnblogs.com/notejava/p/7197895.html
Copyright © 2011-2022 走看看