JVM内存模型之本地方法栈和堆

1. 本地方法栈定义

        一些带有native关键字的方法就是需要JAVA去调用本地的C或C++方法,因为Java有时候没法直接和操作系统底层交互,所以需要用到本地方法栈,服务于带native关键字的方法

2. 堆的定义

        Heap 堆:通过关键字创建的对象都会被放在堆内存

3. 堆的特点

        (1)它是线程共享的,堆内存中的对象需要考虑线程安全问题

        (2)有垃圾回收机制

        (3)堆内存溢出:java.lang.OutofMemoryError-java heap space.堆内存溢出

        (4)堆内存溢出演示案例 

public class heap_1 {
    public static void main(String[] args) {
        int i = 0;
        try {
            ArrayList<String> list = new ArrayList<>();
            String a = "hello";
            while(true){
                list.add(a);
                a = a + a;
                i++;
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(i);
        }
    }
}

              Xmx:该JVM参数表示java堆可以扩展到的最大值

        (5)堆内存诊断

                 — jps 工具:查看当前系统中有哪些java进程

                 — jmap工具:查看堆内存占用情况jmap - heap 进程id

                 — jconsole工具:图形界面的,多功能的检测工具,可以连续监测

        (6)堆内存诊断案例

public class heap_2 {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("1...");
        Thread.sleep(3000); // 执行之后打开jconsole诊断平台
        byte[] array = new byte[1024*1024*10]; // 10Mb的字节对象
        System.out.println("2...");
        Thread.sleep(2000);
        array = null;
        System.gc();  // 垃圾回收
        System.out.println("3...");
        Thread.sleep(1000000L);        
    }
}

 

     

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值