随笔分类 - JVM
摘要:强软弱虚 强引用(StrongReference) : 最传统的“引用”的定义,是指在程序代码之中普遍存在的引用赋值,即类似“Object obj=new Object()”这种引用关系。无论任何情况下,只要强引用关系还存在,垃圾收集器就永远不会回收掉被引用的对象。 软引用(SoftReferenc
阅读全文
摘要:GC的性能指标 吞吐量x:运行用户代码的时间占总运行时间的比例(总运行时间:程序的运行时间a+内存回收的时间b) x=a/(a+b) 越大越好 垃圾收集开销y:吞吐量的补数,垃圾收集所用时间与总运行时间的比例。y=b/(a+b) 越小越好 x+y=1 暂停时间:执行垃圾收集时,程序的工作线程被暂停的
阅读全文
摘要:我们希望能描述这样一类对象: 当内存空间还足够时,则能保留在内存中;如果内存空间在进行垃圾收集后还是很紧张,则可以抛弃这些对象。面试题:强引用、软引用、弱引用、虚引用有什么区别?具体使用场景是什么?在JDK 1.2版之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Referen
阅读全文
摘要:1 内存溢出OOM javadoc中对outofMemoryError的解释是,没有空闲内存,并且垃圾收集器也无法提供更多内存。 1.1 原因 ●首先说没有空闲内存的情况:说明Java虚拟机的堆内存不够。原因有二: (1) Java虚拟机的堆内存设置不够。 比如:可能存在内存泄漏问题;也很有可能就是
阅读全文
摘要:当成功区分出内存中存活对象和死亡对象后,GC接下来的任务就是执行垃圾回收,释放掉无用对象所占用的内存空间,以便有足够的可用内存空间为新对象分配内存。目前在JVM中比较常见的三种垃圾收集算法是标记一清除算法( Mark-Sweep)、复制算法(Copying)、标记一压缩算法(Mark-Compact
阅读全文
摘要:在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。 那么在JVM中究竟是如何标记一个死亡对象呢?简单来说,当一
阅读全文
摘要:基本特性 ☆☆☆☆☆☆String类被final修饰了,final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类 String声明为final的,不可被继
阅读全文
摘要:1. 执行引擎是什么 执行引擎是java虚拟机核心的组成部分之一。 "虚拟机"是一个相对于"物理机"的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的
阅读全文
摘要:一、对象创建的方式 new Classr的newInstance() constructor的newInstance(Xxx) 使用clone0 使用反序列化 第三方库Objenesis 二、对象的创建 1.检测类是否被加载 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位
阅读全文
摘要:一、堆 1.1 概述 · 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。· Java 堆区在JVM 启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。 ·《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它
阅读全文
摘要:内存中的栈与堆 栈是运行时的单位,而堆是存储的单位 即∶栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的 是数据存储的问题,即数据怎么放、放在哪儿。 栈中可能出现的异常 Java 虚拟机规范允许Java栈的大小是动态的或者是固定不变的。 >如果采用固定大小的Java虚拟机栈,那每一
阅读全文

浙公网安备 33010602011771号