美文网首页
JVM学习-1 概念速查

JVM学习-1 概念速查

作者: 咪雅先森 | 来源:发表于2019-11-16 11:47 被阅读0次

初始化

简单的说,就是在内存中开申请一片空间。
比如:变量、对象。
所以为什么引用有初始化才能用。

堆、栈

栈:连续的空间,放置局部变量;
堆:不连续的空间,用来存放new对象;

堆(Heap)

new 出来的对象都存放在堆里。这里还有常量池。

栈(Stack)

又叫堆栈。JVM为每个新创建的线程都分配一个栈。也就是说,对于一个Java程序来说,它的运行就是通过对栈的操作来完成的。栈以帧为单位保存线程的状态。JVM对栈只进行两种操作:以帧为单位的压栈和出栈操作。

OopMap

Ordinary Object Pointer
记录对象在内存的精确位置,以帮助 HotSpot 快速且准确的完成 GC roots枚举。

HotSpot 不可能为每条指定都生成 OopMap,只有在特定位置才会生成。这个特定位置称做:安全点。
即,程序执行时并非在所有地方都能停顿下来做GC,只有在到达安全点时才能暂停。

局部变量表

Java中方法的局部变量是放在虚拟机栈的局部变量表里面,形参也算一个。
本地变量表,就是局部变量表,只是翻译不同。

代码说明

public static void main(String[] args) {  
   byte[] waste = new byte[6 * 1024 * 1024];  
   int new_var = 0;  
   System.gc();  
}  

反编译得到:

public static void main(java.lang.String[]);  
   flags: ACC_PUBLIC, ACC_STATIC  
   Code:  
     stack=1, locals=3, args_size=1  
        0: ldc           #2                  // int 6291456  
        2: newarray       byte  
        4: astore_1  
        5: iconst_0  
        6: istore_2  
        7: invokestatic  #3                  // Method java/lang/System.gc:()V  
       10: return  

结果:
locals=3
也就是说局部变量表长度是3.

原子性 和 可见性

原子性:

即,不可分割性,白话就是操作不允许被打断。为了保证不被打断就要使用同步的方式,如:synchronized。
a++ 实际是 a = a + 1; 这不是一个原子操作。
非原子操作就会存在线程字全问题。

可见性:

是指线程之间的可见性。
一个线程修改的状态,对另一个线程是可见的。也就是一个线程修改的结果。另一个线程马上就能看到。
这么说是因为每个线程的内部都有自己的工作内存,当从内存顺读取一个变量后,这部份变量就会在线程内存有一份独立的副本,当前线程操作的是这个独立副本。
那么,如何实现呢可见性呢,有请 volatile。
volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线程是可见的。

GC 概念

Full GC

Full GC 针对整个新生代、老生代、元空间(metaspace,java8以上版本取代perm gen)的全局范围的GC;

Minor GC

Minor GC 在Hotspot JVM实现的Serial GC, Parallel GC, CMS, G1 GC中大致可以对应到某个Young GC和Old GC算法组合;

Major GC

Stop The World

GC roots

GC root 对象是有多种,而非指某一个。
包括以下几类对象:
1.虚拟机栈(栈帧中的本地变量表)中引用的对象;
2.方法区中类静态属性引用的对象;
3.方法区中常量引用的对象;
4.本地方法栈中JNI(即一般说的Native方法)引用的对象;

简而言之就是:方法运行时,方法中引用的对象;类的静态变量引用的对象;类中常量引用的对象;Native方法中引用的对象。

相关文章

  • JVM学习-1 概念速查

    初始化 简单的说,就是在内存中开申请一片空间。比如:变量、对象。所以为什么引用有初始化才能用。 堆、栈 栈:连续的...

  • 【JVM篇】【JVM的组成】

    【JAVA】【JVM篇】【JVM的组成】 来自二线的码农笔记,用自己的理解总结知识点,互相学习 1. JVM概念 ...

  • JVM学习-1分代的概念

    1.为什么要有分代的概念,不分代行不行 不分代完全可以,但是分代的唯一理由是为了优化GC性能。怎么优化?如果不进行...

  • 深入JVM内核1 初识JVM

    深入JVM内核 目录 1 JVM概念 JVM是Java Virtual Machine的简称。意味Java虚拟机虚...

  • 1.machine_learning_cheatsheet

    1.machine_learning_cheatsheet CS229版机器学习速查表 2.简洁版机器学习速查表

  • JVM (一)内存与垃圾回收|JVM概述

    本文主要是JVM的总体概述。 目录 1 基本概念 2 JVM整体结构 3 JVM代码执行流程 4 JVM架构模型 ...

  • 一篇文章读懂JAVA内存管理

    1. JVM的概念 JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算...

  • Java环境的简单说明

    一、关于JVM 1.JVM概念 JVM是Java Virtual Machine的缩写,又被称为Java虚拟机;J...

  • chapter-1 初识JVM

    本章知识点 1.JVM的概念2.JVM发展历史3.JVM种类4.Java语言规范5.JVM规范 初识JVM - J...

  • RxJava2初探

    1.RxJava概念及原理 RxJava – Reactive Extensions for the JVM – ...

网友评论

      本文标题:JVM学习-1 概念速查

      本文链接:https://www.haomeiwen.com/subject/swmeictx.html