第一讲JVM内存四大类型:Heap,Stack,Contant,DirectMemory等

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");

Listpersons = new ArrayList();

int counter = 0;

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 classHelloStackOverFlow {

private int counter;

publicvoidcount()

{

counter++;

count();

}

public static void main(String[] args)

{

System.out.println("HelloStackOverFlow");

HelloStackOverFlow helloStackOverFlow=

newHelloStackOverFlow();

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 = 0;

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 classHelloDirectMemoryOutOfmemory {

private static final int ONE_GB =

1024*1024*1024;

private staticintcount=

1;

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

java direct memory_第一讲  JVM内存四大类型:Heap,Stack,Contant,DirectMemory等相关推荐

  1. 深入理解Java虚拟机学习笔记-1.JVM内存模型

    JVM内存模型 1.内存模型结构图 名称 特征 作用 配置参数 异常 程序计数器 占用内存小,线程私有, 生命周期与线程相同 大致为字节码行号指示器 无 无 虚拟机栈 线程私有,生命周期与线程相同,使 ...

  2. java 内存溢出的分类_【深入理解Java虚拟机】读后感:JVM内存划分与内存溢出小结...

    扫码关注公众号:Java 技术驿站 发送:vip 将链接复制到本浏览器,永久解锁本站全部文章 [公众号:Java 技术驿站] [加作者微信交流技术,拉技术群] # JVM内存划分与内存溢出小结 # 1 ...

  3. java堆栈句柄,深入了解JVM—内存区域

    1.Java虚拟机运行时数据区 在前面的几篇博文中,我们只是简单的把内存区域分为了堆和栈,但其实,这种分法是十分粗糙的,jvm在实际运行的时候,内存区域的划分绝对不是那么简简单单的就两块,我们一起看下 ...

  4. java查看cpu核数以及jvm内存

    /*** 我的机器是8核心,16G内存*/ public class JvmDemo {public static void main(String[] args) {// 查看机器的核数System ...

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

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

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

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

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

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

  8. 第三章 JVM内存回收区域+对象存活的判断+引用类型+垃圾回收线程

    注意:本文主要参考自<深入理解Java虚拟机(第二版)> 说明:查看本文之前,推荐先知道JVM内存结构,见<第一章 JVM内存结构> 1.内存回收的区域 堆:这是GC的主要区域 ...

  9. 深入理解JVM内存模型

    博客园 首页 新随笔 联系 管理 订阅 随笔- 323  文章- 0  评论- 40  深入理解JVM-JVM内存模型 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和 ...

最新文章

  1. [C#项目开源] MongoDB 可视化管理工具 (2011年10月-至今)
  2. AI科研绘图1:零基础入门和基本图形绘制
  3. reactjs脚手架配置http-proxy-middleware代理解决跨域问题
  4. Django中发件邮箱的设定
  5. Android开发之EditText编辑框光标位置
  6. 软件工程---18.面向服务的软件工程
  7. 解决:java.lang.IllegalStateException: ApplicationEventMulticaster not initialized
  8. jmeter持续时间循环控制器_不写代码实现条件循环?只用Jmeter就能实现
  9. linux挂载iso镜像文件_Linux服务器如何识别移动硬盘?
  10. redis PUB/SUB(发布/订阅)
  11. c语言交换字符串,C语言中怎样交换两个字符串?C语言中怎样交 – 手机爱问
  12. 报错 应用程序池 中asp.net 4.0 自动停止
  13. ubuntu文件名乱码(转载)
  14. C语言2009选择题答案,全国2009年10月自学考试C加加程序设计试题
  15. 【高级软件工程课后作业】
  16. 智能车寻线算法之北科寻线可能用的方法
  17. 女孩子的试炼html5魔塔
  18. Android手机令牌教程
  19. COLA 架构使用规范化
  20. 基于STM32单片机的天然气甲烷硫化氢气体检测仪原理图PCB

热门文章

  1. Shell文本处理三剑客(三)
  2. tomcat 内存调整
  3. Android 开发之ViewPage官方文档学习笔记
  4. 【003】【深入解析Java中volatile关键字的作用】
  5. dex、apk完整性校验
  6. 前端三大框架Angular React Vue
  7. c/c++ 标准库 string
  8. 判断页面打开的浏览器信息
  9. AC日记——[ZJOI2009]狼和羊的故事 bzoj 1412
  10. SP2010开发和VS2010专家食谱--第一章节--列表和事件接收器(6)--使用列表事件接收器...