草庐IT

Jvm调优

首先我们可以使用各种JVM工具,查看当前日志,分析当前JVM参数设置,并且分析当前堆内存快照和gc日志,根据实际的各区域内存划分和GC执行时间,觉得是否进行优化,当然我们也可以直接生成堆的dump文件,进行分析,比如GC时间超过1-3秒,或者频繁GC,则必须进行一个优化1.针对JVM堆的设置,一般可以通过-Xms-Xmx限定其最小、最大值,为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间,通常把最大、最小设置为相同的值3.年轻代和年老代设置多大才算合理  1)更大的年轻代必然导致更小的年老代,大的年轻代会延长普通GC的周期,但会增加每次GC的时间;小的年老代会导致更频繁的FullGC 

Jvm调优

首先我们可以使用各种JVM工具,查看当前日志,分析当前JVM参数设置,并且分析当前堆内存快照和gc日志,根据实际的各区域内存划分和GC执行时间,觉得是否进行优化,当然我们也可以直接生成堆的dump文件,进行分析,比如GC时间超过1-3秒,或者频繁GC,则必须进行一个优化1.针对JVM堆的设置,一般可以通过-Xms-Xmx限定其最小、最大值,为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间,通常把最大、最小设置为相同的值3.年轻代和年老代设置多大才算合理  1)更大的年轻代必然导致更小的年老代,大的年轻代会延长普通GC的周期,但会增加每次GC的时间;小的年老代会导致更频繁的FullGC 

深入分析JVM执行引擎

程序和机器沟通的桥梁一、闲聊相信很多朋友在出国旅游,或者与外国友人沟通的过程中,都会遇到语言不通的烦恼。这时候我们就需要掌握对应的外语或者拥有一部翻译机。而笔者只会中文,所以需要借助一部翻译器才能与不懂中文的外国友人交流。咱们的执行引擎就类似于这部“翻译机”。二、概述执行引擎的作用就是将字节码指令解释或者编译为对应平台上的本地机器指令。简单来说,执行引擎充当了将高级语言翻译为机器语言的翻译者。对于Hotspot虚拟机,执行引擎中包含两部分:解释器和JIT编译器(即时编译器)。下图是执行引擎的原理:三、解释器解释器所承担的角色就是一个运行时翻译者,将字节码文件中的内容翻译为对应平台的本地机器码指

深入分析JVM执行引擎

程序和机器沟通的桥梁一、闲聊相信很多朋友在出国旅游,或者与外国友人沟通的过程中,都会遇到语言不通的烦恼。这时候我们就需要掌握对应的外语或者拥有一部翻译机。而笔者只会中文,所以需要借助一部翻译器才能与不懂中文的外国友人交流。咱们的执行引擎就类似于这部“翻译机”。二、概述执行引擎的作用就是将字节码指令解释或者编译为对应平台上的本地机器指令。简单来说,执行引擎充当了将高级语言翻译为机器语言的翻译者。对于Hotspot虚拟机,执行引擎中包含两部分:解释器和JIT编译器(即时编译器)。下图是执行引擎的原理:三、解释器解释器所承担的角色就是一个运行时翻译者,将字节码文件中的内容翻译为对应平台的本地机器码指

面试官:JVM是如何判定对象已死的?

本文已收录至Github,推荐阅读?Java随想录微信公众号:Java随想录CSDN:码农BookSea知道的越多,才知知道的越少。——苏格拉底目录引用计数算法可达性分析算法引用类型DeadOrAlive永久代真的"永久"吗?垃圾收集算法标记-清除算法标记-复制算法标记-整理算法标记-清除VS标记-整理在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(“死去”即不可能再被任何途径使用的对象)了。下文围绕这个话题,展开聊聊。引用计数算法这种算法的工作原理是这样的:在对象中添加一个引用计数器,每当有一个地

面试官:JVM是如何判定对象已死的?

本文已收录至Github,推荐阅读?Java随想录微信公众号:Java随想录CSDN:码农BookSea知道的越多,才知知道的越少。——苏格拉底目录引用计数算法可达性分析算法引用类型DeadOrAlive永久代真的"永久"吗?垃圾收集算法标记-清除算法标记-复制算法标记-整理算法标记-清除VS标记-整理在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(“死去”即不可能再被任何途径使用的对象)了。下文围绕这个话题,展开聊聊。引用计数算法这种算法的工作原理是这样的:在对象中添加一个引用计数器,每当有一个地

JVM是如何解决跨代引用问题的?

本文已收录至Github,推荐阅读?Java随想录微信公众号:Java随想录CSDN:码农BookSea不知道自己的无知,乃是双倍的无知。——柏拉图目录跨代引用问题记忆集卡表写屏障写屏障的伪共享问题跨代引用问题跨代引用是指新生代中存在对老年代对象的引用,或者老年代中存在对新生代的引用。假如要现在进行一次只局限于新生代区域内的收集(MinorGC),但新生代中的对象是完全有可能被老年代所引用的,为了找出该区域中的存活对象,不得不在固定的GCRoots之外,再额外遍历整个老年代中所有对象来确保可达性分析结果的正确性,反过来也是一样。无疑会为内存回收带来很大的性能负担。别慌,JVM的设计者已经考虑了

JVM是如何解决跨代引用问题的?

本文已收录至Github,推荐阅读?Java随想录微信公众号:Java随想录CSDN:码农BookSea不知道自己的无知,乃是双倍的无知。——柏拉图目录跨代引用问题记忆集卡表写屏障写屏障的伪共享问题跨代引用问题跨代引用是指新生代中存在对老年代对象的引用,或者老年代中存在对新生代的引用。假如要现在进行一次只局限于新生代区域内的收集(MinorGC),但新生代中的对象是完全有可能被老年代所引用的,为了找出该区域中的存活对象,不得不在固定的GCRoots之外,再额外遍历整个老年代中所有对象来确保可达性分析结果的正确性,反过来也是一样。无疑会为内存回收带来很大的性能负担。别慌,JVM的设计者已经考虑了

JVM详记

JVM1运行时数据区域从概念上Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。在Java8中,元空间(Metaspace)登上舞台,方法区存在于元空间(Metaspace)。同时,元空间不再与堆连续,而且是存在于本地内存(Nativememory)。方法区Java8之后的变化:移除了永久代(PermGen),替换为元空间(Metaspace)永久代中的classmetadata(类元信息)转移到了nativememory(本地内存,而不是虚拟机)永久代中的internedStrings(字符串常量池)和classstaticvariables(类静态变量)

JVM详记

JVM1运行时数据区域从概念上Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。在Java8中,元空间(Metaspace)登上舞台,方法区存在于元空间(Metaspace)。同时,元空间不再与堆连续,而且是存在于本地内存(Nativememory)。方法区Java8之后的变化:移除了永久代(PermGen),替换为元空间(Metaspace)永久代中的classmetadata(类元信息)转移到了nativememory(本地内存,而不是虚拟机)永久代中的internedStrings(字符串常量池)和classstaticvariables(类静态变量)