![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
虚拟机
亮了的blog
喜欢学习各种新兴技术,并努力用于实践
展开
-
JVM虚拟机-OOM
1.java堆: java堆大小配置: 最大值:-Xmx 最小值:-Xms 当两个参数设置为一样时可以避免自动扩展 java堆内存中的OOM异常是实际应用中常见的内存溢出异常情况,当java堆出现内存溢出时,异常堆栈信息”java.lang.OutOfMemoryError”会跟着进一步提示”java heap space”.原创 2016-03-01 13:50:45 · 430 阅读 · 0 评论 -
JVM虚拟机-GC(对象)
1.概述: 内存运行时区域的各个部分,其中程序计数器,虚拟机栈,本地方法栈随线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出有条不紊执行入栈和出栈操作。每个栈桢分配内存数在类结构确定就是已知的。这几个区域不需要过多考虑回收的问题,在方法或线程结束时内存就自然回收了。 java堆和方法区因为只有在程序处于运行期间时才能知道会创建哪些对象,内存的分配和回收是动态的。GC主要关注原创 2016-03-01 17:10:34 · 615 阅读 · 0 评论 -
JVM虚拟机-GC(算法)
标记-清除算法 <1>原理:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记对象 <2>缺点: a. 标记和清除两个过程的效率都不高 b.空间问题:标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后, 在程序运行过程中需要分配较大对象时,无法找到足够的连续内存不得不提前触发一次GC 复制算法 <1>原理:将可用内原创 2016-03-01 17:35:41 · 363 阅读 · 0 评论 -
JVM虚拟机-内存分配与回收策略
1.概述: 对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况下也可能会直接分配在老年代中,分配的规则取决于使用的垃圾收集器组合和虚拟机中与内存相关的参数设置. 2.对象优先在Eden分配 对象在新生代Eden区中分配,Eden没有足够空间进行分配时,jvm将发起一次Minor GC (内存回收日志打钱:-XX:+P原创 2016-03-04 10:50:41 · 465 阅读 · 0 评论 -
JVM虚拟机-类加载
加载机制: JVM把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被JVM直接使用的java类型。 2.类的生命周期 类从被加载到jvm内存中开始,到卸载出内存为止,生命周期包括: 加载(loading) 验证(Verification) 准备(Preparation) 解析(Resolution) 初始化(Initialization)原创 2016-03-04 15:09:44 · 445 阅读 · 0 评论 -
JVM虚拟机-类加载器
1.概述: 实现通过一个类的全限定名来获取描述此类的二进制字节流的代码模块称之为类加载器,通常在JVM外部实现 2.类与类加载器 对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在JVM中的唯一性。比较两个类是否相等,只有在这两个类是由同一个类加载器加载的前提下才意义,否则即使两个类来源于同一个Class文件,被同一个虚拟机加载,只要加载它的classloader原创 2016-03-05 10:41:25 · 443 阅读 · 0 评论 -
JVM虚拟机-内存划分
1.图示: 2.内存区域介绍: <1>程序计数器(Program Counter Register) 占用的内存较小,当前线程所执行的字节码的行号指示器,字节码解释器工作时通过改变这个计数器的值为选取下一条需要执行的字节码指令。 java虚拟机线程通过线程轮流切换并分配处理器执行时间方式来实现,因此在任何一个确定时间,一个处理器(内核)只会执行一条原创 2016-02-29 13:34:45 · 393 阅读 · 0 评论 -
JVM虚拟机-对象(HotSpot)
备注:本文涉及对象仅限于普通的java对象,不包括数组和class对象等 1. 对象创建 流程: <1>jvm遇到new指令时,首先检查该指令参数是否能在常量池中定位类的符号引用,同时检查该类符号是否被加载,解析,初始化过,没有则执行类的加载过程(详见类的加载) <2>jvm分配内存: 方式: a.指针碰撞:假设原创 2016-02-29 16:48:38 · 375 阅读 · 0 评论