同步操作将从 Java精选/Ebooks 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
引用计数器算法:给对象添加一个引用计数器,当被引用时给计数器加1,引用失效减1,当为0时对象失效。实现简单,判定效率高,无法解决循环引用问题。
可达性分析算法:将一系列GC Root作为起始点,从这些节点开始向下搜索,所走过路径称为引用链,若一个对象无引用链,则判断是否执行finalize()方法,若finalize()被覆盖并且没被JVM调用过,则执行此方法,执行后若还无引用链,则对象失效。
可以作为GC Root的对象:
1)虚拟机栈中引用的对象。
2)方法区中类静态属性引用的对象。
3)方法区中常量引用的对象。
4)本地方法栈中Native方法引用的对象。
假设参数为-Xms20m -Xmx20m -Xss256k
XX比X的稳定性更差,并且版本更新不会进行通知和说明。
1、-Xms
s为strating,表示堆内存起始大小
2、-Xmx
x为max,表示最大的堆内存,一般来说-Xms和-Xmx的设置为相同大小,当heap自动扩容时,会发生内存抖动,影响程序的稳定性
3、-Xmn
n为new,表示新生代大小,-Xss规定了每个线程虚拟机栈(堆栈)的大小。
4、-XX:SurvivorRator=8
SurvivorRatio定义新生代中Eden区域和Survivor区域(From幸存区或To幸存区)的比例,默认为8,也就是说Eden占新生代的8/10,From幸存区和To幸存区各占新生代的1/10。
5、-XX:PretenureSizeThreshold=3145728
表示当创建(new)的对象大于3M的时候直接进入老年代
6、-XX:MaxTenuringThreshold=15
表示当对象的存活的年龄(minor gc一次加1)大于多少时,进入老年代
7、-XX:-DisableExplicirGC
表示是否(+表示是,-表示否)打开GC日志
WeakReference和SoftReference都有利于提高GC和内存的效率。
WeakReference一旦失去最后一个强引用,就会被 GC回收,而软引用虽然不能阻止被回收,但是可以延迟到JVM内存不足的时候。
新生代是用来存放新生的对象。一般占据堆的1/3空间。由于频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收。
新生代又分为Eden区、ServivorFrom、ServivorTo 三个区。
Eden区:Java新对象的出生地(如果新创建的对象占用内存很大,则直接分配到老年代)。当Eden区内存不够的时候就会触发MinorGC,对新生代区进行一次垃圾回收。
ServivorFrom:上一次GC的幸存者,作为这一次GC的被扫描者。
ServivorTo:保留了一次 MinorGC 过程中的幸存者。 MinorGC 的过程(复制->清空->互换)
MinorGC 采用复制算法。
1、Eden和ServivorFrom区域中存活的对象复制到ServicorTo区域(如果有对象的年龄以及达到了老年的标准,则赋值到老年代区),同时把这些对象的年龄+1(如果ServicorTo不够位置就放到老年区); 2、清空Eden和ServicorFrom中的对象; 3、ServicorTo和ServicorFrom互换,原ServicorTo成为下一次GC时的ServicorFrom区。
局部变量表:存放方法参数和方法内部定义的局部变量,以变量槽Slot为基本单位,一个Slot可以存放32位以内的数据类型,可重用。
操作数栈:先入后出,32位数据类型所占栈容量为1,64为数据类型所占栈容量为2。
动态链接:常量池中符号引用有一部分在每次运行期间转换为直接引用,这部分称为动态链接。(一部分在类加载阶段或第一次使用时转换为直接引用—静态解析)。
方法返回地址:方法执行后退出的两种方式:正常完成出口(执行引擎遇到任意一个返回的字节码指令)和异常完成出口(在方法执行过程中遇到异常且此异常未被处理)。两种方式都需要返回到方法被调用的位置程序才能继续执行(正常退出时调用者的PC计数器的值可以作为返回地址且栈帧中很可能保存这个计数器值;异常退出返回地址要通过异常处理器表来确定,栈帧中一般不会保存)。
Serial和Parallel在GC执行的时候都会引起stop-the-world。
它们之间主要不同在于serial收集器是默认的复制收集器,执行GC的时候只有一个线程,而parallel收集器使用多个GC线程来执行。
OSGi(Open Service Gateway Initiative)技术是Java动态化模块化系统的一系列规范。OSGi一方面指维护OSGi规范的OSGI官方联盟,另一方面指的是该组织维护的基于Java语言的服务(业务)规范。简单来说,OSGi可以认为是Java平台的模块层。
OSGi服务平台向Java提供服务,这些服务使Java成为软件集成和软件开发的首选环境。Java提供在多个平台支持产品的可移植性。
OSGi技术提供允许应用程序使用精炼、可重用和可协作的组件构建的标准化原语,这些组件能够组装进一个应用和部署中。
垃圾回收不会发生在永久代。
如果永久代满了或者是超过了临界值,会触发完全垃圾回收(Full GC)。
如果仔细查看垃圾收集器的输出信息,就会发现永久代也是被回收的。这就是为什么正确的永久代大小对避免Full GC是非常重要的原因。
Java1.8版本已经移除了永久代,新增加了一个叫做元数据区的native内存区。
Java中int类型变量的长度是一个固定值与平台无关,都是32位。
意思就是说在32位和64位的Java虚拟机中int类型的长度是相同的。
Java中有4种引用类型。
引用类型的级别和强度由高到低依次为:强引用->软引用->弱引用->虚引用。
引用类型 | 回收时间 | 使用说明 | 终止时间 |
---|---|---|---|
强引用 | 从来不会 | 对象的一般状态 | JVM停止运行时终止 |
软引用 | 当内存不足时 | 对象缓存 | 内存不足时终止 |
弱引用 | 正常垃圾回收时 | 对象缓存 | 垃圾回收后终止 |
虚引用 | 正常垃圾回收时 | 跟踪对象的垃圾回收状态 | 垃圾回收后终止 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。