
虚拟机
IamOceanKing
这个作者很懒,什么都没留下…
展开
-
Java内存区域与内存溢出异常
—–大部分摘录自《深入理解Java虚拟机》根据《Java虚拟机规范(第2版)》的规定,Java虚拟机所管理的【内存】将会包含以下几个【运行时数据区域】 1. 程序计数器 2. Java虚拟机栈 3. 本地方法栈 4. Java堆 5. 方法区 6. 运行时常量池 7. 直接内存程序计数器 存储内容:是一块较小的内存空间,他的作用可以看做是当前线程所执行的字节码的行号指原创 2017-03-24 16:09:40 · 517 阅读 · 0 评论 -
制造“StackOverFlowError”异常
package mytest;/** * 栈空间异常:<BR> * 场景一:OutOfMemoryError线程请求的栈深度大于虚拟机所允许的最大深度。即栈的个数太多,也可理解为线程数太多。 * 解决方案:此时可以通过降低-Xss值(每个线程所用空间)来提高线程数<BR> * 场景二:StackOverFlowError,虚拟机在扩展栈时无法申请到足够的空间。即超出-Xss对单个栈空间的限制原创 2017-03-28 10:43:50 · 417 阅读 · 0 评论 -
方法区溢出+直接内存溢出
方法区溢出方法区用于存放Class相关信息,如类名、访问修饰符、常量池、字段描述、方法描述等。大量的类产生时,就会造成溢出异常。如spring等框架通过代理类自动生成增强类、大量的jsp文件的应用、同一个类文件被不同的类加载器重复加载本地内存异常可通过–XX:MaxDirectMemorySize指定。默认与Java堆得最大值一样。原创 2017-03-28 11:04:56 · 1653 阅读 · 0 评论 -
遇到了“java.lang.OutOfMemoryError: Java heap space”怎么办?
–引自《深入理解Java虚拟机》package mytest;import java.util.ArrayList;import java.util.List;/** * 遇到了“java.lang.OutOfMemoryError: Java heap space”怎么办?<BR> * 首先判断是“内存泄漏”还是“内存溢出”。一般的手段是首先通过内存映射分析工具对dump出来的【堆转储快照】原创 2017-03-27 17:25:03 · 1945 阅读 · 1 评论 -
垃圾回收器
新生代(Young generation)Serial 算法: 特点:单线程、暂停所有工作线程 应用场景:client模式下的默认新生代收集器。也就是说在小规模程序下还是很高效的 搭档:CMSParNew 算法:复制算法 特点:多线程、仍会暂停所有工作线程。继承自Serial 应用场景:Server模式下首选的新生代收集器。 搭档:CMS 使用方式:使用配置-XX:+UseConc原创 2017-03-30 10:26:43 · 561 阅读 · 0 评论 -
虚拟机性能监控与实战
jps[JVM Process Status Tool]显示系统内所有Hotspot虚拟机进程 -m:显示虚拟机进程启动时传递给主类main函数的参数 -l:输出主类全名 -v:输出虚拟机进程启动时jvm参数jstat[JVM Statistics Monitoring Tool]手机Hotspot虚拟机各方面的运行数据 jstat option vmid(虚拟机进程id) interval原创 2017-03-31 11:54:02 · 1022 阅读 · 0 评论 -
垃圾回收机制和内存的动态分配
回收哪些对象回收不可用对象。根据“可达性分析算法”判断对象是否可用。算法定义:将一系列成为“GC Root”的对象作为起点向下搜索,对于搜索路径所覆盖到的对象即为可用。即GC Root可达即可用哪些对象可作为GC Root【虚拟机栈中】引用的对象(栈帧中的本地变量表),是否可以理解为局部变量引用的对象? 【方法区中】类静态属性引用的对象 【方法区中】常量引用的对象 【本地方法栈中】JNI(一般原创 2017-03-28 11:57:32 · 1174 阅读 · 0 评论 -
类文件结构
参考《深入理解Java虚拟机》class文件格式采用类似C语言结构体的伪结构来存储,只有两种数据类型:无符号数和表 1、无符号数:用u*来表示,比如u1,u2,u4,u8.“*“代表字节数。他可以描述数字、索引引用,数量值,或者按UTF8编码的字符串。【可见无符号数里面的数不是指数字,而是一种类似于基本类型的东西,int、char等等】 2、表:由多个无符号数或其他表作为数据原创 2017-04-13 11:59:49 · 387 阅读 · 0 评论