
JVM
文章平均质量分 79
JVM 技术
Onovo29
这个作者很懒,什么都没留下…
展开
-
JVM 内存划分
JVM(Java 虚拟机)是Java语言实现平台无关性的具体实现,是一个虚拟的计算机设备。以Java SE 7为标准,Java虚拟机在执行Java程序时把所管理的内存划分为若干不同的数据区域:由于下面有些讲解的需要,先说明几个概念:方法区(Method Area)[线程共享区域]是各个线程共享区域,方法区是保存类的信息:包括常量、类的类型(Class or Interface)、访问修饰符(public private等)等;运行时常量池(Runtime Constant Pool),用于存原创 2021-01-08 16:27:33 · 144 阅读 · 0 评论 -
JVM 对象加载浅谈
对象分配过程(虚拟机执行一条 new 指令时)已初始化:检查该指令对应的方法(初始化方法)能否在方法区(具体来说是常量池)找到检查对应的类是否被加载、解析和初始化过未初始化:执行相应的类加载过程,确定对象所需的内存大小以上过程有一些需要注意的点:分配方式我们如何区别哪一块内存是属于哪一个类?当内存是连续的(内存中所有被使用的内存在内存的某一部分,未使用的放在另一部分),那么分配新内存时只需要移动一下未分配的内存和已分配内存的的临界指针。但是随着内存释放,存在内存碎片问.原创 2021-01-08 16:29:23 · 117 阅读 · 0 评论 -
JVM 对象引用与垃圾回收
对象引用如何判断一个对象是否还被需要呢?其实唯一的准则就是是否还有变量引用它。比如Object o = new Object();o = new Object();上述代码新建了两个对象实例,第一个对象毫无疑问无法再被访问了,因此第一个对象就可以被回收了。这就是变量引用的准则,那么内部关于对象的引用是如何实现的呢?引用计数法这是判断对象是否被引用最直接的一种方法,即给每个对象添加一个引用计数器,当该对象被引用一次时,该对象的计数器就加一,引用失效时就减一当为0时,意味着不可能再被赋予其他引原创 2021-01-08 16:30:08 · 201 阅读 · 0 评论 -
JVM 垃圾收集器初探
垃圾收集算法标记-清除算法标记-清除(Mark-Sweep)算法,如同名字一样,分为两个阶段:即标记和清除阶段。首先标记处需要回收的对象(使用可达性分析),标记完成后统一回收。缺点:效率低,尤其是清除阶段,需要针对每个标记逐一清除产生内存碎片,导致分配较大对象时找不到合适的空间以上问题也是操作系统在文件管理时会遇到的问题,而找不到空间存放较大对象则会导致再一次垃圾收集的启动,影响效率。复制算法算法思想是,将内存空间平均分为同等大小的两块,其中一块用于存放内存,另一块空着。分配对象空间原创 2021-01-08 16:30:44 · 110 阅读 · 0 评论 -
JVM 垃圾收集器的种类
JVM将内存空间(堆)分为老年代和新生代,然后垃圾收器是针对不同年代作用的。上图显示了jvm中目前(1.7)采用的垃圾收集器,除了G1收集器外,其他收集器都是只服务于新生代和老年代中的一个。连线表示新生代的垃圾收集器和老年代的垃圾收集器可以协同工作。Serial [单线程] (复制)对应上图中新生代最左边的收集器,作为新生代的第一个出现的收集器。优点:简单、高效缺点:单线程,即只会使用 一个CPU/一条收集线程 去完成垃圾收集的工作在垃圾回收时,必须暂停其他所有线程的工作线程(S原创 2021-01-08 16:31:20 · 130 阅读 · 0 评论 -
JVM 内存分配与回收
对象分配大多数情况下,对象优先在新生代的Eden上分配,当Eden区没有足够空间时,JVM触发一次Minor GC。如果Survivor无法存放存活的对象,则将对象移入老年代。其中Minor GC是指新生代GC,与之相对的,Full GC是指老年代GC。大对象直接进老年代JVM提供一个设置-XX:PretenureSizeThreshold ,令占用内存大于这个值的对象直接进入老年代,以防新生代GC时的复制移动。长存活对象进入老年代JVM另提供设置-XX:MaxTenuringThres原创 2021-01-08 16:32:01 · 101 阅读 · 0 评论