
Jvm
文章平均质量分 90
jvm
NeilNiu
日拱一卒无有尽,功不唐捐终入海!
展开
-
JVM-运行时数据区
1、运行时数据区分成几个部分,每一部分的作用是什么?程序计数器:每个线程会通过程序计数器记录当前要执行的字节码指令的地址,程序计数器可以控制程序指令的进行,实现分支、跳转、异常等逻辑。Java虚拟机栈、本地方法栈::虚拟机栈采用栈的数据结构来管理方法调用中的基本数据(局部变量、操作数等),每一个方法的调用使用一个栈帧来保存。方法区:方法区中主要存放的是类的元信息,同时还保存了常量池。堆:2、不同JDK版本之间运行时数据区域的区别是什么?JDK6,字符串常量池,存放在永久代。原创 2025-01-26 22:46:59 · 1845 阅读 · 0 评论 -
类的生命周期
1、当一个类加载器去加载某个类的时候,会自底向上查找是否加载过,如果加载过就直接返回,如果一直到最顶层的类加载器都没有加载,再由顶向下进行加载。3、历史上Osgi框架的类加载器,历史上Osgi框架实现了一套新的类加载机制,允许同级别之间委托进行类的加载。如果所有的父类加载器都无法加载该类,则由上至下,加载器自己尝试自己加载。2、应用程序类加载器的父类加载器是扩展类加载器,扩展类加载器的父类加载器是启动类加载器。扩展类加载器和应用程序类加载器都是JDK中提供的、使用Java编写的类加载器。原创 2024-12-20 22:00:59 · 625 阅读 · 0 评论 -
什么是JVM
副版本号是当主版本号相同时,区分不同版本的标识,一般只需要关心主版本号。即时编译,字节码指令,转化为机器码后,计算机可以执行,虚拟机发现这段代码被多次执行,被认定为是热点代码,有必要进行优化,所以把转化为的机器码存储到内存中,当第二次这段代码被执行的时候,直接从内存中取出机器码,进行执行,这样就节省了解释的步骤,提高了性能。java为什么要这么做呢,是为了跨平台,同一份字节码指令,通过不同平台的java虚拟机解释为不同的,机器码,例如windows的机器码,Linux的机器码,这样就实现了跨平台。原创 2024-10-28 23:06:43 · 855 阅读 · 1 评论 -
GC-Roots、对象间的引用级别、分代垃圾回收
一、GC-Roots对象主要是在堆上分配的,我们可以把它想象成一个池子,对象不停地创建,后台的垃圾回收进程不断地清理不再使用的对象。当内存回收的速度,赶不上对象创建的速度,这个对象池子就会产生溢出,也就是我们常说的 OOM。把不再使用的对象及时地从堆空间清理出去,是避免 OOM 有效的方法。那 JVM 是如何判断哪些对象应该被清理,哪些对象需要被继续使用呢?这里首先强调一个概念,这对理解垃圾回收的过程非常有帮助垃圾回收,并不是找到不再使用的对象,然后将这些对象清除掉。它的过程正好相反,JVM 会找到原创 2021-01-24 21:08:09 · 354 阅读 · 0 评论 -
五、JDK命令行工具jps、jstat、jmap、jstack、jhat、jinfo
一、jps,查看虚拟机进程的命令参数说明-q:只输出进程 ID-m:输出传入 main 方法的参数-l:输出完全的包名,应用主类名,jar的完全路径名-v:输出jvm参数二、jstat,查看虚拟机统计信息监视命令jstat -gcutil 进程id 多少毫秒查询一次 共查询多少次 ,查看垃圾收集的状况,例如下图,进程号10066 ,1000毫秒查询一次...原创 2019-01-03 09:43:32 · 784 阅读 · 0 评论 -
四、理解GC日志、内存分配与回收策略
33.125:[GC [DefNew:3324K->152K(3712K),0.0025925secs]3324K->152K(11904K),0.0031680 secs]100.667:[FullGC [Tenured:0K->210K(10240K),0.0149142secs]4603K->210K(19456K),[Perm:2999K->2999K(21248K)],0.0150...原创 2018-12-25 13:12:46 · 328 阅读 · 0 评论 -
三、垃圾收集器类型
收集算法是内存回收的方法论,那么垃圾回收器是内存回收的具体实现。本次讨论的收集器基于JDK1.7之后的HotSpot虚拟机。在谈垃圾收集器的上下文语境中,它们可以解释如下。并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。并发(Concurrent):指用户线程和垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行,而垃圾...原创 2018-12-06 09:11:45 · 366 阅读 · 4 评论 -
二、垃圾回收算法与思想
主要的垃圾回收算法一、引用计数器引用计数器实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1。当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0。则对象A就不可能再被使用了。只要为每个对象配备一个整型的计数器即可。但是计数器有个一个严重的问题,即无法处理循环引用的情况。因此在java的垃圾回收器中,没有使用这个算法。二、标记-清除算法标记-清...原创 2018-11-27 13:15:34 · 212 阅读 · 2 评论 -
一、java虚拟机内存模型
一、java虚拟机内存模型是java程序运行的基础,为了能使java应用程序正常运行,JVM虚拟机将其内存分为程序计数器、虚拟机栈、本地方法栈、java堆和方法区。程序计数器用于存放下一条运行的指令;虚拟机栈和本地方法栈用于存放函数调用堆栈信息;java堆用于存放java程序运行时所需的对象;方法区用于存放程序的类元数据信息。1、程序计数器,是一块很小的内存空间。由于jav...原创 2018-11-20 09:09:54 · 454 阅读 · 2 评论