深入java虚拟机 1 java内存区域与内存溢出的异常
来源:互联网 发布:软件盗版多 编辑:程序博客网 时间:2024/05/18 02:32
java虚拟机运行时候的数据区域
程序计数器:字节码解释器通过改变程序计数器来取得下一条字节码指令,分支 循环 跳转,异常处理等操作都依赖程序计数器。
每一个线程都有自己独占的程序计数器。
方法区:method area,用户存储被虚拟机加载的类信息,常量,静态变量,及时编译后的代码。在Hotspot虚拟机上叫做永久代(permanent generation),在这个区域上的内存回收主要是对类的卸载和对常量池的回收。
运行时常量池:运行时常量池 是方法区的一部分,class文件除了版本 字段,接口等描述外,有一个 constant pool table(常量表)用于报春编译期间生成的各种字面量和符号引用,这部分内容将在类加载后放入到运行时常量池中。并非是编译是产生的常量才能进入运行时常量池,运行期间也可以动态加入,比如String.intern方法。
java虚拟机栈:每一个线程都有自己独占的java虚拟机栈,这里的栈可以看成是 虚拟机栈中的局部变量表:各种基本类型,对象引用的句柄 returnAddress。这个区域可能有 StackOverFlowError和OutOfMemoryError两种类型的异常。
本地方法栈:与java虚拟机栈一样,只不做这里执行的是native方法。HotSopt 虚拟机将 java虚拟机栈和本地方法栈合二为一了。
java堆:作用是存放对象实例,也是GC(garbage collection)内存回收的主要地方。这个堆还可以进一步划分(为了GC)为新生代和老年代。这个区域可能出现OutOfMemoryError异常。
直接内存 Direct Memory:在JDK1.4引入NIO后可以使用Native方法直接分配堆外内存,然后通过DirectByteBuffer对象对其进行操作。
JVM相应参数
-Xms20mjvm堆的最小值为20-Xmx40mjvm堆的最大值为40-XX:HeapDumpOnOutOfMemoryError当发生OutOfMemoryError内存溢出时候Dump当前内存快照,方便分析-Xss128k栈的最大值为128k-XX:PermSize=10Mjvm初始分配的非堆内存(方法区和常量池的大小)-XX:MaxPermSize=100Mjvm分配的最大非堆内存(方法区和常量池的大小)-XX:MaxDirectMemorySize=10M直接内存的最大值 如果不分配 与Xmx一样大
1 0
- 深入java虚拟机 1 java内存区域与内存溢出的异常
- 深入java虚拟机 1 java内存区域与内存溢出的异常
- 深入理解Java虚拟机(1)虚拟机内存区域划分 与内存溢出异常
- 《深入理解Java虚拟机》读书笔记1——Java内存区域与内存溢出异常
- 深入理解java虚拟机-读书笔记1-Java内存区域与内存溢出异常
- 《深入理解Java虚拟机》读书笔记(1)---第2章 Java内存区域与内存溢出异常
- 深入理解Java虚拟机1~内存区域与内存溢出
- java---《深入理解java虚拟机》第二章【java内存区域与内存溢出异常】阅读笔记
- 【深入Java虚拟机】之一:Java内存区域与内存溢出
- 【深入Java虚拟机】之一:Java内存区域与内存溢出
- 【深入Java虚拟机】之一:Java内存区域与内存溢出
- 【深入Java虚拟机】之一:Java内存区域与内存溢出
- 【深入Java虚拟机】之一:Java内存区域与内存溢出
- 【深入Java虚拟机】之一:Java内存区域与内存溢出
- 【深入Java虚拟机】之一:Java内存区域与内存溢出
- 【深入Java虚拟机】之一:Java内存区域与内存溢出
- 【深入Java虚拟机】之一:Java内存区域与内存溢出
- 【深入Java虚拟机】之一:Java内存区域与内存溢出
- Hadoop实战-初级部分 之 Hadoop安装部署
- 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property
- 数字城市与智慧城市
- 怎样快速交换优质友情链接?
- mysql update in 嵌套子查询更新
- 深入java虚拟机 1 java内存区域与内存溢出的异常
- Java Web
- 最近新学的新技术,指针的又一应用
- 动态改变actionbar的menu菜单MenuItem
- C++获取代码运行时间
- 循环结构求π的近似值
- Database
- JDBC-ODBC桥驱动 个人理解
- 这可怎么整?都想吐了。