
java虚拟机
文章平均质量分 85
失业找工作中
it小白的学习笔记,加油!
展开
-
Java对象内存布局
对象在堆内存中布局摘自周志明老师JVM第3版对象内部结构分为:对象头、实例数据、对齐填充(保证8个字节的倍数)。对象头分为对象标记(markword,类元信息/类型指针(Class Pointer ) -java层面的对象标记(markOop)和类元信息(klassOop),类元信息存储的是指向该对象类元数据(klass)的首地址。 --c++层面的对齐填充就是保证8个字节的倍数对象头对象头分为Mark Word 对象标记和Class Pointer 类型指针Java对象头里的M原创 2021-09-26 08:54:04 · 231 阅读 · 0 评论 -
JVM四大引用(强引用、软引用、弱引用、虚引用)
强引用、软引用、弱引用、虚引用分别是什么?Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。新建一个带finalize()方法的对象MyObjectclass MyObject{ //一般开发中不用调用这个方法,本次只是为了讲课演示 @Override protected void finalize() throws Throwable{ System.out.println(Thread.curre原创 2021-09-25 14:13:29 · 180 阅读 · 0 评论 -
JVM与Java体系结构
Java vs C++Java本身借鉴了C++语言的优点,摒弃了一些缺点。主要的区别在于内存动态分配、垃圾收集技术垃圾收集机制为我们打理了很多繁琐的工作,大大提高了开发的效率,但是,垃圾收集也不是万能的,懂得JVM内部的内存结构、工作机制,是设计高扩展性应用和诊断运行时问题的基础,也是Java工程师进阶的必备能力。Java 生态圈Java是目前应用最为广泛的软件开发平台之一。随着Java以及Java社区的不断壮大Java 也早已不再是简简单单的一门计算机语言了,它更是一个平台、一种文化、一个社区原创 2021-08-28 00:21:00 · 276 阅读 · 0 评论 -
类加载器子系统
内存结构概述简化图详细图类加载子系统的作用类加载器子系统负责从文件系统或者网络中加载Class文件, class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由ExecutionEngine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)类加载器ClassLoader角色class file存原创 2021-08-28 00:24:17 · 192 阅读 · 0 评论 -
类加载器详解
类加载器的分类JVM支持两种类型的类加载器,分别为引导类加载器(BootstrapClassLoader)和自定义类加载器(User-Defined ClassLoader)从概念上来讲, 自定义类加载器一般指的是程序中由开发人员自定义的一类,类加载器,但是Java虚拟机规范却没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器无论类加载器的类型如何划分,在程序中我们最常见的类加载器始终只有3个,如下所示:所以具体为引导类加载器(BootstrapClassL原创 2021-08-28 00:23:18 · 15696 阅读 · 2 评论 -
运行时数据区概述及线程
运行时数据区概述内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典的JVM内存布局。具体划分Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程–对应的,这些与线程对应的数据区域会随原创 2021-08-28 00:24:52 · 86 阅读 · 0 评论 -
程序计数器(PC寄存器)
PC Register介绍JVM中的程序计数寄存器(Program Counter Register)中, Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子) ,并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。栈中每个栈帧都有行号标识,PC寄存器就相当于这个行号标识它是一块很小的内存空间,几乎原创 2021-08-28 00:25:47 · 977 阅读 · 0 评论 -
虚拟机栈详解
虚拟机栈概述虚拟机栈出现的背景由于跨平台性的设计, Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。误解有不少Java开发人员一提到Java内存结构,就会非常粗粒度地将JVM中的内存区理解为仅有Java堆(heap)和Java栈(stack)内存中的栈与堆栈是运行时的单位,而堆是存储的单位。即:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储原创 2021-08-28 00:40:45 · 2284 阅读 · 0 评论 -
本地方法接口
什么是本地方法接口简单地讲,一个Native Method就是一个Java调用非Java代码的接口。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如c.这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在c++中,你可以用extern "c"告知C++编译器去调用一个c的函数。“A native method is a Java method whose implementation is provided by non-java code.”.原创 2021-08-28 00:41:41 · 239 阅读 · 0 评论 -
本地方法栈
本地方法栈(Native Method Stack)Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。本地方法栈,也是线程私有的。允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的) 如果线程请求分配的栈容量超过本地方法栈允许的最大容量, Java虚拟机将会抛出一个stackoverflowError异常。 如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本地方法栈,那么Java原创 2021-08-28 00:42:21 · 128 阅读 · 0 评论 -
java自带可视化性能监控工具jconsole
1. 前言想验证你对 jvm 配的一些调优参数(比如 Xms、Xmx 等)有没有起作用吗? 想不想实时监控你自定义的线程池的在实际运行时的线程个数、有没有死锁? 应用出现 java.lang.OutOfMemoryError: Java heap space,你知道需要去调整 Xms、Xmx。想不想实时监控你的 Java 应用的堆内存使用情况,并根据峰值等数据设置最适合你的 Xms、Xmx...原创 2018-08-02 23:14:08 · 16562 阅读 · 2 评论 -
内存问题的分析与内存分析工具MAT(Memory Analyzer Tool)的使用
安装关于Eclipse Memory Analyzer的安装,网上有很多教程,我选择的是直接通过Eclipse插件的形式安装最新的Memory Analyzer。步骤如下: 打开eclipse->Help->Install new software->work with右边的Add...显示下图: 这里使用的网址是:http://download.eclipse....原创 2018-08-02 22:43:58 · 4983 阅读 · 0 评论