![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
captainNYS
这个作者很懒,什么都没留下…
展开
-
Java内存模型
1主内存与工作内存Java虚拟机规范中试图定义一种Java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量与Java编程时所说的变量不一样,指包括了实例字段、静态字段和构成数组对象的元素,但是不包括局部变...原创 2019-04-30 20:47:10 · 152 阅读 · 0 评论 -
虚拟机类加载机制
1概述 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。2类加载时机 类从被加载到虚拟机内存开始到卸载出内存,整个生命周期包括以下七个阶段,其中加载,验证,准备,初始化,卸载这5个阶段的顺序是确定的。 Java虚拟机并没有对类加载的时机进行强制约束。但是对...原创 2019-05-05 22:10:49 · 155 阅读 · 0 评论 -
对象的创建 & OutOfMemoryError
1.对象1.1对象的创建过程:虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析、和初始化过。如果没有,那必须先执行相应的类加载过程。 在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定。 内存分配完成后,虚拟机需要将分配到的内存空间都初始化为零...原创 2019-04-30 22:44:41 · 173 阅读 · 0 评论 -
Java运行时数据区域
注:图中线程隔离意味着线程私有。程序计数器(Program Counter Register)是一块较小的内存空间。 可以看做是当前线程所执行字节码的行号指示器。(字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理,线程恢复都需要依赖这个计数器)。 每个线程都需要有一个独立的程序计数器,各条线程之间互不影响,独立存储,是线程私有...原创 2019-04-30 10:32:52 · 164 阅读 · 0 评论 -
垃圾收集器与内存分配策略
1概述 在内存动态分配与内存回收技术已经很“自动化”很成熟的情况下,为什么还需要去了解GC(Garbage Collector)和内存分配? 当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节。 内存回收与分配重点关注的是堆内存和方法区内存(程序计数器占用小,虚拟机栈和本地方法栈随线程...原创 2019-05-06 21:24:56 · 171 阅读 · 0 评论 -
Java与线程
1线程的实现 线程是比进程更轻量级的调度执行单位,线程的引入可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、文件I/O等),又可以独立调度(线程是CPU调度的基本单位)。 实现线程主要由3种方式:使用内核线程实现 使用用户线程实现 使用用户线程加轻量级进程混合实现1.1使用内核线程实现 内核线程(Kernel-Level Thr...原创 2019-05-07 10:42:05 · 156 阅读 · 0 评论 -
线程安全与锁优化
1线程安全线程安全定义:“当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的”。1.1Java语言中的线程安全 Java 语言中各个操作共享的数据分为以下 5 类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。 ...原创 2019-05-07 22:36:42 · 127 阅读 · 0 评论