JVM
JarvanStack
保持简单
展开
-
JVM(入门篇08)JMM Java内存模型模型. 详解.
一、什么是JMM?1.定义:JMM(Java Memory Model)Java内存模型.2. JMM 和 JVM 的区别JVM内存模型指的是 – 内存分区图JMMJava内存模型 指的是 一种**==虚拟机规范==.**二、JMM有何用?1. (抽象)定义了主内存和线程之间的关系:之前在多线程安全问题的产生 的时候也涉及到了点击跳转1.共享变量在主内存中 (Main Memory)2.每个线程在本地内存(Local Memory)3.本地内存和主内存是抽象的概念,物理上不存在,只原创 2020-05-23 21:13:26 · 625 阅读 · 0 评论 -
JVM(入门篇08)GC 垃圾回收算法
一、找出垃圾的算法?1.引用计数算法,1.原理:给每个对象设置一个计数器,有地方引用这个对象的时候,计数器+1,引用失效的时候,计数器-1,计数器为0的时候,就销毁对象。优点|1.实现简单,效率高缺点1.不能解决循环引用的问题(A引用B,B引用A,但是A,B又不被其他对象所引用)所以已经弃用了!!2.计数器的增加和减少都是浪费资源.方法已经弃用,了解即可.2.根搜索法1.以GCRoots 作为起点,开始搜索,通过搜索的路径形成引用链条,当一个对象没有被 GCRoots原创 2020-05-23 09:24:57 · 380 阅读 · 0 评论 -
JVM(入门篇07)使用JProfiler 工具分析OOM堆空间溢出教程。
一、OOM解决思路1. 调大堆内存看是否还是溢出:1.IDEA中右键选择 运行设置.2.调优参数设置-Xms1G (初始堆内存1G )-Xmx2G (最大堆内存2G)-Xms1G -Xmx2G2. 如果依旧溢出就考虑代码出了BUG使用JProfiler工具分析出现Bug的位置.提示: 安装JProfiler教程在后面 二、标题处1.修改运行时候参数.-Xms1G -Xmx2G -XX:+HeapDumpOnOutOfMemoryError (你也可试试后面加上这个输出到指原创 2020-05-22 16:05:17 · 859 阅读 · 0 评论 -
JVM(入门篇06)深入理解堆内存
一、堆内存的组成.1.图解JDK1.8后永久区用元数据区(metaSpace)代替2. 堆内存溢出模拟.OOM(OutOfMemory)/** * 堆内存溢出模拟 */public class Demo { public static void main(String[] args) { StringBuilder stringBuilder = new StringBuilder(); while (true){原创 2020-05-22 13:05:08 · 825 阅读 · 0 评论 -
JVM(入门篇05)深入理解栈空间
一、栈基础1.位置2.几个特点吃多了吐就是栈,吃多了拉就是队列。(重点)栈存在生命周期,正在运行的永远在最上面,用完就弹出,如main()也弹出了,栈就销毁,内存释放3.(重点)栈中储存的数据八大基本数据类型对象引用的地址(举例??)实例的方法.二、栈帧1。定义栈帧(Stack Frame)栈空间的 基本元素,用于 方法的调用和方法的执行的数据结构2. 包含了什么?栈帧储存了1.方法的局部变量表2.操作数栈3.动态链接4.方法放回地址3.栈帧和方法的关原创 2020-05-22 09:08:08 · 710 阅读 · 0 评论 -
Java JVM(入门篇04)类加载的过程 和 对象 产生的内存分析.
一、类加载的过程.1. 上图2. 具体分析1.加载:使用ClassLoader把 .class 文件写入到方法区内存2.链接2.1验证:判断编译是否能通过2.2准备:加载static,和final到方法区(这里static会赋默认值,final赋指定值)2.3.解析(将常量池中的符号引用替换为直接引用)(1)符号引用:就是 final float PI 中的 PI 就是符号(2)直接引用:final float PI 的 PI的方法区的地址2341410x 就是直接引用(3)解析阶段原创 2020-05-21 22:36:56 · 234 阅读 · 0 评论 -
JVM (入门篇03)Native 方法.
一、1. 哪里有是Native方法(本地的)1.多线程的start()方法就调用了start0()private native void start0();2. Native的作用:让不同的编程语言为Java所用!使用了Native的方法会进入本地方法栈.然后调用(底层C或者C++代码写的) 本地方法接口JNI(java Native Interface)通过本地方法接口调用(底层C或者C++代码写的)本地方法库Native Method Labrary3. Native存在的历史原创 2020-05-21 21:20:31 · 936 阅读 · 0 评论 -
JVM(入门篇02)类加载器ClassLoader 和 双亲委派机制.
1.ClassLoader名称负责可访问启动类加载器(Bootstrap)将Java_home/lib的类库加载(比如rt.jar)加载到内存,使用C/C++编写时JVM的一部分,不能访问拓展类加载器(Extension)将lib/ext 或者系统变量 java.ext.dir 指定的位置中的类库加载到内存中,外部加载器使用Java编写,可以访问应用加载器(Application)负责将Classpath 的类(通常为自定义的类)加载到类库,因为这个类的加载器是原创 2020-05-21 20:44:23 · 192 阅读 · 0 评论 -
Java 类加载过程 和 类的加载器ClassLoader(重点)
一、什么是类加载器ClassLoader?1. 作用 * 一、ClassLoader类加载器的作用: * 1. 将编译器生成的.class文件加载到内存中, * 将硬盘中的静态数据转化为内存中方法区的动态数据2.上图哪个红里透绿的就是类加载器ClassLoader了3.类的缓存机制 * 二、类的缓存机制: * 1. 标准的JavaSE类加载器可以按要求查找类,但一旦某个类被加载到类加载器中, * 它将维持一段时间,(缓存)不过就JVM的垃圾回收机制可以回收这些Class对象。 *原创 2020-05-19 16:01:22 · 581 阅读 · 0 评论 -
JVM (入门篇01)JVM的位置.JVM的体系结构.
上图:原创 2020-05-15 16:24:35 · 277 阅读 · 0 评论