JVM
文章平均质量分 86
JVM 虚拟机,这是一个Java 程序员一直以来熟悉但是又陌生的神秘之地。他是夹在 Java 代码与操作系统之间的一层神秘空间。本专栏全面梳理了神秘的 JVM 虚拟机。
爱写bug的小刘
这个作者很懒,什么都没留下…
展开
-
7、JVM~调优工具
执行 jstack 19663|grep -A 10 4cd0,得到线程堆栈信息中 4cd0 这个线程所在行的后面10行,从堆栈中可以发现导致cpu飙高的调用方法。启动一个java程序(可以学习rocketmq的调优策略),通过Jmap可以查看内存信息,实例个数以及占用内存大小;使用命令top -p ,显示你的java进程的内存情况,pid是你的java进程号,比如19663。找到内存和cpu占用最高的线程tid,比如19664。可以在内存溢出时导出堆内存的快照信息。按H,获取每个线程的内存情况。原创 2024-05-20 09:47:31 · 540 阅读 · 0 评论 -
6、JVM~垃圾收集器
XX:G1HeapWastePercent gc过程中空出来的region是否充足阈值,在混合回收的时候,对Region回收都是基于复制算法进行的,都是把要回收的Region里的存活对象放入其他Region,然后这个Region中的垃圾对象全部清理掉,这样的话在回收过程就会不断空出来新的Region,一旦空闲出来的Region数量达到了堆内存的5%,此时就会立即停止混合回收,意味着本次混合回收就结束了。针对并发标记(还有并发清理)开始后产生的新对象,通常的做法是直接全部当成黑色,本轮不会进行清除。原创 2024-05-17 09:33:49 · 930 阅读 · 0 评论 -
5、JVM~分代收集理论和垃圾回收算法
垃圾回收前如果对象实现啦finalLize方法,会回调用finalize方法进行一次拯救,而且只会执行一次,因为finalize()方法的调用时机具有不确定性,从一个对象变得不可到达开始,到finalize()方法被执行,所花费的时间如果比较长,可能出现耗尽资源之前,gc却仍未触发。根据老年代的特点推出的一种标记算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象回收,而是让所有存活的对象向一端移动,然后直接清理掉端边界以外的内存。软引用在实际中有重要的应用,例如浏览器的后退按钮。原创 2024-05-16 10:51:53 · 666 阅读 · 0 评论 -
4、JVM~对象创建过程
大量对象被分配在eden区,eden区满了后会触发minor gc,可能会有90%以上的对象成为垃圾被回收掉,剩余存活的对象会被挪到为空的那块survivor区,下一次eden区满了后又会触发minor gc,把eden区和survivor区垃圾对象回收,把剩余存活的对象一次性挪动到另外一块为空的survivor区,因为新生代的对象都是朝生夕死的,存活时间很短,所以JVM默认的8:1:1的比例是很合适的,让eden区尽量的大,survivor区够用即可,为了减少临时对象在堆内分配的数量,JVM通过。原创 2024-05-16 09:56:41 · 844 阅读 · 0 评论 -
3、JVM~内存模型
本地方法栈与虚拟机栈所发挥的作用是非常相似的,其区别只是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的本地(Native)方法服务。3. To Survivor区满啦之后进行一次垃圾回收,将存活下来的对象放入From Survivor区,依次往复大约15次后,存活的对象会进入老年代;:方法A调用方法B时,方法B的栈帧会存储方法A调用方法B的行号,方法B执行完成,方法A从对应行号继续放下执行;堆是一块线程共享的内存区域,也是垃圾收集行为最频繁的内存区域,堆区分为。原创 2024-05-15 14:13:20 · 853 阅读 · 0 评论 -
2、JVM~类加载
负责加载用户自定义路径下的类包;原创 2024-05-13 14:24:04 · 552 阅读 · 0 评论 -
1、JVM~虚拟机
首先,我们代码是写在java文件中,通过javac命令可以将java文件编译成class文件,class文件的本质就是二进制文件。JVM不会管class是怎么生成的,只要遵循JVM规范,手写的class文件也可以被JVM加载并运行。Java发展至今,已经远不是一种语言,而是一个标准。通过JVM虚拟机,屏蔽了上层各种开发语言的差距,同时也屏蔽了下层各种操作系统的区别。HotSpot是JVM虚拟机的一种实现,简单理解,JVM是一个接口,HotSpot是JVM接口的实现类,JVM同样可以有多个实现类。原创 2024-05-08 22:20:33 · 303 阅读 · 0 评论