JVM
绿头龙
don't think,feel it
展开
-
JVM垃圾收集算法
从如何判定对象消亡的角度出发,垃圾回收算法可以划分为:“引用计数式垃圾回收”和“追踪式垃圾收集”两大类。我们目前所知的垃圾回收算法比如:标记-清除、标记-整理、标记-复制算法都属于追踪式垃圾收集。我们目前的的垃圾收集器,大多都遵循了“分代收集”的理论进行设计。“分代收集”建立在两个分代假说之上:弱分代假说:绝代多数对象都是朝生夕灭的。强分代假说:熬过越多次垃圾收集过程的对象就越难以消亡。...原创 2020-11-10 09:17:18 · 127 阅读 · 0 评论 -
为什么分代年龄最大为15
在hotspot虚拟机中,对象在堆内存中的存储布局可以划分为三部分:对象头,实例数据,对齐填充。HotSpot虚拟机对象的对象头部包含两类信息用于存储对象自身的运行时数据,如HashCode,GC的分代年龄,锁状态标志,线程持有的锁,偏向线程ID,偏向时间戳等。这部数据的长度在32位和64位的虚拟机中分别为32比特和64比特,官方称为“Mark word”。另一种是类型指针,即对象指向它的类型元数据的指针,Java通过这个指针确定该对象是哪个类的实例。但是并不是所有的虚拟机实现都必须在对象数据上保留原创 2020-10-27 10:31:30 · 1550 阅读 · 0 评论 -
关于MinorGC、MajorGC和FullGC
JVM在进行GC时,并非每次都对新生代,老年代,元空间区域一起回收,大部分回收都是指新生代。针对HotSpot VM的实现,他里面的GC按照回收区域又分为两大类型:一种是部分收集(Partial GC),一种是整堆收(full GC)。部分收集:不是完整收集整个Java堆的垃圾收集,其中又分为:新生代收集(Minor GC/ Young GC):只是新生代的垃圾收集。当年轻代空间不足时,就会触发Minor GC,这里的年轻代满指的是Eden代满了,Survivor区满则不会触发GC。Mino原创 2020-10-18 21:04:21 · 202 阅读 · 0 评论 -
HotSpot中的垃圾收集器
垃圾收集器就是GC算法的落地实现!新生代垃圾收集器串行收集器Serial一个单线程的收集器,在进行垃圾收集的时候,必须暂停其他所有的工作线程(Stop-The-World)直到他的垃圾收集结束最古老,最稳定,效率最高缺点:只使用一个线程去回收但其在进行垃圾收集过程中可能会产生较长的停顿(Stop-the-world状态)优点:简单高效对于限定单个CPU环境来说,没有线程交互的开销可以获得最高的单线程垃圾收集效率,因此Serial垃圾收集器依然是java虚拟机运行在Client模式下默认的原创 2020-10-18 20:47:23 · 189 阅读 · 1 评论 -
再谈Java引用
GCroot和四大引用无论是通过引用计数法判断对象的引用数量,还是通过可达性分析算法判断对象是否引用链可达,判断对象是否存活都和“引用”离不开关系。JDK1.2版之后,Java对引用的概念进行了扩充,将引用分为四种类型: 强引用、 软引用、 弱引用、虚引用。四种引用的强度依次减弱。强引用(默认,GC不清除)强引用是最传统的“引用”的定义,是指在程序代码之中普遍存在的引用赋值。我们平常典型编码Object obj = new Object()中的obj就是强引用。通过关键字new创建的对象所关联原创 2020-10-18 19:41:38 · 177 阅读 · 0 评论 -
常用的JVM配置参数有哪些?
常用的JVM配置参数有哪些?-Xms:初始大小内存,默认为物理内存的1/64等价于-XX:InitialHeapSize-Xmx:最大分配内存,默认为物理内存的1/4等价于-XX:MaxHeapSize-Xss:设置单个线程栈的大小,一般默认为512k~1024k等价于-XX:ThreadStackSize当值等于0的时候,代表使用得是默认大小-Xmn:设置年轻代大小-XX:MetaspaceSize:设置元空间大小(元空间与永久代最大的区别为:元空间并不在虚拟机中,而使原创 2020-10-18 19:18:59 · 1640 阅读 · 2 评论 -
JVM--虚拟机栈
java虚拟机栈,早期也叫Java栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个栈帧,对应着一次次的java方法调用生命周期:生命周期和线程是一致的作用:主管Java程序的运行,他保存方法的局部变量(8种基本数据类型,对象的引用地址),部分结果,并参与方法的调用和返回。局部变量 vs 成员变量(或属性)基本数据变量 vs 引用类型变量(类,数组,接口)栈的特点(优点):栈是一种有效的分配存储的方式,访问速度仅次于程序计数器JVM直接对Java栈的操作只有两个:每个方法执行原创 2020-10-18 19:09:58 · 89 阅读 · 0 评论 -
如何判断一个对象是否可以被回收?
再谈垃圾回收之前,我们应该先谈一下什么是垃圾?什么是垃圾?简单来说就是内存中已经不在使用到的空间就是垃圾垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。如果不清除垃圾,就会导致内存溢出。引用计数法什么是引用计数法?在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就加一;任何时刻计数器为0的对象就是不可能被在使用的。缺点:难以解决循环引用的问题。public class ReferenceGC { publi原创 2020-10-07 15:45:38 · 1672 阅读 · 1 评论 -
JVM--栈的运行原理与栈中存储的是什么
栈中存储什么?每个线程都有自己的栈,栈中的数据都是以栈帧的格式存在。在这个线程上正在执行的每一个方法都各自对应一个栈帧栈帧是一个内存区块,是一个数据集维系着方法执行过程中的各种数据信息在一条活动线程中,一个时间点上,只会有一个活动的栈帧,即只有当前正在执行的方法的栈帧(栈顶栈帧)是有效的,这个栈帧被称为当前栈帧(Current Frame),与当前栈帧对应的方法就是当前方法(Current method),定义这个方法的类就是当前类(Current Class)执行引擎运行的所有字节码指令只会原创 2020-06-17 12:02:18 · 3656 阅读 · 0 评论 -
关于方法区和永久代
关于关于方法区和永久代的区别引用两条评论:通俗点,方法区和堆内存的永久代其实一个东西,一个是理论,一个是具体的实现,为什么要分开说呢,因为方法区包含永久代,但是反过来就不能这么说, 所以这也正如作者所说,一个是接口,一个是具体实现。方法区是JVM规范概念,而永久代则是Hotspot虚拟机特有的概念。...原创 2020-06-15 16:06:02 · 452 阅读 · 0 评论 -
JVM--方法区(PermGen)
方法区(PermGen)JDK1.8以前的HotSpot JVM有方法区,也叫永久代(permanent generation)。方法区用于存放已被虚拟机加载的类信息、常量、静态变量,即编译器编译后的代码。方法区是一片连续的堆空间,通过-XX:MaxPermSize来设定永久代最大可分配空间,当JVM加载的类信息容量超过了这个值,会报OOM:PermGen错误。永久代的GC是和老年代(old generation)捆绑在一起的,无论谁满了,都会触发永久代和老年代的垃圾收集。JDK1.7开始了方法原创 2020-06-15 15:49:02 · 736 阅读 · 0 评论 -
JVM---Native
什么是Native Method?一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。Native主要用于方法上1、一个native方法...原创 2020-03-12 21:33:35 · 209 阅读 · 0 评论 -
JVM---方法区
存放数据(static,final,Class,常量池)方法区存储的是每个class的信息:1.类加载器引用(classLoader)2.运行时常量池所有常量、字段引用、方法引用、属性3.字段数据每个方法的名字、类型(如类的全路径名、类型或接口) 、修饰符(如public、abstract、final)、属性4.方法数据每个方法的名字、返回类型、参数类型(按顺序)、修饰符、属性5...原创 2020-03-12 21:30:48 · 157 阅读 · 0 评论 -
JVM---PC寄存器
**每个线程启动的时候,都会创建一个PC(Program Counter,程序计数器)寄存器。**PC寄存器里保存有当前正在执行的JVM指令的地址。 每一个线程都有它自己的PC寄存器,也是该线程启动时创建的。保存下一条将要执行的指令地址的寄存器是 :PC寄存器。PC寄存器的内容总是指向下一条将被执行指令的地址,这里的地址可以是一个本地指针,也可以是在方法区中相对应于该方法起始指令的偏移量...原创 2020-03-12 21:29:18 · 364 阅读 · 0 评论 -
JVM-沙箱安全机制
什么是沙箱? Java安全模型的核心就是Java沙箱(sandbox),什么是沙箱?沙箱是一个限制程序运行的环境。沙箱机制就是将 Java 代码限定在虚拟机(JVM)特定的运行范围中,并且严格限制代码对本地系统资源访问,通过这样的措施来保证对代码的有效隔离,防止对本地系统造成破坏。沙箱主要限制系统资源访问,那系统资源包括什么?——CPU、内存、文件系统、网络。不同级别的沙箱对这些资源访问的限制也...转载 2020-03-12 21:28:20 · 3468 阅读 · 0 评论 -
Jvm--双亲委派机制
什么是类加载器?类加载器是jre的一部分,负责动态将类添加到Java虚拟机。类加载分类1、启动类加载器 bootstrap classloader :加载jre/lib/rt.jar2、扩展类加载器 extension classloader :加载jre/lib/ext/*.jar3、应用程序类加载器 application classloader:加载classpath上指定的类库...原创 2020-03-12 21:20:40 · 261 阅读 · 0 评论