![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
j2370530
这个作者很懒,什么都没留下…
展开
-
HotSpot虚拟机对象的创建
注意:此处对象的创建过程仅适用于普通的Java对象,不包括数组和Class对象对象的创建过程虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用(类的权限定类名??),并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在原创 2017-02-28 00:05:33 · 260 阅读 · 0 评论 -
JAVA运行时数据区域:内存区域与内存溢出异常
方法区(Method Area)存储内容 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。与线程的关系 各个线程共享该内存区域 异常 这区域的内存回收目标主要是针对常量池的回收和对类型的卸载。当方法区无法满足内存分配需求时,将抛出OutMemoryError异常。 运行时常量池运行时常量池(Runtime Constant Pool)是方法原创 2017-02-26 13:19:42 · 392 阅读 · 0 评论 -
垃圾收集器
HotSpot虚拟机中的垃圾收集器Serial收集器新生代收集器Serial收集器是一个单线程的收集器,即只会使用一个CPU或一条收集线程去完成来及收集工作,更重要的是在进行来及收集时,必须暂停其他所有的工作线程,直到收集结束。serial收集器的工作过程Serial收集器对于运行在Client模式下的虚拟机来说是一个很好的选择。ParNew收集器原创 2017-03-12 16:06:55 · 279 阅读 · 0 评论 -
HotSpot算法实现
枚举根节点GC停顿在进行对象的可达性分析时,必须在一个能确保一致性的快照中进行(一致性即在整个分析期间,整个执行系统不可以出现分析过程中,对象引用关系还在不断变化的过程),该点不满足的话分析结果准确性就无法得到保证。所以GC进行时必须停顿所有Java线程。所以枚举根节点时必须要停顿。HotSpot枚举的实现在HotSpot的实现中,是使用一组称为OopMap(Ordinary Ob原创 2017-03-12 11:41:10 · 641 阅读 · 0 评论 -
java虚拟机中如何判断对象是否存活
程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的。Java堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,只有在程序处于运行期间时才能知道会创建哪些对象,这部分内存的分配和回收都是动态,垃圾收集器主原创 2017-03-10 00:21:44 · 749 阅读 · 0 评论 -
垃圾收集算法
标记--清除算法(Mark-Sweep)算法分为标记和清除两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。不足:第一点,效率问题,标记和清除两个过程的效率都不高 第二点,空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不原创 2017-03-09 00:08:36 · 275 阅读 · 0 评论 -
线程的3中实现方式
使用内核线程实现使用用户线程实现使用用户线程加轻量级进程混合实现原创 2017-02-14 23:46:19 · 728 阅读 · 0 评论 -
java内存模型的原子性、可见性、有序性(先行发生原则)
原子性、可见性、有序性Java内存模型是围绕着在并发过程中如何处理原子性、可见性和有序性这3个特征来建立的。原子性(Atomicity):由Java内存模型来直接保证的原子性变量操作包括read、load、use、assign、store、write,我们大致可以认为基本数据类型的访问读写是具备原子性的。如果需要一个更大范围的原子性操作,Java内存模型提供了lock和unlo原创 2017-02-13 23:48:13 · 2179 阅读 · 1 评论 -
Java内存模型(JMM)
Java内存模型 概念 内存模型(memory model):在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象。作用 java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。(注:此处变量与java编程中所说的变量有所区别,它包括了实例字段、静态字段、构成数组对象的元素,但不包括局部变量和方法参数,因为后者是线程原创 2017-02-12 23:20:31 · 277 阅读 · 0 评论 -
线程安全
线程安全线程安全的定义当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。Java语言中各种操作共享数据的情况,按照线程安全程度,由强至弱来排序:不可变(Immutable)不可变的对象一定是线程安全的,无论是对象的方法实现还原创 2017-02-16 23:38:01 · 242 阅读 · 0 评论