06 2020 档案

摘要:1、先用top命令找出有问题的进程,如果是Java程序有问题进行后续步骤 2、ps -ef或者jps进一步定位,得知哪一个后台程序 jps -l ps -ef | grep java | grep -v grep 3、定位到具体线程或者代码 ps -mp 进程编号 -o Thread,tid,tim 阅读全文
posted @ 2020-06-22 14:18 叮叮叮叮叮叮当 阅读(182) 评论(0) 推荐(0)
摘要:整机: top 系统性能 uptime 精简版 HuandeMacBook-Air:~ huanliu$ uptime 12:55 up 20 days, 3:07, 2 users, load averages: 5.37 9.02 13.47 //当前时间 运行总时间 用户数 //load av 阅读全文
posted @ 2020-06-22 14:07 叮叮叮叮叮叮当 阅读(182) 评论(0) 推荐(0)
摘要:G1之前收集器的特点 年轻代和老年代是各自独立且连续的内存块 年轻代收集器使用 eden + S0 + S1 进行复制算法 老年代收集必须扫描整个老年代区域 都是以尽可能的少而快速地执行 GC 为设计原则 G1 是什么 G1 是一种面向服务端的垃圾收集器,应用在多核处理器和大容量内存环境中,在实现高 阅读全文
posted @ 2020-06-22 12:15 叮叮叮叮叮叮当 阅读(409) 评论(0) 推荐(0)
摘要:垃圾回收算法 复制 标记清除 标记整理 分代收集算法 垃圾回收器 串行垃圾回收器(Serial) 它为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有的用户线程,所以不适合服务环境 并行垃圾回收器(Parallel) 多个垃圾收集线程并行工作,此时用户线程是暂停的,用于科学计算、大数据处理等弱 阅读全文
posted @ 2020-06-22 10:56 叮叮叮叮叮叮当 阅读(313) 评论(0) 推荐(0)
摘要:-Xms 初始大小内存,默认为物理内存 1/64 等价于 -XX:InitialHeapSize -Xmx 最大分配内存,默认为物理内存的 1/4 等价于 -XX:MaxHeapSize -Xss 设置单个线程栈的大小,一般默认为 512-1024k 等价于 -XX:ThreadStackSize 阅读全文
posted @ 2020-06-22 10:39 叮叮叮叮叮叮当 阅读(335) 评论(0) 推荐(0)
摘要:查看初始默认值:-XX:+PrintFlagsInitial HuandeMacBook-Air:~ huanliu$ java -XX:+PrintFlagsInitial [Global flags] uintx AdaptiveSizeDecrementScaleFactor = 4 {pro 阅读全文
posted @ 2020-06-22 10:32 叮叮叮叮叮叮当 阅读(857) 评论(0) 推荐(0)
摘要:标配参数 -version -help X 参数 -Xint:解释执行 -Xcomp:第一次使用就编译成本地代码 -Xmixed:混合模式 XX 参数 Boolean 类型:-XX:+ 或者 - 某个属性值(+ 表示开启,- 表示关闭) -XX:+PrintGCDetails:打印 GC 收集细节 阅读全文
posted @ 2020-06-22 10:16 叮叮叮叮叮叮当 阅读(281) 评论(0) 推荐(0)
摘要:什么是垃圾 简单来说就是内存中已经不在被使用到的空间就是垃圾 如何判断一个对象是否可以被回收 引用计数法(有循环引用无法回收的问题) 枚举根节点做可达性分析(Java采用的方式) 哪些对象可以作为 GC Roots 虚拟机栈(栈帧中的局部变量表)中引用的对象 方法区中的类静态属性引用的对象 方法区常 阅读全文
posted @ 2020-06-22 10:05 叮叮叮叮叮叮当 阅读(332) 评论(0) 推荐(0)
摘要:原因 死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种相互等待的现象,如果无外力的干涉那它们都将无法推进下去,如果系统的资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁 代码 public class DeadLockDemo { p 阅读全文
posted @ 2020-06-19 15:35 叮叮叮叮叮叮当 阅读(270) 评论(0) 推荐(0)
摘要:原始结构 synchronized 是关键字属于 JVM 层面,反应在字节码上是 monitorenter 和 monitorexit,其底层是通过 monitor 对象来完成,wait/notify 等方法也是依赖 monitor 对象,只有在同步块或方法中才能调用 wait/notify 等方法 阅读全文
posted @ 2020-06-19 14:39 叮叮叮叮叮叮当 阅读(214) 评论(0) 推荐(0)
摘要:概念 首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如图所示: 当阻塞队列是空时,从队列中获取元素的操作将会被阻塞 当阻塞队列是满时,往队列里添加元素的操作将会被阻塞 核心方法 抛异常:如果操作不能马上进行,则抛出异常 特定的值:如果操作不能马上进行,将会返回一个特殊的值,一般是 tru 阅读全文
posted @ 2020-06-18 10:29 叮叮叮叮叮叮当 阅读(254) 评论(0) 推荐(0)
摘要:CountDownLatch 让一些线程堵塞直到另一个线程完成一系列操作后才被唤醒。CountDownLatch 主要有两个方法,当一个或多个线程调用 await 方法时,调用线程会被堵塞,其他线程调用 countDown 方法会将计数减一(调用 countDown 方法的线程不会堵塞),当计数其值 阅读全文
posted @ 2020-06-18 09:56 叮叮叮叮叮叮当 阅读(208) 评论(0) 推荐(0)
摘要:适用性 缓存在很多场景下都是相当有用的。例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存 Guava Cache与ConcurrentMap很相似,但也不完全一样。最基本的区别是ConcurrentMap会一直保存所有添加的元素,直到显式地移除。相对地, 阅读全文
posted @ 2020-06-17 17:41 叮叮叮叮叮叮当 阅读(1674) 评论(0) 推荐(0)
摘要:公平和非公平锁 公平锁:是指多个线程按照申请的顺序来获取值。在并发环境中,每一个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一个就占有锁,否者就会加入到等待队列中,以后会按照 FIFO 的规则获取锁 非公平锁:是指多个线程获取值的顺序并不是按照申请锁的顺序,有可能后 阅读全文
posted @ 2020-06-17 15:13 叮叮叮叮叮叮当 阅读(757) 评论(0) 推荐(0)
摘要:写入时复制(CopyOnWrite) 写入时复制(CopyOnWrite,简称COW)思想是计算机程序设计领域中的一种优化策略。其核心思想是,如果有多个调用者(Callers)同时要求相同的资源(如内存或者是磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者视图修改资源内容时 阅读全文
posted @ 2020-06-17 14:22 叮叮叮叮叮叮当 阅读(337) 评论(0) 推荐(0)
摘要:ArrayList的线程安全故障 /** * 发现报java.util.ConcurrentModificationException */ public class ContainerDemo { public static void main(String[] args) { List<Inte 阅读全文
posted @ 2020-06-17 11:08 叮叮叮叮叮叮当 阅读(139) 评论(0) 推荐(0)
摘要:原子引用 public class AtomicReferenceDemo { public static void main(String[] args) { User cuzz = new User("cuzz", 18); User faker = new User("faker", 20); 阅读全文
posted @ 2020-06-17 10:58 叮叮叮叮叮叮当 阅读(198) 评论(0) 推荐(0)
摘要:原子类使用 public class CASDemo { public static void main(String[] args) { AtomicInteger atomicInteger = new AtomicInteger(666); // 获取真实值,并替换为相应的值 boolean 阅读全文
posted @ 2020-06-17 10:49 叮叮叮叮叮叮当 阅读(278) 评论(0) 推荐(0)
摘要:概念 volatile 是 Java 虚拟机提供的轻量级的同步机制,保证可见性,禁止指令重排,不保证原子性 保证可见性 public class VolatileDemo { public static void main(String[] args) { Data data = new Data( 阅读全文
posted @ 2020-06-16 17:00 叮叮叮叮叮叮当 阅读(157) 评论(0) 推荐(0)
摘要:基本概念 JMM 本身是一种抽象的概念并不是真实存在,它描述的是一组规范,通过这组规范定义了程序的访问方式 JMM 同步规定 线程解锁前,必须把共享变量的值刷新回主内存 线程加锁前,必须读取主内存的最新值到自己的工作内存 加锁解锁是同一把锁 由于 JVM 运行程序的实体是线程,而每个线程创建时 JV 阅读全文
posted @ 2020-06-16 16:34 叮叮叮叮叮叮当 阅读(228) 评论(0) 推荐(0)
摘要:JVM学习目录 JVM的整体结构 1、类加载子系统 类加载子系统 2、运行时数据区 运行时数据区总览 堆、栈、方法区的详细图解 2.1、程序计数器 程序计数器 2.2、本地方法栈 本地方法栈 2.3、虚拟机栈 基础知识 栈帧的内部结构--局部变量表 栈帧的内部结构--操作数栈 栈帧的内部结构--动态 阅读全文
posted @ 2020-06-15 11:03 叮叮叮叮叮叮当 阅读(1408) 评论(0) 推荐(0)
摘要:在HotSpot VM中内嵌有两个JIT编译器,分别为Client Compiler和Server Compiler,但大多数情况下我们简称为C1编译器和C2编译器。开发人员可以通过如下命令显式指定Java虚拟机在运行时到底使用哪一种即时编译器,如下所示: -client: 指定Java虚拟机运行在 阅读全文
posted @ 2020-06-10 17:09 叮叮叮叮叮叮当 阅读(338) 评论(0) 推荐(0)
摘要:Java代码的执行分类: 第一种是将源代码编译成字节码文件,然后再运行时通过解释器将字节码文件转为机器码执行 第二种是编译执行(直接编译成机器码)。现代虚拟机为了提高执行效率,会使用即时编译技术(JIT,Just In Time)将方法编译成机器码后再执行 HotSpot VM是目前市面上高性能虛拟 阅读全文
posted @ 2020-06-10 17:03 叮叮叮叮叮叮当 阅读(296) 评论(0) 推荐(0)
摘要:解释器 JVM设计者们的初衷仅仅只是单纯地为了满足Java程序实现跨平台特性,因此避免采用静态编译的方式直接生成本地机器指令,从而诞生了实现解释器在运行时采用逐行解释字节码执行程序的想法。 解释器真正意义上所承担的角色就是一个运行时“翻译者”,将字节码文件中的内容“翻译”为对应平台的本地机器指令执行 阅读全文
posted @ 2020-06-10 16:49 叮叮叮叮叮叮当 阅读(930) 评论(0) 推荐(0)
摘要:概述 执行引擎是Java虚拟机的核心组成部分之一 虚拟机是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些 阅读全文
posted @ 2020-06-10 16:30 叮叮叮叮叮叮当 阅读(3044) 评论(0) 推荐(1)
摘要:附:JVM学习目录 阅读全文
posted @ 2020-06-10 15:27 叮叮叮叮叮叮当 阅读(545) 评论(0) 推荐(0)
摘要:有些人认为方法区(如Hotspot,虚拟机中的元空间或者永久代)是没有垃圾收集行为的,其实不然。《Java 虚拟机规范》对方法区的约束是非常宽松的,提到过可以不要求虚拟机在方法区中实现垃圾收集。事实上也确实有未实现或未能完整实现方法区类型卸载的收集器存在(如 JDK11 时期的 2GC 收集器就不支 阅读全文
posted @ 2020-06-10 15:25 叮叮叮叮叮叮当 阅读(1073) 评论(0) 推荐(0)
摘要:过程 只有HotSpot才有永久代。 BEA JRockit、IBM J9等来说,是不存在永久代的概念的。原则上如何实现方法区属于虛拟机实现细节,不受《Java虚拟机规范》管束,并不要求统一 Hotspot中 方法区的变化: jdk1.6及之前:有永久代(permanent generation) 阅读全文
posted @ 2020-06-10 15:17 叮叮叮叮叮叮当 阅读(477) 评论(0) 推荐(0)
摘要:《深入理解Java虚拟机》书中对方法区存储内容描述如下:它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等 类型信息 对每个加载的类型( 类class、接口interface、枚举enum、注解annotation),JVM必须在方法区中存储以下类型信息: 这个类型的完 阅读全文
posted @ 2020-06-10 15:05 叮叮叮叮叮叮当 阅读(490) 评论(4) 推荐(0)
摘要:配置 jdk7及以前: -XX:PermSize来设置永久代初始分配空间。默认值是20.75M -XX:MaxPermSize来设定永久代最大可分配空间。32位机器默认是64M,64位机器模式是82M 当JVM加载的类信息容量超过了这个值,会报异常OutOfMemoryError : PermGen 阅读全文
posted @ 2020-06-10 14:38 叮叮叮叮叮叮当 阅读(425) 评论(0) 推荐(0)
摘要:堆、栈、方法区堆关系 概述 方法区与堆区一样,是各个线程共享的内存区域 方法区在JVM启动时就会被创建,并且它的实际的物理内存空间中和Java堆区一样都可以是不连续的 方法区的大小,跟堆空间一样,可以选择固定大小或者可拓展 方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢 阅读全文
posted @ 2020-06-10 14:24 叮叮叮叮叮叮当 阅读(1102) 评论(0) 推荐(0)
摘要:引言 在《深入理解Java虚拟机》中关于Java堆内存有这样一段描述:随着JIT编译期的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化,所有的对象都分配到堆上也渐渐变得不那么“绝对”了 在Java虚拟机中,对象是在Java堆中分配内存的,这是一个普遍的常识。但是,有一种 阅读全文
posted @ 2020-06-10 10:54 叮叮叮叮叮叮当 阅读(459) 评论(0) 推荐(0)
摘要:-XX:PrintFlagsInitial: 查看所有参数的默认初始值 -XX:PrintFlagsFinal:查看所有的参数的最终值(可能会存在修改,不再是初始值) 具体查看某个参数的指令: jps:查看当前运行中的进程 jinfo -flag SurvivorRatio 进程id(Survivo 阅读全文
posted @ 2020-06-10 10:09 叮叮叮叮叮叮当 阅读(306) 评论(0) 推荐(0)
摘要:TLAB产生的原因 堆区是线程共享区域,任何线程都可以访问到堆区中的共享数据 由于对象实例的创建在JVM中非常频繁,因此在并发环境下从堆区中划分内存空间是线程不安全的 为避免多个线程操作同一地址,需要使用加锁等机制,进而影响分配速度 TLAB是什么 从内存模型而不是垃圾收集的角度,对Eden区域继续 阅读全文
posted @ 2020-06-10 09:56 叮叮叮叮叮叮当 阅读(859) 评论(0) 推荐(0)
摘要:概述 如果对象在Eden出生并经过第一次Minor GC后依然存活,并且能被Survivor容纳的话,将被移动到Survivor空间中,把那个将对象年龄设为1,对象在Survivor区中每熬过一次MinorGC,年龄就增加一岁,当它的年龄增加到一定程度(默认15岁,其实每个JVM、每个GC都有所不同 阅读全文
posted @ 2020-06-09 17:21 叮叮叮叮叮叮当 阅读(588) 评论(0) 推荐(0)
摘要:分类 针对hotSpot VM的实现,它里面的GC按照回收区域又分为两大种类型:一种是部分收集(Partial GC),一种是整堆收集(Full GC) 部分收集:不是完整收集整个Java堆的垃圾收集。其中又分为: 新生代收集(Minor GC/Young GC):只是新生代的垃圾收集 老年代收集( 阅读全文
posted @ 2020-06-09 17:09 叮叮叮叮叮叮当 阅读(387) 评论(0) 推荐(0)
摘要:一般情况 new的对象先放伊甸园区,此区有大小限制 当伊甸园的空间填满时,程序又需要创建对象,出发GC(Minor GC),将伊甸园区中的不再被其他对象所引用的对象进行销毁。再加载新的对象放到伊甸园区 然后将伊甸园中的剩余对象移动到幸存者0区 如果再次触发垃圾回收,此时上次幸存下来的放到幸存者0区的 阅读全文
posted @ 2020-06-09 16:39 叮叮叮叮叮叮当 阅读(407) 评论(0) 推荐(0)
摘要:概述 存储在JVM中的java对象可以被划分为两类: 一类是生命周期较短的瞬时对象,这类对象的创建和消亡都非常迅速 另外一类对象时生命周期非常长,在某些情况下还能与JVM的生命周期保持一致 Java堆区进一步细分可以分为年轻代(YoungGen)和老年代(OldGen) 其中年轻代可以分为Eden空 阅读全文
posted @ 2020-06-09 16:27 叮叮叮叮叮叮当 阅读(420) 评论(0) 推荐(0)
摘要:设置 Java堆区用于存储java对象实例,堆的大小在jvm启动时就已经设定好了,可以通过 "-Xmx"和 "-Xms"来进行设置 -Xms 用于表示堆的起始内存,等价于 -XX:InitialHeapSize -Xms 用来设置堆空间(年轻代+老年代)的初始内存大小 -X 是jvm的运行参数 ms 阅读全文
posted @ 2020-06-09 16:12 叮叮叮叮叮叮当 阅读(1040) 评论(0) 推荐(0)
摘要:概述 一个进程对应一个JVM实例,一个运行时数据区,又包含多个线程,这些线程共享了方法区和堆,每个线程包含了程序计数器、本地方法栈和虚拟机栈 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域 Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间 阅读全文
posted @ 2020-06-09 16:04 叮叮叮叮叮叮当 阅读(557) 评论(2) 推荐(0)
摘要:本地方法接口 简单来讲,一个Native Method就是java调用非java代码的接口,一个Native Method 是这样一个java方法:该方法的实现由非Java语言实现,比如C。这个特征并非java特有,很多其他的编程语言都有这一机制,比如在C++ 中,你可以用extern “C” 告知 阅读全文
posted @ 2020-06-09 15:16 叮叮叮叮叮叮当 阅读(307) 评论(0) 推荐(0)
摘要:本地方法栈 Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用 本地方法栈,也是线程私有的。 允许被实现成固定或者是可动态拓展的内存大小。(在内存溢出方面是相同的) 如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个StackOverFlow 阅读全文
posted @ 2020-06-09 15:02 叮叮叮叮叮叮当 阅读(351) 评论(0) 推荐(0)
摘要:Q:举例栈溢出的情况?(StackOverflowError) A:递归调用等,通过-Xss设置栈的大小 Q:调整栈的大小,就能保证不出现溢出么? A:不能,如递归无限次数肯定会溢出,调整栈大小只能保证溢出的时间晚一些 Q:分配的栈内存越大越好么? A:不是 会挤占其他线程的空间 Q:垃圾回收是否会 阅读全文
posted @ 2020-06-09 14:57 叮叮叮叮叮叮当 阅读(237) 评论(0) 推荐(0)
摘要:每个栈帧中包含: 局部变量表(Local Variables) 操作数栈(Opreand Stack) 或表达式栈 动态链接 (Dynamic Linking) (或指向运行时常量的方法引用) 动态返回地址(Return Address) (或方法正常退出或者异常退出的引用的定义) 一些附加信息 一 阅读全文
posted @ 2020-06-09 14:40 叮叮叮叮叮叮当 阅读(390) 评论(0) 推荐(0)
摘要:RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。一个用户拥有若干角色,每一个角色拥有若干权限,构成“用户-角色-权限”的授权模型,在这种模型中,用户与角色之间,角色与权限之间,是多对多的关系 (RPAC权限模型) 当用户的数量非常大 阅读全文
posted @ 2020-06-08 16:54 叮叮叮叮叮叮当 阅读(1080) 评论(0) 推荐(0)
摘要:1 package com.liuhuan.study.config; 2 3 import com.google.common.util.concurrent.ThreadFactoryBuilder; 4 import org.springframework.context.annotation 阅读全文
posted @ 2020-06-08 16:07 叮叮叮叮叮叮当 阅读(1124) 评论(0) 推荐(0)
摘要:每个栈帧中包含: 局部变量表(Local Variables) 操作数栈(Opreand Stack) 或表达式栈 动态链接 (Dynamic Linking) (或指向运行时常量的方法引用) 动态返回地址(Return Address) (或方法正常退出或者异常退出的引用的定义) 一些附加信息 动 阅读全文
posted @ 2020-06-05 18:02 叮叮叮叮叮叮当 阅读(2762) 评论(2) 推荐(0)
摘要:每个栈帧中包含: 局部变量表(Local Variables) 操作数栈(Opreand Stack) 或表达式栈 动态链接 (Dynamic Linking) (或指向运行时常量的方法引用) 动态返回地址(Return Address) (或方法正常退出或者异常退出的引用的定义) 一些附加信息 动 阅读全文
posted @ 2020-06-05 17:53 叮叮叮叮叮叮当 阅读(6137) 评论(0) 推荐(1)
摘要:每个栈帧中包含: 局部变量表(Local Variables) 操作数栈(Opreand Stack) 或表达式栈 动态链接 (Dynamic Linking) (或指向运行时常量的方法引用) 动态返回地址(Return Address) (或方法正常退出或者异常退出的引用的定义) 一些附加信息 操 阅读全文
posted @ 2020-06-05 16:07 叮叮叮叮叮叮当 阅读(866) 评论(0) 推荐(0)
摘要:每个栈帧中包含: 局部变量表(Local Variables) 操作数栈(Opreand Stack) 或表达式栈 动态链接 (Dynamic Linking) (或指向运行时常量的方法引用) 动态返回地址(Return Address) (或方法正常退出或者异常退出的引用的定义) 一些附加信息 局 阅读全文
posted @ 2020-06-05 15:50 叮叮叮叮叮叮当 阅读(2058) 评论(0) 推荐(0)
摘要:虚拟机栈即是程序运行时的单位,而堆是数据存储的单位。换句话说,栈解决的是程序运行的问题,即程序如何执行,如何处理数据,而堆是解决数据的存储问题,数据存在哪,放在哪 虚拟机栈细节如下图所示,其中当前栈帧中包含 局部变量表、操作数栈、动态链接、本地返回值。另外对于栈来说,每个线程在创建时都会创建一个虚拟 阅读全文
posted @ 2020-06-05 15:06 叮叮叮叮叮叮当 阅读(469) 评论(0) 推荐(0)
摘要:简介 项目中编写API的时候因为要处理异常,所以代码中最常见的就是try-catch-finally,有时一个try,多个catch,代码既不美观,写的时候还很麻烦,Spring中提供了处理全局异常的方式,一个项目中只需要定义一次就不用在四处try-catch了,省时省力又优雅。 用法 Spring 阅读全文
posted @ 2020-06-05 13:14 叮叮叮叮叮叮当 阅读(741) 评论(0) 推荐(0)
摘要:简介 Java8除了有较大更新的 lambda、 Stream ,还推出了全新的日期时间API。Java之前处理日期、日历和时间的不足之处主要有: 日期类型为可变类型,非线程安全使其应用非常受限 没有引入时区,不支持国际化,因此引入了java.util.Calendar和java.util.Time 阅读全文
posted @ 2020-06-05 11:12 叮叮叮叮叮叮当 阅读(191) 评论(0) 推荐(0)
摘要:程序计数器(PC Register) 这里的计数器(Program Counter Register)并非为广义上所指的物理寄存器,JVM中的PC寄存器(程序计数器)是对物理PC寄存器的一种抽象模拟,相当于IDE中的光标索引值,行号,表示当前正在编辑的行号。 PC寄存器用来存储指向下一条指令的地址, 阅读全文
posted @ 2020-06-04 14:26 叮叮叮叮叮叮当 阅读(822) 评论(0) 推荐(1)
摘要:运行时数据区 class文件使用类加载子系统进行加载,经过加载、链接、初始化三个过程后进入方法区。接下来需要使用执行引擎进行执行并依赖于运行时数据区 如图所示,相同灰色为线程私有,绿色为多个线程共享的 线程是一个程序里的运行单元,jvm允许一个应用有多个线程并行执行,即多线程思想。每个线程独立包括程 阅读全文
posted @ 2020-06-04 12:34 叮叮叮叮叮叮当 阅读(387) 评论(0) 推荐(0)
摘要:类加载子系统 类加载子系统的主要功能是将本地物理文件加载到内存中,其结构如下所示: 1、加载(Loading) 通过一个类的全限定名获取定义此类的二进制文件字节流。 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 在内存中生成一个代表这个类的java.lang.Class对象,作为方 阅读全文
posted @ 2020-06-04 11:12 叮叮叮叮叮叮当 阅读(515) 评论(0) 推荐(0)
摘要:整个jvm的运行流程图如上所示,首先需要进行加载class文件,然后使用类加载子系统将class翻译解析导入内存,在内存中分别导入到对应的运行时数据区,然后执行引擎开始执行,对于需要的数据在对应的区域进行获取。 本文基于Hotspot虚拟机,采用的是解释器与即时编译器(JIT)并存的架构。 整体的结 阅读全文
posted @ 2020-06-04 10:36 叮叮叮叮叮叮当 阅读(524) 评论(0) 推荐(0)