jvm笔记专栏
文章平均质量分 84
java的jvm专栏
dogs~xiaofei
这个作者很懒,什么都没留下…
展开
-
StringTable——jvm(六)
StringString的基本特性String的基本特性String: 字符串,使用一对 “”"引起来string s1 = “” //字面量定义方式String s2 = new String(); // new一个方法String不可被继承在jdk1.8版本之前 是char型数组在jdk1.9改为了byte动机一个char占两个字节又发现我们堆空间的大部分组成都是string, 而都是一个byte就可以存储了, 如果字符集是ISO用一个, 如果是utf-8就还是2个字节原创 2021-08-09 18:05:58 · 115 阅读 · 0 评论 -
执行引擎-JVM(五)
执行引擎概述java代码编译和执行过程机器码、指令、汇编解释器JIT编译器概述整个结构的下层, 执行引擎是java虚拟机核心之一虚拟机的执行引擎则是由软件自行实现的,能够执行那些不被硬件直接支持的指令集格式。jvm的主要任务就是负责装载字节码到其内部, 进行解释运行。如果要想让一个java程序允许起来, 执行引擎的任务就是将字节码指令解释或者编译为对应的平台上的本地机器指令才可以。翻译成机器语言。java代码编译和执行过程执行过程橙色的部分是javac前端编译器做的绿色部分是半解释型原创 2021-08-08 07:56:47 · 96 阅读 · 0 评论 -
直接内存JVM
直接内存概述概述不是虚拟机运行时数据区的一部分, 也不是虚拟机规范中定义的内存区域。直接内存是再java堆外的、直接向系统申请的内存空间。来源于NIO, 通过存在堆中的DirectByteBuffer操作Native内存。通常, 访问直接内存的速度会优于java堆。 即读写性能高。出于性能考虑, 读写频繁的场合可能会考虑使用直接内存。java 的NIO库允许java程序使用直接内u才能, 用于数据缓冲区。有了NIO时, 操作系统划出的直接缓存区, 可以被java代码直接访问, 只有一份,原创 2021-08-05 17:49:46 · 66 阅读 · 0 评论 -
对象的实例化内存布局与访问定位-jvm(四)
对象的实例化对象的实例化对象的创建方式对象创建的步骤对象的内存布局对象头实例数据对齐填充对象访问定位对象的实例化这部分大厂面试的时候也经常问这些东西。比如对象的创建方式new最常见的方式变形构造器被私有化, 有一个返回对象的静态方法变形2:xxxBuilder/xxxFactorclass的newInstance()方法:反射的方式, 只能调用空参构造器, 权限必须时publicConstructor的newInstance(xx):反射的方式, 可以调用空参、带参的构造器, 权限没有原创 2021-08-04 18:45:05 · 99 阅读 · 0 评论 -
运行时数据区(四)之方法区(三)
方法区栈、堆、方法区的配合方法区Hotspot中方法区的演进设置方法区大小和OOM栈、堆、方法区的配合从线程共享与否的角度来看方法区方法区在逻辑上属于堆的一部分, 但是一些简单的实现可能不会选择区进行垃圾收集或者进行压缩。 但对于HotSpotJVM而言, 方法区还有一个别名叫做非堆, 目的就是要和堆分开所以, 方法区看作是一块独立于java堆的内存空间方法区和堆一样, 是各个线程共享的内存区域方法区在jvm启动的时候创建, 实际物理内存可以是不连续的方法区的大小,可以固定也可拓展原创 2021-08-04 17:21:23 · 57 阅读 · 0 评论 -
运行时数据区(三)之堆(三)
堆概述堆的内存细分对空间大小的设置OOM概述一个jvm实例只存在一个堆内存, 堆也是java内存管理的核心区域。java堆区再jvm启动的时候被创建, 其空间的大小也确定了, 是jvm管理最大的一块内存空间。堆内存的大小是可以调节的。再运行之前设置~Xms10m ~Xmx10m 初始堆的大小为10MB 最大10mb堆可以处于物理上不连续的内存空间 但在逻辑上它应该是连续的所有线程共享java堆, 在这里还可以划分线程私有的缓冲区(TLAB)java虚拟机规范 中队java堆的描述是: 所有(原创 2021-08-02 17:28:09 · 66 阅读 · 0 评论 -
运行时数据区(二)之虚拟机栈 jvm(三)
虚拟机栈概述栈中可能出现的异常栈的存储单元栈帧的内部结构概述栈是运行时的单元堆是存储的基本单位,栈是解决程序的运行问题, 即程序如何执行或者如何处理数据。 堆解决的是数据存储的问题。对象放在堆, 基本数据类型、引用对象的地址放在栈。每一个线程在创建的时候都会创建一个栈,其内部保存一个个的栈帧,对应着一次次的java方法调用,是线程私有的生命周期和线程一致作用: 主管java程序的运行, 保存方法的局部变量(8种基本数据类, 对象的引用地址)、部分结果,并参与方法的调用和返回。栈是一种快速有效原创 2021-07-29 18:54:43 · 88 阅读 · 0 评论 -
运行时数据区(一) jvm(三)
文章目录概述:线程程序计数器总结概述:内存是非常重要的资源, 承载着操作系统和应用程序的实时运行。jvm内存布局规定了java在运行过程中内存的申请、分配、管理的策略, 保证jvm的高效运行。还是这个图(一定要记住)元数据区(就是就是jdk1.7的永久代)一个进程拥有一个堆和方法区(jdk1.8:堆外空间或元数据区)一个线程都拥有一份虚拟机栈、程序计数器、本地方法栈(c语言编写的) (共用堆和方法区)jdk 1.8线程分为守护线程和普通线程线程是程序调度和运行的基本单元, jvm支原创 2021-07-25 18:06:22 · 74 阅读 · 0 评论 -
类加载子系统 jvm(二)
文章目录内存结构内存结构还是那张熟悉的图只不过更加详细本章主要讲述 最上边一部分类加载器的作用:类加载器负责加载class文件 , class文件开头有特殊的标识classLoader只负责class文件的加载, 是否能够运行又ExecutionEngine决定加载类的信息(元数据的模板)放在方法区, 除了类的信息外, 方法区还会存放运行时常量池的信喜。我们可以根据这个文件实例化出n个一模一样的实例。类的加载过程在链接那部分包括...原创 2021-07-24 18:14:34 · 100 阅读 · 0 评论 -
jvm与java体系结构(概述)
文章目录前言参考书籍jvm的整体结构以下为暂时的笔记前言我们的应用程序的架构一般都是这样 可以看出jvm是最底层很多人只注重如何使用框架去搭建我们的应用程序,而不关注我们的java底层的。其实这个思想是错的,要想为什么我们的项目上线会挂, 当他出现这种情况的时候我们应该怎么解决, 而不是作为一个只会选择默认值, 出错也只会傻看着等待别人救助的小白鼠,我们如果想做个掌握雷电的人就开始着手学习jvm把!我们在这思考两个问题 希望学完jvm能够解决应该如何让我的系统更快?如何避免系统出现瓶颈?原创 2021-07-22 17:34:41 · 182 阅读 · 2 评论