![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java虚拟机
面朝大海的你
追梦的人
展开
-
Java虚拟机——Java内存区域Java虚拟机栈
1:是什么 ⽤于作⽤于⽅法执⾏的⼀块Java内存区域 2: 为什么 每个⽅法在执⾏的同时都会创建⼀个栈帧(Stack Framel)⽤于存储局部变量表、操作数 栈、动态链接、⽅法出⼝等信息。每⼀个⽅法从调⽤直⾄执⾏完成的过程,就对应着⼀个栈 帧在虚拟机栈中⼊栈到出栈的过程 怎么理解: 先看一张图片,当方法A在Java虚拟机中运行,方法A会在虚拟机栈创建栈帧,就是你看到的圆圈,方法A...原创 2019-09-17 22:58:04 · 106 阅读 · 0 评论 -
Java虚拟机——CMS收集器
1:是什么 CMS (Concurrent Mark Sweep)收集器是-种以获取最短回收停顿时间为⽬标的收集器。 ⽬前很⼤⼀部分的Java应⽤集中在互联⽹站或者B/S系统的服务端上,这类应⽤尤其重 视服务 的响应速度,希望系统停顿时间最短,以给⽤户带来较好的体验。CMS 收集器是基于“标记-清除”算法实现的,用户线程和垃圾线程同时执行。用户几乎感受用不到线程的暂停。也就是并发。 ...原创 2019-10-03 17:34:45 · 639 阅读 · 0 评论 -
Java虚拟机——ParNew收集器
1:是什么 ParNew 收集器其实就是 Serial 收集器的多线程版本,除了使⽤多条线程进⾏垃圾收集之 外,其余⾏为包括 Serial 收集器可⽤的所有控制参数(例如:-XX: SurvivorRatio、-XX: PretenureSize' Threshold、-XX: HandlePromotionFailure 等)、收集算法、Stop The World、对象分配规则...原创 2019-10-03 16:59:51 · 370 阅读 · 0 评论 -
Java虚拟机——serial垃圾收集器
1:是什么 收集算法是内存收到的⽅法论,垃圾回收器是内存回收的具体实现。 Serial是⼀个单线程的垃圾收集器 Serial(串行)垃圾收集器是最基本、发展历史最悠久的收集器; 2:特点 针对新生代; 采用复制算法; 单线程收集; “Stop The World”,它进⾏垃圾收集时,必须暂停其他所有的⼯作线程,直到它收集结束。 在⽤户不可⻅的情况下把⽤户正常⼯作的线...原创 2019-10-03 16:48:50 · 251 阅读 · 0 评论 -
Java虚拟机——对象的创建、对象的内存布局、对象的访问定位 简述
1:Java对象的创建 判断是否已经执行类加载 当虚拟机遇到一条new指令时 ,首先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过,如果没有,那必须先执行相应的类加载过程。 内存分配 当已经执行过类加载过程后,会为新对象在Java堆中分配一个大小已经确定的内存,具体的内存分配规则有两种: 指针碰撞...原创 2019-10-03 15:59:28 · 155 阅读 · 0 评论 -
Java虚拟机——⼤对象的分配和逃逸分析
大对象分配是什么? 所谓的⼤对象是指,需要⼤量连续内存空间的 Java 对象,最典型的⼤对象就是那种很⻓的字符串以及数组 虚拟机提供了⼀个-XX: PretenureSizeThreshold 参数,令⼤于这个设置值的对象直接在⽼年 代分配。这样做的⽬的是避免在 Eden 区及两个 Survivor 区之间发⽣⼤量的内存复制 实战代码演练 public class A{ pub...原创 2019-10-02 17:17:46 · 133 阅读 · 0 评论 -
Java虚拟机——堆内存的分配
Java堆内存分配机制 Java堆内存的分配整体可以概述为“自适应的,分代的,停止-复制,标记-清除”式的垃圾回收器。 分代指Java将堆内存划分为年轻代(Young Generation),年老代(Old Generation),永久代(Permannet Generation)三块大区域。新生代又再分为Eden区和Survivor区两部分,本文根据java堆的划分,描述hots...原创 2019-10-02 16:21:54 · 722 阅读 · 0 评论 -
Java虚拟机——Java内存区域程序计数器
1:是什么? 程序计数器是⼀块较⼩的内存空间,它可以看作是当前线程所执⾏的字节码的⾏号指示器 线程是⼀个独⽴的执⾏单元,是由CPU控制执⾏的 字节码解释器⼯作时就是通过改变这个计数器的值来选取下⼀条需要执⾏的字节码指令,分⽀、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成 2:为什么? 为了线程切换后能恢复到正确的执⾏位置,每条线程都需要有⼀个...原创 2019-09-27 12:36:48 · 111 阅读 · 0 评论 -
Java虚拟机——Java内存区域常量池
1:是什么 运⾏时常量池是⽅法区的⼀部分,Class⽂件除了有类的版本、字段、⽅法、接⼝等描述信息 外,还有⼀项信息是常量池,⽤于存放编译器⽣成的各种字⾯量和符号引⽤,这部分内容将 在类加载后进⼊⽅法区的运⾏时常量池中存放。 2:模拟常量池 程序运行的结果为 true,false,true, 第一个是true,原因是两个普通变量(不是通过new方式创建,所以不在堆...原创 2019-09-26 23:41:05 · 98 阅读 · 0 评论 -
Java虚拟机——Java内存区域⽅法区
1:是什么 是各个线程共享的内存区域,它⽤于存储已被虚拟机加载的类信息、常量、静态变量、即时 编译器编译后的代码等数据 什么是类信息:类版本号、⽅法、接⼝ 方法区(Method Area)存储的类信息 对每个加载的类型(类class、接口interface、枚举enum、注解annotation),JVM必须在方法区中存储以下类型信息: 这个类型的完整有效名...原创 2019-09-26 23:08:41 · 209 阅读 · 0 评论 -
Java虚拟机——Java内存区域java堆
1:是什么? 是Java内存区域中⼀块⽤来存放对象实例的区域,【⼏乎所有的对象实例都在这⾥分配内存】,堆中不存放基本类型和对象引用,只存放对象本身,几乎所有的对象实例和数组都在堆中分配。每个对象都包含一个与之对应的class的信息(class信息存放在方法区)。 2:为什么 此内存区域的唯⼀⽬的就是存放对象实例 Java 堆(Java Heap)是 Java 虚拟机所管理的内存中...原创 2019-09-26 12:38:23 · 89 阅读 · 0 评论 -
Java虚拟机——Java内存区域本地⽅法栈
1:是什么? ⽤于作⽤于本地⽅法执⾏的⼀块Java内存区域, 用来⽀持native⽅法执⾏, native关键字说明其⽅法是一个原⽣态方法,方法对应的实现不是在当前文件,⽽是在⽤其他语⾔(如C和C++)实现的文件中 2:为什么? 与Java虚拟机栈类似,每个⽅法在执⾏的同时会(在本地方法栈,这个与Java虚拟机栈帧创建栈帧地方不同)创建⼀个栈帧(Stack Fram...原创 2019-09-26 12:20:10 · 257 阅读 · 0 评论 -
Java虚拟机——G1垃圾收集器
1:是什么 G1是⼀款⾯向服务端应⽤的垃圾收集器,JDK1.7才正式引入,G1堆空间是一个被分成许多固定大小区域的内存块。 图片中的颜色表明了哪个区域被关联上什么角色。活跃对象从一个区域疏散(复制、移动)到另一个区域。区域被设计为并行的方式收集,可以暂停或者不暂停所有的其它用户线程。 明显的区域可以被分配成Eden、Survivor、Old区域。另外,有第四...原创 2019-10-03 19:13:50 · 168 阅读 · 0 评论