
JVM(Java Virtual Machine)
Tenacity_
为了改变而努力,为了努力而改变
展开
-
Java内存管理及内存溢出(OOM)
1.程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。 由于原创 2018-01-22 10:29:52 · 327 阅读 · 0 评论 -
HotSpot虚拟机中的对象创建以及内存分布
1.对象的创建 虚拟机遇到一条new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加解析和初始化过。如果没有,那必须先执行相应的类加载过程。 在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。假设Jav原创 2018-01-22 10:33:21 · 258 阅读 · 0 评论 -
JVM对那些区域进行回收
Java运行时数据区域:程序计数器、JVM栈、本地方法栈、方法区和堆。 由于程序计数器、JVM栈、本地方法栈 3 个区域随线程而生随线程而灭,对这几个区域内存的回收和分配具有确定性。而方法区和堆则不一样,程序需要在运行时才知道创建那些对象,对这部分内存的分配是动态的,GC关注的也就是这部分内存。原创 2018-01-28 17:13:21 · 229 阅读 · 0 评论 -
怎样判断是否需要垃圾回收/对象是否存活
引用计数法:给对象添加一个引用计数器,每当一个对象引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器值为0的对象就是不可能再被使用的。 这个算法虽然效率很高,但是主流的Java虚拟机里面没有选用引用计数算法来管理内存,其中最主要的原因是它很难解决对象之间相互循环引用的问题。 可达性分析算法:主流的语言都选用这个算法来判定对象是否存活的。这个算法的主要思想是通过一系列的称为“原创 2018-01-28 18:15:30 · 303 阅读 · 0 评论 -
JVM中的引用
在JDK1.2之后,Java对引用的概念进行了补充,将引用分为强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference) 4 种,这 4 中引用强度逐渐减弱。 强引用就是指程序代码之中普遍存在的,类似“Object obj = new Object()” 这类的引用,只要强引用孩还在,原创 2018-01-28 18:29:37 · 236 阅读 · 0 评论