文档章节

重新认识JVM

 最胖的瘦子
发布于 04/15 11:49
字数 813
阅读 10
收藏 0

JAVA虚拟机的基本结构

 

  1. 方法区:类加载出的信息存放在方法区的内存中 。除了类信息以外,方法区中还会存放运行时常量信息。
  2. Java堆:堆是jvm启动的时候就建立的,这里是java程序最主要的内存工作区域。Java的实例都是存放在堆中,堆是所有线程共享的。Gc主要管理的区域就是java

Java堆可分为新生代、老生代

  1. 直接内存:直接内存是在java堆外的一片向系统申请的内存区域,它的速度优于堆。它不受java堆大小的限制,而是收到本机总内存大小的限制,设置太大会导致内存溢出
  2. Java栈(线程私有的):保存着java方法的调用、局部变量(即我们常说的变量)、方法参数
  3. 本地方法栈:本地方法的调用,jvm允许本地java直接调用本地方法,native methods可以理解为非java方法
  4. GC回收系统:对方法区、堆、直接内存进行回收,且开发人员不需要人为干预去释放对象
  5. PC寄存器:每个线程的私有空间
  6. 执行引擎:执行字节码的

 

类加载过程

 

加载:把.class文件加载进内存中

链接

         验证:保证加载的字节流文件符合jvm的规范

         准备:为类变量,赋予初值。例如基本类型,初值为0;引用类型,初值为null。静态常量就是代码中赋予的值,该是多少是多少

         解析:将常量池中的符号引用替换为直接引用的过程;例如:需要调用方法hello(),这个方法的地址是123,那么hello()就是符号引用,123则是对应的直接引用。。直接引用本质上就是个内存地址

初始化:对static修饰的变量或语句进行初始化操作,如果包含多个静态变量和静态块,则按照自上而下的顺序依次执行

 

GC的常用算法

1.复制算法:针对新生代,把内存中正在使用的对象,全部复制到内存中的另一半,然后将这一半全部删除。(空间的大量浪费)

2.标记清除算法:就是内存快满时,然后停止当前的工作,遍历所有的GC ROOT中的存活对象,第二步开始遍历整个堆,把这里面没有被标记的对象,全部删了(效率低、清理出的空闲内存不连续,针对新生代)

3.标记压缩整理算法:先标记GC ROOT中的所有存活对象,然后把这群存活对象重新排序整理,整理完成后,把后面所有的未标记对象删除(针对老生代)

© 著作权归作者所有

粉丝 4
博文 34
码字总数 19073
作品 0
杭州
私信 提问
工作5年的Java程序员,才学会阅读源码,可悲吗?

最近一位5年开发经验的群友与我聊天 他说:最近慢慢的尝试去看spring的源码,学习spring,以前都只是会用就行了,但是越是到后面,发现只懂怎么用还不够,在面试的时候经常被问到一些开源框架...

Java架构
02/14
0
0
重新认识java-ArrayList

重新认识java-ArrayList 源码解读 的声明: 通过继承和实现关系,可以看出继承自抽象类,实现了接口, , , . RandomAccess接口 从的声明中可以看到,这只是一个类声明,没有函数和成员变量,那...

hgfgoodcreate
2016/03/04
86
0
重新认识java-Vector

源码解读 的声明: 通过继承和实现关系,可以看出继承自抽象类,实现了接口, , , . 功能和特点 Vector 继承了AbstractList,实现了List;所以,它是一个队列,支持相关的添加、删除、修改、遍...

hgfgoodcreate
2016/03/04
58
0
杨晓峰:开发者其实不太需要关注 Java 收不收费

作为继 Java 8 之后的第一个 LTS 版本,Java 11 的发布引起了广泛关注,一方面是因为这个版本带来了一些重要的新特性,比如热议的 ZGC、HTTP/2 Client、Flight Recorder 等,在内存管理与 JV...

h4cd
02/11
13.9K
32
使用ANT生成证书的时候出错

我想使用Ant生成CA证书,在做好build.xml,写好./bin/cli.xml 执行脚本时出现 [java] Initializing CA [java] Generating rootCA keystore: [java] CA name: AdminRootCA [java] SuperAdmin CN......

fringe-liu
2012/06/26
474
2

没有更多内容

加载失败,请刷新页面

加载更多

Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
今天
3
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
今天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
今天
19
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
今天
9
0
太全了|万字详解Docker架构原理、功能及使用

一、简介 1、了解Docker的前生LXC LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpa...

Java技术剑
今天
27
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部