zoukankan      html  css  js  c++  java
  • jvm内存区域重点概要

    前言

    jvm不论对于进阶高级java工程师来说,还是对于面试而言都是至关重要的,那么我们就来看一下jvm内存区域划分。

    1.jvm的内存区域分类

    jvm内存区域分为:

    私有区域:程序计数器,java虚拟机栈;

    共享区域:堆,本地方法栈,方法区;

    2.堆内存:

    • 存放实例变量,new出来的对象
    • 垃圾回收区回收的主要区域;
    • 位于线程共享区;
    • 可能会发生OutOfMemoryError;

      举例说明堆内存溢出的情况:(配置vm参数:-Xms1m -Xmx1m -XX:+HeapDumpOnOutOfMemoryError)

    public class HeapOOM {
        public static void main(String[] args) {
            while (true) {
                new HeapOOM();
            }
        }
    }
    

      

    3.虚拟机

    • 存放基本类型变量;
    • 可能会发生StackOverflowError和OutOfMemoryError;

       异常StackOverFlowError举例:

    public class Demo {
    
        int stack = 1;
    
    
        public static void main(String[] args) {
            new Demo().increase();
        }
    
        public void increase() {
            stack++;
            increase();
        }
    
    }

    结果:Exception in thread "main" java.lang.StackOverflowError

      

    4.本地方法栈

    • 执行native方法;

    5.方法区

    • 存放虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码;
    • 包含常量池;

    6.程序计数器

    • 当前线程所执行的字节码的行号指示器(即记录当前线程执行到哪里,同时下一步应该执行哪一步操作);
    • 如果线程正在执行的是一个java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果执行的是native方法,这个计数器为空;
    • 唯一不会发生OutOfMemoryError的区域;

    具体的可以参考《深入了解java虚拟机这本书》,内容过于枯燥,更多的是一些概念性的东西,需要多多实践才能记住。

    Ride the wave as long as it will take you.
  • 相关阅读:
    牛儿
    Tarjan算法
    There is no resul…
    Struts2+JQuery+Json登陆实例
    struts2+jquery+easyui+datagrid+j…
    Spring:JdbcTemplate使用指南
    使用Spring的jdbcTemplate进一步简…
    JDBC连接MySQL数据库及示例
    PLSQL导入/导出数据方法
    PLSQ创建用户L
  • 原文地址:https://www.cnblogs.com/jianpanaq/p/9085188.html
Copyright © 2011-2022 走看看