【JVM】
天青色的烟雨.
本博客只为加深自身知识体系,不为任何商业用途呦呦呦!
展开
-
何时类加载------主动引用和被动引用
概述类初始化阶段是类加载过程的最后一步,前面的类加载过程中,除了在加载阶段用户应用程序可以通过自定义类加载器参与之外,其余动作完全由虚拟机主导和控制。 到了初始化阶段,才真正开始执行类中定义的Java程序代码(或者说是字节码)。初始化阶段是执行类构造器<clinit>()方法的过程。类加载的初始化阶段就是类构造器的初始化。所谓的类构造器就是将静态变量的初始化动作和静态块中的所有的内容合并起来。...原创 2019-03-14 20:51:34 · 612 阅读 · 1 评论 -
类加载过程、类成员初始化顺序
一、 概述 上一篇文章介绍了class文件的存储细节,class文件包括了类的各种描述信息,但是Java程序的运行需要在内存中实现,那么虚拟机是如何加载这些class文件的?class文件中的静态结构是如何转换成实际的存储结构的?内存分配是如何完成的?这些都是本篇文章要讨论的内容。 虚拟机将类的描述文件class文件加载到内存,并且进行安全校验、数据类型解析、内存...原创 2019-07-08 22:28:54 · 730 阅读 · 0 评论 -
JVM之内存分配与回收策略、finalize()
前言 对象的内存分配,往大的方向上讲,就是在堆上分配,少数情况下也可能会直接分配在老年代中,分配的规则并不是百分之百固定的,其细节决定于当前使用的是哪种垃圾收集器组合,当然还有虚拟机中与内存相关的参数。垃圾收集器组合一般就是Serial+Serial Old和Parallel+Serial Old,前者是Client模式下的默认垃圾收集器组合,后者是Server模式下的默认垃圾收集器组...转载 2019-07-08 20:38:21 · 279 阅读 · 0 评论 -
垃圾收集器
下面一张图是HotSpot虚拟机包含的所有收集器:(A):图中展示了7种不同分代的收集器:Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1;(B):而它们所处区域,则表明其是属于新生代收集器还是老年代收集器:新生代收集器:Serial、ParNew、Parallel Scavenge; 老年代收集器:S...原创 2019-07-08 19:40:30 · 179 阅读 · 0 评论 -
JVM性能调优工具
Linux 性能监控uptime系统时间运行时间:例子中为7分钟连接数: 每一个终端算一个进程1,5,15分钟内的系统平均负载:运行队列中的平均进程数Top格式:top -参数 作用:Linux的系统“任务管理器” 显示信息解释第一行(与uptime相同):系统时间 运行时间 登陆的终端数 Load average(系统负载):1分钟...原创 2019-05-05 15:37:12 · 303 阅读 · 0 评论 -
元空间、Full GC、内存调优
方法区和永久代的关系 在Java虚拟机规范中,方法区在虚拟机启动的时候创建,虽然方法区是堆的逻辑组成部分,但是简单的虚拟机实现可以选择不在方法区实现垃圾回收与压缩。这个版本的虚拟机规范也不限定实现方法区的内存位置和编译代码的管理策略。所以不同的JVM厂商,针对自己的JVM可能有不同的方法区实现方式。 在HotSpot中,设计者将方法区纳入GC分代收集。HotSpo...原创 2019-05-05 09:11:59 · 4163 阅读 · 0 评论 -
对象内存分配、内存布局、访问定位
对象的内存分配 对象所需内存的大小在类加载完成后便完全确定(对象内存布局),为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。指针碰撞:如果Java堆中内存是绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间那边挪动一段与对象大小相等的距离,这种分配方式称为“指针碰撞”。 空闲...原创 2019-05-04 20:19:32 · 296 阅读 · 0 评论 -
逃逸分析、栈上分配、TLAB
引言 我们知道,一般在java程序中,new的对象是分配在堆空间中的,但是实际的情况是,大部分的new对象会进入堆空间中,而并非是全部的对象,还有另外两个地方可以存储new的对象,我们称之为栈上分配以及TLAB。栈上分配为什么需要栈上分配 在我们的应用程序中,其实有很多的对象的作用域都不会逃逸出方法外,也就是说该对象的生命周期会随着方法的调用开始而开始,方法...原创 2019-05-04 19:46:03 · 379 阅读 · 0 评论 -
双亲委托机制、Tomcat类加载机制
JVM中类加载器的树状层次结构Java中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由Java应用开发人员编写的。启动类加载器(bootstrapclassloader): 启动类加载器主要加载的是JVM自身需要的类,这个类加载使用C++语言实现的,是虚拟机自身的一部分,它负责将 <JAVA_HOME>/lib路径下的核心类库或-Xb...转载 2019-03-14 21:44:03 · 427 阅读 · 1 评论