首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
JVM
带我姑娘走出平房
创建于2021-11-10
订阅专栏
JVM从入门到放弃
暂无订阅
共13篇文章
创建于2021-11-10
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
14. JDK命令行工具
jstat命令可用于显示本地或远程虚拟机进程中的类装载 ,内存,垃圾收集,JIT编译等运行数据。 jstat -gc : 可以显示gc的信息,查看gc的次数,及时间。 jmap(Memory Map for Java)命令用于生成堆转储快照heapdump。 3. -histo…
13.常见的OOM
原因:1. 创建了一个很大的对象 2.超出预期的访问量/数据量,3.内存泄漏 一些提供close的资源未关闭导致内存泄露,如数据库链接,网络链接,和IO会造成内存泄漏。 解决办法:1. 找到哪类对象占用了最多的内存,然后看是否增大堆内存,2. 需要进行GC turning 原因…
12.垃圾回收[垃圾回收器]
垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。 由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。 从不同角度分析垃圾收集器,可以将GC分为不同的类型。 在单CPU处理器或者较小应用内存等硬件平台不是特别优越的场…
11 垃圾回收[垃圾回收相关概念]
Stop-the-World,简称STW,指的是GC事件发生过程中,会产生应用程序的停顿。停顿产生时整个应用程序线程都会被暂停,没有任何响应,有点像卡死的感觉,这个停顿称为STW 可达性分析算法中枚举根节点(GC Roots)会导致所有Java执行线程停顿。分析工作必须在一个能…
10.垃圾回收[概述、相关算法]
如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空 间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出 垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生,关于垃圾收集有三…
9.字符串常量池
只要其中有一个是变量,结果就在堆中。变量拼接的原理是StringBuilder 确保字符串在内存里只有一份拷贝,这样可以节约内存空间,加快字符串操作任务的执行速度,注意,这个值会被存放在字符串内部池。(String intern pool) 另一个对象是:字符串常量池中的对象"…
8.执行引擎(Execution Engine)
JDK1.0时代,将Java语言定位为“解释执行”还是比较准确的。再后来,Java也发展出可以直接生成本地代码的编译器。 各种用二进制编码方式表示的指令,叫做机器指令码。开始,人们就用它采编写程序,这就是机器语言 不同的硬件平台,各自支持的指令,是有差别的。因此每个平台所支持的…
7. 运行时数据区[对象的实例化内存布局与访问定位、直接内存]
虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化。( 即判断类元信息是否存在)。如果没有,那么在双亲委派模式下,使用当前类加载器以ClassLoader+包名+类…
5.运行时数据区[方法区]
Java虚拟机规范中明确说明:尽管所有的方法区在逻辑上是属于堆的一部分,但是一些简单的实现,可能不会选择去进行垃圾收集或者进行压缩。对于HotSpot而言,方法区还有一个别名叫Non-Heap(非堆),目的就是要和堆分开 在jdk7及以前,习惯上把方法区称为永久代。jdk8开始…
4.运行时数据区[堆]
Java堆区在JVM启动的时候即被创建,其空间大小也就确认了。堆内存的大小是可调节的 方法结束后,堆中的对象不会马上被移除,仅仅在垃圾收集的时候才会被移除。 每个Java应用程序都有一个Runtime类实例,它允许应用程序与运行应用程序的环境进行交互。可以从getRuntime…
3.运行时数据区[PC寄存器、虚拟机栈、本地方法栈]
在java虚拟机在执行java程序的过程中,会把它所有的内存划分成若干个不同的数据区域,这些区域有各自的用途,以及创建和销毁的时间,有的随着虚拟机的启动而创建,有的随着用户的线程启动和结束而创建和销毁。根据《Java虚拟机规范》定义一共定义了六块区域 1. PC寄存器或程序计数…
2.类加载机制
Class文件是一组以8位字节为基础单位的二进制流,各个数据项目间没有任何分隔符。当遇到8位字节以上空间的数据项时,则会按照高位在前的方式分隔成若干个8位字节进行存储。 加载的类信息存放于一块成为方法区的内存空间。除了类信息之外,方法区还会存放运行时常量池信息,可能还包括字符串…
1. jvm概述
通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的. 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程。 1. jvm概述 7. 运行时数据区[对…