![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
Baymax_wyl
你不努力,没人会给你想要的生活。
展开
-
Java虚拟机——Java内存区域与内存溢出异常
对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不在需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题。程序员把对内存控制的权利交给了Java虚拟机,一旦出现内存的泄漏和溢出方面的问题,若不了解虚拟机怎样使用内存,则排查错误将成为一项异常艰难的工作程序计数器是一块较小的内存空间,他可以看做是当前线程所执行的字节码的行号指示器。由于Ja...原创 2018-07-17 11:34:15 · 193 阅读 · 0 评论 -
JVM——虚拟机类加载机制
1、概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 在Java语言中,类型的加载、连接和初始化过程都是在程序运行期间完成的。 Java天生可以动态扩展的语言特性就是依赖运行期动态加载和动态链接两个特点实现的。2、类加载的时机类从被加载到虚拟机内存中开始,到卸载出内存为止,他...原创 2018-08-30 14:50:05 · 165 阅读 · 0 评论 -
JVM——线程安全与锁优化
目录 1、概述2、线程安全2.1Java语言中的线程安全2.2线程安全的实现方法3、锁优化3.1自旋锁与自适应自旋3.2锁消除3.3锁粗化3.4轻量级锁3.5偏向锁1、概述面向对象的编程思想是站在现实世界的角度去抽象和解决问题,它把数据和行为都看作是对象的一部分,这样可以让程序员能以符合现实世界的思维方式来编写和组织程序。2、线程安全《J...原创 2018-07-23 08:48:20 · 218 阅读 · 0 评论 -
JVM——Java内存模型与线程
目录 1、概述2、硬件的效率与一致性3、Java内存模型3.1主内存与工作内存3.2内存间交互操作3.3对于volatile型变量的特殊规则3.4对于long和double类型的特殊规则3.5原子性、可见性与有序性3.6先行发生原则4、Java与线程4.1线程的实现4.2Java线程调度4.3状态转换1、概述“高效并发”2、硬件的...原创 2018-07-23 08:45:26 · 266 阅读 · 0 评论 -
JVM——直接引用和符号引用
在JVM中,类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。而解析阶段即是虚拟机将常量池内的符号引用替换为直接引用的过程。1.符号引用(Symbolic References):符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标即可。 例如,在Class文件中它...原创 2018-07-21 15:06:06 · 213 阅读 · 0 评论 -
JVM——虚拟机字节码执行引擎
目录1、概述 2、运行时栈帧结构2.1局部变量表2.2操作数栈2.3动态连接2.4方法返回地址2.5附加信息3、方法调用3.1解析3.2分派3.3动态类型语言支持4、基于栈的字节码解释执行引擎4.1解释执行4.2基于栈的指令集与基于寄存器的指令集4.3基于栈的解释器执行过程1、概述 虚拟机的执行引擎是由自己实现的,因此可以自行制...原创 2018-07-21 14:34:10 · 205 阅读 · 0 评论 -
JVM——虚拟机类加载机制——初始化
类初始化阶段是类加载过程的最后一步,前面的类加载过程中,除了在加载阶段用户应用程序可以通过自定义类加载器参与之外,其余动作完全由虚拟机主导和控制。到了初始化阶段,才真正开始执行类中定义的Java程序代码(或者说字节码).在准备阶段,变量已经赋过一次系统要求的初始值,而在初始化阶段,则根据程序员通过程序控制的主观设计去初始化类变量和其他资源。静态语句块中只能访问到定义在静态语句...原创 2018-07-21 10:39:19 · 202 阅读 · 0 评论 -
JVM——虚拟机类加载机制——字段解析
如果一个同名字段同时出现在C的接口和父类中,或者同时出现在自己或父类的多个接口中出现,那么编译器将可能拒绝编译。 package jvm;/** * @author wyl * @time 2018年7月21日上午10:08:56 */public class Test1 { interface Interface0{ int A=0; } interfa...原创 2018-07-21 10:20:44 · 361 阅读 · 0 评论 -
垃圾回收器与内存分配管理
程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭。 Java堆和方法区则不同,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处于运行期间才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾回收器所关注的是这部分内存。1.引用计数算法——主流JVM不使用该算法来管理内存判断对象是否存活的算法是:给对...原创 2018-07-17 15:47:27 · 150 阅读 · 0 评论 -
JVM0909
1、可以给JVM设置一些参数,如Xmx256m表示JVM的最大可用内存。(x)最大堆内存是Xmx。除了堆,还有方法区、线程栈,还有本地内存可以使用。2、jvm堆分为:新生代(一般是一个Eden区,两个Survivor区),老年代(old区)。 常量池属于 PermGen(方法区)1,新生代:(1)所有对象创建在新生代的Eden区,当Eden区满后触发新生代的Minor G...原创 2018-09-09 15:25:54 · 118 阅读 · 0 评论