JVM
文章平均质量分 62
鲜果维他命
Don't be a programmer,to be a problem solver
展开
-
JVM类加载器ClassLoder加载流程,以及双亲委派机制(源码剖析,通俗易懂)
JVM类加载器概述从上图容易看出,类加载器就是把java程序生成的Class字节码文件的信息加载进JVM的一个类,每一个java类对象都对应着一个Class字节码文件,这些Class文件存储这java类对象的结构信息,通过类加载器把这些Class字节码文件转化为对应的class类对象,也就是java类对象->Class类对象的过程,这样的Class类才是能被虚拟机直接使用的Java类型类加载器的种类(主要是3种)1.启动类加载器(BootStrap)------------>加载路径原创 2022-01-08 11:12:55 · 495 阅读 · 0 评论 -
JVM内存模型中的方法区
方法区概述方法区是JVM中的一个理想概念,它的实现是永久代和元空间,主要用来存放所有Class类信息,静态变量,以及常量等不依赖于对象而存在的数据,是只要定义好了就亘古不变的数据.方法区的实现方法区的实现有两个,Java8之前是永久代,Java8之后是元空间,永久代和元空间之间的区别是什么呢?为什么要从永久代升级为元空间呢?1.永久代(在JVM中):JDK8版本之前的实现,永久代,顾名思义是永久存在,不进行垃圾回收,数据一直在里面,但是永久代存在一个问题,也就是说永久代的内存大小是给定的,也就是M.原创 2022-01-03 18:06:26 · 470 阅读 · 0 评论 -
JVM中的堆空间详解,入门看这篇就够了
堆的简介堆是JVM虚拟机中最大的一块内存区域,它在JVM启动时被创建,主要用于存储实例对象的地址,堆的空间大小是可以在启动JVM前设置,是GC(垃圾回收机制)重点照顾的一块区域,会通过GC将堆中不需要的数据进行垃圾回收,以减少空间使用.堆的体系结构图堆空间逻辑上主要分为三大部分:1.新生代 2.老年代 3.方法区(持久代,元空间)新生代(Young generation)新生代占堆空间的1/3,而新手代又包括三个部分:1.Eden伊甸园 2.S0幸存者0区 3.S1幸存者1区这三个部分在新生原创 2022-01-03 17:33:01 · 1302 阅读 · 0 评论 -
JVM中的栈区域
一.栈:在JVM中也叫栈内存,主要负责java程序的运行,栈在线程创建时被创建,栈时线程私有的,也即每一个线程都有自己的栈空间,线程之间的运行不受影响,相互独立二.栈中存储的基本单位是栈帧,JVM只对栈帧进行进栈,出栈操作,栈帧中的数据它不管.三.栈帧在方法运行时被创建四.JVM栈图:由上图我们可以看出,栈帧存放的数据主要包括1.局部变量表:存放了方法参数,以及方法中局部变量的信息2.操作数栈3.运行时常量的引用:在一个class文件中,一个方法要调用其他方法,需要将这些方法的符号引用转化为原创 2022-01-02 14:31:02 · 1699 阅读 · 0 评论 -
JVM中的字符串常量池
JVM中的字符串常量池一.字符串常量池的简介二.字符串常量池的优缺点1.优点2.缺点三.字符串常量池的设计前提四.String对象的两种创建方式1.直接赋值方式,String s="XXX"2.new一个字符串对象五.案例分析一.字符串常量池的简介由于String是java开发中最常使用的引用类型之一,它和其他引用类型一样,在创建的时候是非常消耗空间的,于是为了程序提高性能以及减少内存开销,java设计者在JVM层面设计了字符串常量池二.字符串常量池的优缺点1.优点当我们创建一个字符串时,会首先去原创 2022-01-02 14:01:16 · 441 阅读 · 1 评论 -
Java的native方法作用和意义
java中的native方法1.native方法是java与其他语言协作的时候使用的,底层实现不是java(c,c++)2.native并不是java实现的,所以直接调用就好,不需要管他底层实现3.native方法实际上是java用于调用底层操作系统的方法,java只能调用,不能查看和修改4.java是跨平台语言,自然而然会失去对底层的控制,于是想要调用底层方法,就必须使用native方法间接调用底层操作系统的方法(c,c++实现)5.随着java的不断发展,native方法越来越少6.nati原创 2021-12-28 20:57:36 · 5811 阅读 · 0 评论