Java核心知识点-JVM结构和工作方式

转载 2016年05月30日 11:23:06

一、JVM体系结构

1.1 JVM中主要包括(PC寄存器,栈,)(堆,方法区,)本地方法区

Java核心知识点-JVM结构和工作方式

一个Java线程中,包括PC寄存器(保存当前执行的指令位置),和栈帧(一个方法对应一个栈帧),本地变量(保存计算中的临时数据),当一个线程结束后,线程内所有数据就自动销毁,不需要垃圾回收。

Java核心知识点-JVM结构和工作方式

  • PC寄存器和栈

Java核心知识点-JVM结构和工作方式

将1压入栈中,将2压入栈中,将1,2弹出计算1+2,将3压入栈顶,OVER。

  • 方法区:

方法区是堆的一部分,就是java的永久区PermGen。

Java核心知识点-JVM结构和工作方式

  • 本地方法区

本地方法区是为了JVM运行native方法(c/c++等语言写的方法)准备的区。

1.2 内存分配方式:

  • 静态内存分配:

在编译时确定需要的内存空间,当程序加载时系统把内存一次性分配给它。静态内存分配是在java栈上分配的,当方法结束时对应的栈帧也就撤销,所以分配的内存空间就被回收。

public void staticData(int arg){//int类型占4个字节

String s="haha";//引用类型占4个字节,(常量池中)

long l=1.00;//long占8个字节

Long lg=1L;//原生类型,这里是引用引用占4个字节(常量池中)

Object o=new Object();//(堆中)

}

上面一段代码会占用内存空间4+4+8+4+4=24。

  • 动态内存分配:

程序执行的时候才知道要分配的内存大小,当对象创建的时候,在堆上给对象分配一块空间,空间回收时间不定,由JVM垃圾回收器管理。

1.3 垃圾回收算法

Java核心知识点-JVM结构和工作方式

  • 新创建的对象会分配到Young的Eden上,如果Eden满了就触发MinorGC,将Eden区中存活的对象保存到Survivor的一个区中,同时将Survivor另一个区存活的对象也保存到Survivor这个区中,Survivor区始终有一个区是空的。

  • survivor的一个区满了之后,会将对象直接放到Old区,Old区满了会触发FullGC,将回收整个堆空间。

  • perm区主要保存class对象,垃圾回收也是FullGC触发

相关文章推荐

Java核心知识点-JVM结构之常量池

java常量池详细介绍

JVM体系结构与工作方式

JVM全称是Java Virtual Machine(Java虚拟机),他通过模拟一个计算机来达到一个计算机所具有的计算功能。  Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟...

面试求职:Spring核心原理及工作方式

面试中考得最多的就是SpringMVC的原理,数据库优化,JVM调优,多线程安全,反射,序列化和反序列化等。此篇博客从网上搜集而来。先来看看Spring的原理和工作方式问题的描述。主要需要谈到Spri...
  • boonya
  • boonya
  • 2017年03月09日 16:19
  • 1739

尚学堂师资讲解:java认证:Servlet四种过滤器工作方式

尚学堂师资讲解:java认证:Servlet四种过滤器工作方式   java认证:Servlet四种过滤器工作方式,从J2EE1.3开始,Servlet2.3规范中加入了对过滤器的支持。过滤器能够对...
  • sxt456
  • sxt456
  • 2014年06月30日 14:00
  • 222

JVM知识点总览-中高级Java工程师面试必备

对于搞开发的我们其实也是一样,现在流行的框架越来越多,封装的也越来越完善,各种框架可以搞定一切,几乎不用关注底层的实现,初级程序员只要熟悉基本的使用方法,便可以快速的开发上线;但对于高级程序员来讲,内...

JVM知识点总览-中高级Java工程师面试必备

JVM知识点总览-中高级Java工程师面试必备         对于搞开发的我们其实也是一样,现在流行的框架越来越多,封装的也越来越完善,各种框架可以搞定一切,几乎不用关注底层的...

Java核心知识点-字节流和字符流详解

字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 区别:实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓...

Java核心知识点-Byte详解

Java虚拟机中没有byte类型 恩。。。怎么说呢,个人感觉这个说法有点儿唬人的意思。的确,当这个想法刚刚出现在我的脑海中的时候我觉得也有些胡扯,毕竟byte类型就在那里,怎么能说Java虚拟机中没...

java 核心技术精简总结知识点

1.  Java没有任何unsigned类型 2.  float类型的数值后面有一个后缀F,没有后缀F的浮点数默认为double类型 3.  if(x = 0)在C++中可以编译通过,其结果总为f...

Java核心知识点-NIO

文件读取中的NIO 在Java1.4之前的I/O系统中,提供的都是面向流的I/O系统,系统一次一个字节地处理数据,一个输入流产生一个字节的数据,一个输出流消费一个字节的数据,面向流的I/O速度非常慢...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java核心知识点-JVM结构和工作方式
举报原因:
原因补充:

(最多只允许输入30个字)