jvm
xzq823211673
码农
展开
-
JVM-内存模型
java的内存模型,简称JMM什么是java的内存模型? java的内存模型就是一种符合内存规范的,屏蔽了各种硬件和操作系统的访问差异,保证了java程序在各种平台下对内存的访问都能保证效果一致的机制和规范。java内存模型的主要目的是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出这个变量的内存细节。JMM规定了所有变量都存储在主内存中,每个线程还有自己...原创 2019-07-13 12:14:38 · 89 阅读 · 0 评论 -
JVM-类的加载机制
要想真正理解java类的加载机制,分三个步骤去理解:1,类什么时候加载2,类的加载过程3,用什么去加载类以下分三部分去介绍java类的加载时机、类的加载过程、加载器。1,类的加载过程类的加载过程主要分为七个阶段,但主要的过程是加载、验证、准备、解析、初始化。1.1,加载在加载阶段,虚拟机需要完成的三件事:1,通过一个类的全限定名来获取该类的二进制字节流;...原创 2019-07-13 12:08:12 · 113 阅读 · 0 评论 -
JVM-对象创建过程
对象的创建: 当虚拟机遇到一条new指令时,首先会去检查这个指令的参数是否能在常量池中定位到 一个类的符号引用,并检查这个符号引用代表的类是否已经被加载、解析、初始化过。 如果没有,那必须先执行类的加载过程。 在类加载检查通过后,接下来虚拟机将为新对象分配内存。对象所需的内存大小,在类 加载完成后就可以完全确定。 分配内存的两种方式: ...原创 2019-07-13 11:12:57 · 99 阅读 · 0 评论 -
JVM-内存区域划分
java虚拟机在执行java程序的过程中会把它管理的内存划分为若干个不同的数据区域。 1. 程序计数器 程序计数器是一块比较小的区域,它可以看作为当前线程所执行的字节码的行号指示 器。字节码解析器工作时就是通过改变程序计数器的来选取下一条需要执行的字节码 指令,分支、循环、跳转、异常处理、线程恢复等基础功能都要依赖程序计数器去完 成。 ...原创 2019-07-13 11:09:23 · 95 阅读 · 0 评论 -
JVM-java线程实现
线程的实现线程是cpu最小的调度单位。线程实现的方式主要有:1,使用内核线程实现;2,使用用户线程实现;3,使用用户线程和轻量级进程实现;使用内核线程实现内核线程就是直接由操作系统内核支持的线程,这种进程由内核来完成进程切换,内核通过调度器对线程进行调度,并负责将线程的任务映射的处理器上。每个内核线程可以看作为内核的一个分身。程序一般不会直接使用内核线程,而是去使用...原创 2019-07-13 12:55:51 · 159 阅读 · 0 评论 -
JVM-线程安全以及锁优化
1,线程安全的定义定义:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那么这个对象是线程安全的。如果将线程安全的“安全程度”由强至弱来排序,那么可以分为以下5类:不可变、绝对线程安全、相对线程安全、线程兼容以及线程对立。1.1,不可变不可变的对象一定是线程...原创 2019-07-13 13:03:09 · 144 阅读 · 0 评论 -
JVM-垃圾回收机制
垃圾回收主要发生在堆内存,从以下三个方面入手:1,哪些内存需要回收?2,什么时候回收?3,如何回收?首先先说下堆内存分配:主要分为新生代和老年代:新生代分为:Eden(8)区,from survivor(1)区,to survivor(1)区,进行minor gc的时候会在两个survivor左右复制,因此会有一个survivor区域的空间总是空置的。老年代:主要...原创 2019-07-13 13:07:10 · 148 阅读 · 0 评论