
jvm
文章平均质量分 79
想到的名字都被人用了
这个作者很懒,什么都没留下…
展开
-
06-JVM-监控及调优案例
jstack工具主要用于捕捉JVM当前时刻的线程快照,线程快照是JVM中每条线程正在执行的方法堆栈集合。在线上情况时,生成线程快照文件可以用于定位线程出现长时间停顿的原因,如线程死锁、死循环、请求外部资源无响应等等原因导致的线程停顿。当线程出现停顿时,可以通过jstack工具生成线程快照,从快照信息中能查看到Java程序内部每条线程的调用堆栈情况,从调用堆栈信息中就可以清晰明了的看出:发生停顿的线程目前在干什么,在等待什么资源等。7. 程序中存在内存溢出问题,一直在蚕食可用内存,GC无法回收导致内存溢出。原创 2022-09-29 20:03:18 · 687 阅读 · 0 评论 -
05-JVM-垃圾回收器
答:不是,由于CMS是并发进行垃圾回收的,如果当内存不够时再进行垃圾回收,此时用户线程仍然再产生垃圾,很容易报错OOM,所以我们需要手动的设置一个阈值,当老年代内存达到这个阈值的时候就可以进行垃圾回收。答:原因也是因为CMS是并发进行垃圾回收的,如果使用标记压缩算法,那么会移动堆中的数据,造成用户线程无法找到对象位置。原创 2022-09-28 17:15:16 · 193 阅读 · 0 评论 -
04-JVM-垃圾回收
再回收之前执行finalize()方法,可以在finalize()方法中被其它存活对象引用完成"复活"提醒垃圾回收器去执行Full GC,但不会立即执行。原创 2022-09-23 17:54:40 · 380 阅读 · 0 评论 -
03-JVM-对象内存、执行引擎
将热点代码的机器码进行缓存,方便下次直接调用,但若一开始就使用JIT,由于缓存需要额外耗费时间和空间,速度反而要差于解释器,也会额外增加内存消耗。简单来说就是将java代码编译成字节码文件,再由执行引擎动态的将字节码转换成机器码。逐行将字节码翻译成机器码。特点:预热快,速度慢。特点:预热慢,速度快。原创 2022-09-23 16:18:09 · 321 阅读 · 0 评论 -
02-JVM-内存篇
一个jvm实例只存在一个堆内存,它是java内存管理的核心区域堆在jvm启动的时候被创建,空间大小也是在启动时就确定了,是jvm管理的最大一块内存空间堆大小是可以调节的它是一个物理上不连续但逻辑上联系的空间是垃圾回收的重点区域面试题Java中所有对象都在堆上吗?答:几乎是,jvm规范中写到 所有的class实例和数组都应该在运行时分配在堆上堆的结构是什么样子?堆为什么要分为新生代、老年代、持久代、新生代中为什么要分为Eden和Survivor?原创 2022-09-21 20:18:19 · 300 阅读 · 0 评论 -
01-JVM-类加载篇
/*** 编写findClass方法的逻辑*/@Override// 获取类的class文件字节数组} else {//直接生成class对象}}/*** 编写获取class文件并转换为字节码流的逻辑 * @param className * @return*/// 读取类文件的字节try {// 读取类文件的字节码= -1) {}}}/*** 类文件的完全路径*/}try {//创建自定义的类的加载器1。原创 2022-09-19 17:41:33 · 314 阅读 · 0 评论 -
JVM-记忆集、卡表、并发标记、重标记
目前的垃圾回收器,在做垃圾回收的时候首先都要进行初始标记,也就是查找GC Root节点,但是除了GC Root和GC Root引用链上的对象需要保留之外,被老年代引用的Eden中的对象也需要保留,那么问题来了,现在我们已经知道了卡表的作用以及它的工作原理,现在出现一个新的问题,那就是卡表的更新。卡表就是一个字节类型的数组,数组中的每个元素对应着一块固定大小的内存区域叫做。,卡页的大小通常设置为2的N次幂,默认是512字节。,接下来我们来说一下记忆集的实现。的实现上,这也是我们常说的卡表,...原创 2022-08-31 15:43:41 · 795 阅读 · 0 评论