![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
汉森X
哈工大计算机系学生
展开
-
JVM学习02——对象的创建与访问
本文将简单介绍HotSpot虚拟机在Java堆中对象的创建和访问。一、对象的创建public class Test{ public static void main(String[] args){ Object obj=new Object(); } }1.当虚拟机遇到一条new指令时,首先将检查这个指令的参数是否能在常量池中定位到一个类的符号原创 2016-10-24 16:44:42 · 788 阅读 · 1 评论 -
JVM学习03——垃圾收集算法
一、判断对象是否存活1.引用计数算法 个对象添加一个引用计数器,当有一个地方应用它时计数器加1;当引用失效时,计数器减1;任何时刻计数器为0的对象不可能再被使用。 缺点:循环引用的场景下无法实现回收,例如下面的图中,ObjectC和ObjectB相互引用,那么ObjectA即便释放了对ObjectC、ObjectB的引用,也无法回收。HotSpot在实现GC时未采用这种方式。 2. 可达性分原创 2016-10-30 16:21:51 · 771 阅读 · 0 评论 -
JVM学习04——垃圾收集器
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。这里讨论的收集器基于JDK 1.7Update 14之后的HotSpot虚拟机。如图展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明他们可搭配使用。1.Serial收集器 Serial收集器是一个单线程的新生代垃圾收集器,使用复制收集算法。它的“单线程”是指,它在进行垃圾收集时必须停止其他所有的工作线程原创 2016-11-02 22:32:24 · 742 阅读 · 1 评论 -
JVM学习01——内存区域及内存溢出
运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存区域划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范(Java SE 7版)的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域。 1.程序计数器(Program Coun原创 2016-10-22 21:09:09 · 8862 阅读 · 2 评论 -
JVM学习05——内存分配与回收
对象的内存分配从大方向上将,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接在栈上分配),对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB(转换后援缓冲器)上分配。少数情况也可能直接分配在老年代中,分配规则不固定,取决于当前垃圾收集器组合及虚拟机内存相关参数。 -XX:+PrintGCDetail 打印内存回收日志1.对象优先在Eden区原创 2016-11-06 09:24:35 · 8746 阅读 · 4 评论 -
Java虚拟机学习 - 类加载过程
原文出处:http://blog.csdn.net/java2000_wl/article/details/8040633类加载机制: JVM把class文件加载的内存,并对数据进行校验、转换解析和初始化,最终形成JVM可以直接使用的Java类型的过程就是加载机制。 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的生命周期包括了:加载(Loading)、验证(Verification)、准备转载 2016-11-12 09:42:07 · 776 阅读 · 0 评论 -
JVM学习06——类加载器
一、类加载器 虚拟机设计团队把类加载过程中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。二、类与类加载器 类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远远不限于类加载阶段。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Jav原创 2016-11-14 19:44:37 · 627 阅读 · 0 评论