JVM虚拟机
令走天下
每天记录一点,成长自己一点
展开
-
深入理解JVM之堆内存(年经代,老年代)
一、为什么会有年轻代我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域进行回收,这样就会腾出很...原创 2019-06-05 15:00:13 · 2099 阅读 · 0 评论 -
深入理解JVM之内存结构(栈,堆划分)
一、JVM的整体流程JVM在运行过程中会把它所管理的内存划分成若干不同的数据区域!线程私有:程序计数器、虚拟机栈、本地方法栈线程共享:堆、方法区二、线程私有程序计数器指向当前线程正在执行的字节码指令的地址(行号),JVM里面唯一不会发生OOM的区域。java是多线程,为了记录线程之间的切换。确保在多线程的情况下能正常执行。本地方法栈其实就是native方法调用了jni层...原创 2019-06-05 17:31:26 · 1449 阅读 · 1 评论 -
深入理解JVM虚拟机之堆、栈、堆栈,常量池的区别
先说一下栈和堆栈,我们听老一辈的程序员一般都会说堆栈,其实栈就是堆栈的意思,连着叫只是由于历史的原因。博主04年学数据结构的时候,书上都是说的堆栈,FILO(先进后出),也经常拿堆栈和队列,FIFO(先进先出)这两种数据结构拿来作比较。系统中的堆、栈 和 数据结构堆、栈系统中的堆、栈和数据结构堆、栈不是一个概念。可以说系统中的堆、栈是真实的内存物理区,数据结构中的堆、栈是抽象的数据存储结构...原创 2019-06-13 16:13:19 · 2979 阅读 · 2 评论 -
jvm调优的jstat命令查看GC
jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下:1、类加载统计: - Loaded:加载class的数量 - Bytes:所占用空间大小 - Unloaded:未加载数量 - Bytes:未加载占用空间 - Time:时间2、编译统计 - Compiled:编译数量。 - Failed:失败数量 - Inval...原创 2019-09-12 14:57:49 · 656 阅读 · 0 评论 -
谈谈jvm调优的经验
一般jvm调优可以从三个方面去调优1、调整新生代的大小到最合适和老年代的大小最合适(上线的时候)2、选择合适的GC回收器3、代码的调优首先通过在线上服务通过命令行jps -vVml,查找你当前项目的服务的id然后通过jstat -gc <服务的id>,查看新生代触发的次数,以及垃圾回收所消耗的时间,查看老年代触发的次数,以及垃圾回收所消耗的时间。并且通过打开GC日记,或者是...原创 2019-09-12 18:42:54 · 1789 阅读 · 1 评论