仿站侵权吗,女的和男做那个视频网站,计算机个人网站建设论文,创建网站需要多少资金目录
1、JVM 的体系结构
2、双亲委派机制
3、堆内存调优
4、关于GC垃圾回收机制
4.1 GC中的复制算法
4.2 GC中的标记清除算法 1、JVM 的体系结构 堆中存在垃圾而栈中不存在垃圾的原因#xff1a; 堆#xff08;Heap#xff09; 用途#xff… 目录
1、JVM 的体系结构
2、双亲委派机制
3、堆内存调优
4、关于GC垃圾回收机制
4.1 GC中的复制算法
4.2 GC中的标记清除算法 1、JVM 的体系结构 堆中存在垃圾而栈中不存在垃圾的原因 堆Heap 用途堆主要用于存储对象实例和数组。在Java中几乎所有通过new关键字创建的对象都会存储在堆内存中。内存分配与释放堆内存的分配和释放由JVM的垃圾回收器Garbage Collector, GC自动管理。当对象不再被引用时它们被认为是垃圾但并不会立即被释放。相反垃圾回收器会在合适的时机进行垃圾回收以释放这些不再使用的内存空间。垃圾存在的原因由于垃圾回收器并不是实时运行的且对象的生命周期可能跨越多个垃圾回收周期因此在堆内存中可能会存在已经不被使用但仍未被回收的垃圾对象 栈Stack 用途栈主要用于存储局部变量、方法调用信息和对象的引用变量但对象本身存储在堆中。每个线程都有自己独立的栈空间用于存储该线程执行过程中的局部变量和方法调用信息。内存分配与释放栈内存的分配和释放是自动的且与方法的调用和返回紧密相关。每当一个方法被调用时JVM会在栈上为该方法创建一个新的栈帧Stack Frame用于存储局部变量等信息。当方法执行完毕后其对应的栈帧会自动从栈中弹出并销毁局部变量占用的内存也会随之释放。不存在垃圾的原因由于栈内存的分配和释放都是自动的且与方法的调用和返回紧密相关因此栈内存中的局部变量和方法调用信息在不再需要时会自动被释放不会出现像堆内存中那样的垃圾对象。此外栈内存的生命周期与线程相同当线程结束时其栈内存也会被自动释放 2、双亲委派机制 一开始先从Java启动类加载器中寻找相关类若没有则在拓展类加载器中寻找最后才会在当前应用类加载器中寻找 例如图所示
这里创建了一个java.lang的包定义了String以及toString与Java自带包冲突
说明了一开始是由Java启动类加载器Boot进行类的加载发现具有相同重复的类则抛出异常主要是为了保证安全性防止恶意的擅自更改善意的代码 报错信息 3、堆内存调优 public static void main(String[] args) {//jvm试图使用的最大内存long max Runtime.getRuntime().maxMemory();//jvm总内存long total Runtime.getRuntime().totalMemory();System.out.println(maxmax字节\t(max/(double)1024/1024)MB);System.out.println(totaltotal字节\t(total/(double)1024/1024)MB);}
这里进行输出JVM中默认配置下的相关内存大小 存在问题 若发生OOM内存溢出默认的堆配置内存可能行不通可能需要自己进行配置 点击编辑配置 --- 修改选项 --- 添加VM选项
这里进行输入的配置中其中“1024m”表示内存的大小、“PrintGCDetails”表示打印相关信息更多的参数去百度可以自行根据情况调节以尽量控制不会出现OOM内存溢出 输出结果
可见通过配置堆中所分配的内存大小发生了改变 4、关于GC垃圾回收机制 GC的作用区域在 “堆内存区” 以及 “方法区” 4.1 GC中的复制算法 内部具体伪动态图
由于谁空谁为To区Eden以及From中的对象都会往To区集合当集合完毕之后原来的From区为空所以变为了To区与原来的To区进行了“身份交换”而后续存活下来的对象则顺利进入“养老区” 优点没有内存的碎片即 “要走一块走要留一块留”
缺点浪费了内存空间即 “To幸存区” 与 “From幸存区” 必须空一块 总结 复制算法最佳最佳使用场景对象存活度较低的时候即在新生区进行使用 4.2 GC中的标记清除算法 优点不需要占用额外的空间
缺点经过两次扫描严重浪费空间因为会产生内存碎片 对于标记清除算法对应的优化算法还有 “标记压缩算法” 、“标记清除压缩算法”但都存在利与弊没有最优只有最合适