#类加载 ##加载过程 ###1.加载Loading 通过一个类的全限名获取此类的二进制字节流 将字节流所代表的静态存储结构转化为方法区(1.8为元空间实现,1.8前永久代)的运行时数据结构 在内存中生成代表该类的java.lang.Class对象,作为方法区这个类的访问人口 ###2.连接Link ...
分类:
其他好文 时间:
2021-05-24 02:37:26
阅读次数:
0
JDK1.8之前的堆内存示意图: 从上图可以看出堆内存的分为新生代、老年代和永久代。新生代又被进一步分为:Eden 区+Survior1 区+Survior2 区。值得注意的是,在 JDK 1.8中移除整个永久代,取而代之的是一个叫元空间(Metaspace)的区域(永久代使用的是JVM的堆内存空间 ...
分类:
编程语言 时间:
2021-02-23 14:04:14
阅读次数:
0
1. JVM运行时数据区规范 JVM运行时的组成如下图所示: JVM运?时数据按照线程使?情况和职责分成两?类: 线程独享 :不需要垃圾回收职责:程序执?区域虚拟机栈、本地?法栈、程序计数器 线程共享 :垃圾回收、存储类的静态数据和对象数据职责:数据存储区域堆和?法区 jdk1.7之前,HotSpo ...
分类:
其他好文 时间:
2021-02-02 11:16:00
阅读次数:
0
Java中将String类定义为由final修饰的(不可改变的),JVM中字符串一般被保存在字符串常量池中,Java会确保一个字符串在常量池中只有一个“复制”,这个字符串常量池在JDK 6.0以前是位于常量池中的,位于永久代;而在JDK 7.0中,JVM将其从永久代拿出来放置于堆中。 public ...
分类:
其他好文 时间:
2021-01-27 13:43:41
阅读次数:
0
Java整个堆大小设置 Xmx 和 Xms设置为老年代存活对象的3-4倍,即FullGC之后的老年代内存占用的3-4倍 永久代PermSize和MaxPermSize设置为老年代存活对象的1.2-1.5倍。 永久区并不是老年代的1.2到1.5倍,而是FullGC后永久区的1.2到1.5倍 1.2x ...
分类:
其他好文 时间:
2020-07-20 13:18:36
阅读次数:
68
监控工具:jvisualVM、VisaulVM、jprofiler JVM优化书籍:《Java性能优化权威指南》、《深入理解java虚拟机》 1.年轻代空间不足 2.per Gen(永久代)空间满 3.CMS GC时出现promotion failed和concurrent mode failure ...
分类:
其他好文 时间:
2020-07-14 10:36:50
阅读次数:
187
01JVM内存结构Java虚拟机的内存空间分为5个部分:?程序计数器?Java虚拟机栈?本地方法栈?堆?方法区JDK1.8同JDK1.7比,最大的差别就是:元数据区取代了永久代。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元数据空间并不在虚拟机中,而是使用本地内存。1.1程序计数器(PC寄存器)(1)程序计数器的定义程序计数器是一块较小的内存空间
分类:
其他好文 时间:
2020-07-10 09:58:56
阅读次数:
77
关于JVM,也许你听过这些术语:年轻代(新生代)、老年代、永久代、minor gc(young gc)、major gc、full gc 不要急,先上图,这是jvm 堆内存结构图 仔细的你发现了 图中有些分数8/10和1/10,这是默认配置下各个代内存分配比例。 举个栗子: 假如总heap max分 ...
分类:
其他好文 时间:
2020-07-09 12:00:19
阅读次数:
197
方法区 方法区与Java堆一样,是各个线程共享的区域,它用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译(JIT)后的代码等数据。对于JDK1.8之前的HotSpot虚拟机而言,很多人经常将方法区称为我们上图中所描述的永久代,实际上两者并不等价,因为这仅仅是HotSpot的设计团队选择利用永 ...
分类:
其他好文 时间:
2020-07-04 18:58:52
阅读次数:
73
JVM分区 线程共享区:方法区,堆 方法区 用于存储已经被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码缓存等数据。 方法区!=永久代,只是在永久代这个概念还存在的时候,为了方法区能像堆一样进行分代收集,将方法区采用永久代实现。永久代的概念被抛弃后(JDK8),方法区采用元空间来实现(M ...
分类:
其他好文 时间:
2020-05-31 16:27:44
阅读次数:
67