Stack属于栈的区域,属于每条线程私有的。

方法区和本地方法栈有很大的不同,方法区是用Java级别角度做的代码,本地方法栈指向的是C/C++。

Java开发,对象就在堆中,一般而言,堆中只有对象。

堆溢出测试:程序运行设置:-verbose:gc -Xms10M -Xmx10M -Xss128k -XX:+PrintGCDetails
package com.dt.spark.jvm.basics;

import java.util.ArrayList;

import java.util.List;

class Person{ }

public class HelloHeapOutOfMemory {

         public static void main(String[] args) {

                   System.out.println("HelloHeapOutOfMemory");

                   List persons = new ArrayList();

                   int counter = ;

                while(true){

                         persons.add(new Person());

                         System.out.println("Instance: " + (++counter));

                }

         }

}
报错:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

栈溢出测试:

package com.dt.spark.jvm.basics;

public class  HelloStackOverFlow {

    private int counter;

    public void count() {

       counter++;

       count();

    }

    public static void main(String[] args) {

        System.out.println("HelloStackOverFlow");

        HelloStackOverFlow helloStackOverFlow= new HelloStackOverFlow();

        try {

            helloStackOverFlow.count();

        } catch(Exception e) {

            e.printStackTrace();

            throw e;

        }   

    }

}
报错:Exception in thread "main" java.lang.StackOverflowError

常量区溢出报错测试

package com.dt.spark.jvm.basics;

import java.util.ArrayList;

import java.util.List;

public class HelloConstantOutOfMemory {

         public static void main(String[] args) {

                    try {

                    List stringList = new ArrayList();

                    int item = ;

                    while(true){

                       stringList.add(String.valueOf(item++).intern());

                    }

                } catch (Exception e) {

                    e.printStackTrace();

                    throw e;

                }

         }

}
报错:Exception in thread "main" [Full GC (Ergonomics) java.lang.OutOfMemoryError: GC overhead limit exceeded

DirectMemory溢出报错测试:

package com.dt.spark.jvm.basics;

import java.nio.ByteBuffer;

public class HelloDirectMemoryOutOfmemory {

    private static final int ONE_GB = **;

     private static int count= ;

    public static void main(String[] args) {

          try {          

               while (true) {

                  ByteBuffer buffer = ByteBuffer.allocateDirect(ONE_GB);

                  count++;
} } catch (Exception e) { System.out.println("Exception:instance created "+count); e.printStackTrace(); } catch (Error e) { System.out.println("Error:instance created "+count); e.printStackTrace(); }
} }
报错:java.lang.OutOfMemoryError: Direct buffer memory

JVM内存四大类型:Heap,Stack,Contant,DirectMemory等的更多相关文章

  1. 转:JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )

    原文地址:JVM 内存初学 (堆(heap).栈(stack)和方法区(method) ) 博主推荐 深入浅出JVM 这本书 先了解具体的概念:JAVA的JVM的内存可分为3个区:堆(heap).栈( ...

  2. [转]JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )

    这两天看了一下深入浅出JVM这本书,推荐给高级的java程序员去看,对你了解JAVA的底层和运行机制有比较大的帮助.废话不想讲了.入主题: 先了解具体的概念:JAVA的JVM的内存可分为3个区:堆(h ...

  3. JVM 内存初学 堆(heap)、栈(stack)和方法区(method)

    这两天看了一下深入浅出JVM这本书,推荐给高级的java程序员去看,对你了解JAVA的底层和运行机制有比较大的帮助.废话不想讲了.入主题:先了解具体的概念:JAVA的JVM的内存可分为3个区:堆(he ...

  4. JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )(转载)

    想想面试的时候很多会问jvm这方面的问题虽然还是菜鸟不太能用到现在但是还是了解一下, 找资料的时候看见个大佬写的很好转载到这方便以后自己复习和给大佬做宣传 以下为大佬的博客原文: 这两天看了一下深入浅 ...

  5. JVM内存—堆(heap)栈(stack)方法区(method) (转)

    JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 堆区:1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令 ...

  6. JVM内存模型——堆(heap)、栈(stack)和方法区(method)

      JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 堆区:堆内存用于存放由new创建的对象和数组.堆是JVM管理的内存中最大的一块,堆被所有线程共享,目的 ...

  7. JVM 内存 (堆(heap)、栈(stack)和方法区(method) )

    JVM 内存初学 (堆(heap).栈(stack)和方法区(method) ) 堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令)2.jv ...

  8. JVM内存区域参数配置

    转自:https://www.jianshu.com/p/5946c0a414b5 需要提前了解的知识点: JVM内存模型 JVM垃圾回收算法 下图是JVM内存区域划分的逻辑图   JVM内存区域逻辑 ...

  9. JVM 内存区域大小参数设置

    JVM内存包括区域 Heap(堆区) New Generation(新生代) Eden 伊甸园 Survivor From Survivor To Old Generation(老年代) 方法区 Pe ...

随机推荐

  1. sqlserver、mysql怎样获取连接字符串

    sqlserver.mysql怎样获取连接字符串 步骤: 一.新建文本文档xxx.txt,改动文件类型为.udl 二.打开该文件,在<提供数据>中找到相应的服务. 三.在连接中选择须要的数 ...

  2. 【mysql】一次有意思的数据库查询分析。

    本文是在做一家汽车配件的电商网站时,大体情景是一个List.php页面,该页面分页列出部分配件并统计总数量用于分页. 当然该页面中也可以指定一下查询条件,如适配的车辆品牌.车系.排量.年份等,一件商品 ...

  3. Nucleus PLUS的启动、执行线程和中断处理

    nucleus系统是实时嵌入式操作系统,具有实时.任务抢先.多任务内核,当中95%的代码由C语言写成,极易移植.开放的源代码使得配置和裁剪方便,再加上体积小(所有二进制映像可仅20K).响应高速等特性 ...

  4. 通过/proc/sys/net/ipv4/优化Linux下网络性能

    通过/proc/sys/net/ipv4/优化Linux下网络性能 /proc/sys/net/ipv4/优化1)      /proc/sys/net/ipv4/ip_forward该文件表示是否打 ...

  5. 【Cubian】set up

    源: http://mirrors.163.com/.help/debian.html https://lug.ustc.edu.cn/wiki/mirrors/help/debian 下载地址: h ...

  6. python3----requests

    import requests def get_html_text(url): try: r = requests.get(url, timeout=30) r.raise_for_status() ...

  7. AWS系列-AWS EC2实例类型改配(机器配置升级)

    1.1 EC2实例升级需要先把升级的实例停机才能升级 1.2 如图选择需要升级的EC2,点击操作,实例设置,更改实例类型 1.3 选择你要想的配置,点击应用 1.4 启动EC2实例即可

  8. ItcastOA_整体说明_准备环境

    1. 整体说明 1.1. 项目说明 1.1.1. OA概述 OA是Office Automation的缩写,本意为利用技术的手段提高办公的效率,进而实现办公的自动化处理.实现信息化.无纸化办公,可方便 ...

  9. ListView中的方法

    getCount(); getItem(); getItemId(); getView(); getViewCountType();

  10. JSP小例子——以Model1的思想实现用户登录小例子(不涉及DB操作)

    Model1简介现在比较流行的就是Model1和Model2,这里介绍Model1.在Model1模型出现前,整个Web应用的情况是:几乎全部由JSP页面组成,JSP页面接受处理客户端请求,对请求处理 ...