JMV-2-基本构造和各区域作用

6 篇文章 0 订阅

读者朋友,下午好。

这里介绍下JVM的组成、各部分作用、各部分容易发生的问题等,一图胜千言。

内容均来自:
《深入理解Java虚拟机 JVM高级特性与最佳实践》 周志明著 第三版
机械工业出版社

当然也可以用电脑画图,但是确实没有手绘方便。

在这里插入图片描述

通过上面的图,我们可以知道以下信息:

1、JVM有几个区域
2、每个区域的作用?
3、每个区域会发生什么问题?
4、内存泄漏、内存溢出的区别?
内存泄漏-Memory Leak
内存溢出-Memory Overflow
内存泄漏,表明有些对象导致GC不能回收,想办法让其可以让GC回收即可;内存溢出则需要通过调整-Xms -Xmx参数来调整虚拟机内存大小。

5、每个区域涉及的一些概念:如局部变量表在哪个区域?局部变量槽呢?哪里是线程私有的?哪里是线程共享的?哪个区域会频繁发生GC?哪个区域相对不频繁?

测试对问题1、问题2的理解程度,可以看以下代码,能回答上表明确实看懂了。

package com.cmh.concurrent.jvm;

/**
 * Author: 起舞的日子
 * Date:2021/5/15 10:45 上午
 * <p>
 * staticObj、instanceObj、localObj存放在哪里?
 */
public class JHSDB_TestCase {
    static class Test {
        static ObjectHolder staticObj = new ObjectHolder();
        ObjectHolder instanceObj = new ObjectHolder();

        void foo() {
            ObjectHolder localObj = new ObjectHolder();
            System.out.println("done");
        }
    }

    private static class ObjectHolder {
    }

    public static void main(String[] args) {
        Test test = new JHSDB_TestCase.Test();
        test.foo();
    }
}

请回答: staticObj、instanceObj、localObj分别在哪个区域?怎么证明?
查看具体在哪个区域,在介绍虚拟机性能监控、故障处理工具的时候自然就知道了;目前需要回答他们在哪个区域?
staticObj: 方法区 这个属于静态变量,和类同时存在,和类相关的、静态、常量都在方法区。
instanceObj: 堆 new的对象一般都在堆区域
localObj:栈 此变量属于局部变量,在方法中,在方法的局部变量表里放着,所以在栈中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值