jvm
文章平均质量分 70
学习使我可乐
这个作者很懒,什么都没留下…
展开
-
JAVA内存模型
那么说说你对JMM内存模型的理解?为什么需要JMM(保障程序在不同jvm,以及操作系统和硬件上执行结果一致)?JMM:JAVA内存模型,不存在的东西,是一个概念,也是一个约定!原因:本身随着CPU和内存的发展速度差异的问题,导致CPU的速度远快于内存,所以现在的CPU加入了高速缓存,高速缓存一般可以分为L1、L2、L3三级缓存。基于上面的例子我们知道了这导致了缓存一致性的问题,所以加入了缓存一致性协议,同时导致了内存可见性的问题,而编译器和CPU的重排序导致了原子性和有序性的问题,JMM内存模型正原创 2021-05-13 07:33:30 · 105 阅读 · 0 评论 -
JMM内存模型
那么说说你对JMM内存模型的理解?为什么需要JMM(保障程序在不同jvm,以及操作系统和硬件上执行结果一致)?JMM:JAVA内存模型,不存在的东西,是一个概念,也是一个约定!原因:本身随着CPU和内存的发展速度差异的问题,导致CPU的速度远快于内存,所以现在的CPU加入了高速缓存,高速缓存一般可以分为L1、L2、L3三级缓存。基于上面的例子我们知道了这导致了缓存一致性的问题,所以加入了缓存一致性协议,同时导致了内存可见性的问题,而编译器和CPU的重排序导致了原子性和有序性的问题,JMM内存模型正原创 2021-05-13 07:32:47 · 13583 阅读 · 1 评论 -
一个线程OOM后,其他线程还能运行吗?
最近网上出现一个美团面试题:“一个线程OOM后,其他线程还能运行吗?”我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。由于题目中给出的OOM,java中OOM又分很多类型;比如:堆溢出(“java.lang.OutOfMemoryError: Java heap space”)、永久带溢出(“java.lang.OutOfMemoryError:Permgen space”)、不能创建线程(“java.lang.OutOfMe转载 2021-05-07 22:08:19 · 545 阅读 · 0 评论 -
synchronized的实现原理与应用
synchronized的实现原理与应用在多线程并发编程中synchronized一直是元老级角色,很多人都会称呼它为重量级锁。但 是,随着Java SE 1.6对synchronized进行了各种优化之后,有些情况下它就并不那么重了。本文 详细介绍Java SE 1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级 锁,以及锁的存储结构和升级过程。先来看下利用synchronized实现同步的基础:Java中的每一个对象都可以作为锁。具体表现 为以下3种形式。·对于普通同步方法,转载 2021-04-19 10:22:33 · 72 阅读 · 0 评论 -
对象的初始化顺序
对象的初始化顺序在执行程序时,先加载类,让后创建对象类在以上几个时间被加载原创 2021-03-17 20:37:37 · 258 阅读 · 0 评论 -
实战:OutOfMemoryError异常
2.4 实战:OutOfMemoryError异常本节实战的目的有两个:第一,通过代码验证《Java虚拟机规范》中描述的各个运行时区域储存 的内容;第二,希望读者在工作中遇到实际的内存溢出异常时,能根据异常的提示信息迅速得知是哪 个区域的内存溢出,知道怎样的代码可能会导致这些区域内存溢出,以及出现这些异常后该如何处 理。本节所列的代码均由笔者在基于OpenJDK 7中的HotSpot虚拟机上进行过实际测试,如无特殊说 明,对其他Op enJDK版本也应当适用。不过读者需意识到内存溢出异常与虚拟机本身原创 2021-04-14 14:53:50 · 1495 阅读 · 0 评论 -
实战:OutOfMemoryError异常
2.4 实战:OutOfMemoryError异常本节实战的目的有两个:第一,通过代码验证《Java虚拟机规范》中描述的各个运行时区域储存 的内容;第二,希望读者在工作中遇到实际的内存溢出异常时,能根据异常的提示信息迅速得知是哪 个区域的内存溢出,知道怎样的代码可能会导致这些区域内存溢出,以及出现这些异常后该如何处 理。本节所列的代码均由笔者在基于OpenJDK 7中的HotSpot虚拟机上进行过实际测试,如无特殊说 明,对其他Op enJDK版本也应当适用。不过读者需意识到内存溢出异常与虚拟机本身原创 2021-04-14 14:53:06 · 638 阅读 · 0 评论 -
对象创建及访问
2.3.1 对象的创建Java是一门面向对象的编程语言,Java程序运行过程中无时无刻都有对象被创建出来。当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到 一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那 必须先执行相应的类加载过程,本书第7章将探讨这部分细节。在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成 后便可完全确定(如何确定将在2.3.2节中介绍),为对象...原创 2021-04-14 14:52:52 · 104 阅读 · 0 评论 -
类结构及类加载
7.1 概述上一章我们学习了Class文件存储格式的具体细节,在Class文件中描述的各类信息,最终都需要加 载到虚拟机中之后才能被运行和使用。而虚拟机如何加载这些Class文件,Class文件中的信息进入到虚 拟机后会发生什么变化,这些都是本章将要讲解的内容。Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最 终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。与那些在编译时需 要进行连接的语言不同,在Java语言里面,类型的加载原创 2021-04-14 14:49:52 · 110 阅读 · 0 评论 -
并发
一个应用程序一个进程或多个进程。一个进程多个线程1. 线程和进程有什么区别?线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进程都有若干个线程,至少包含一个线程。根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位资源开销:每个进程都有独立的...原创 2021-04-04 09:43:26 · 3023 阅读 · 0 评论 -
jvm内存结构
作者:程序员库森链接:https://www.nowcoder.com/discuss/627413来源:牛客网栈和程序计数器都是堆的一部分而且这种对象移动操作必须全程暂停用户应用 程序才能进行[1],这就更加让使用者不得不小心翼翼地权衡其弊端了,像这样的停顿被最初的虚拟机 设计者形象地描述为“Stop The World”[2]。内存的访问是用户程序最频繁的操作,甚至都没有之一,假如在这个环节上增加了额外的负担,势必会直接影响应用程序的吞吐量。关于...转载 2021-04-02 11:28:51 · 384 阅读 · 0 评论 -
Java类加载机制
https://blog.csdn.net/qq_38537709/article/details/88750605一、运行时数据区域![在这里插入图片描述](https://img-blog.csdnimg.cn/20200808110654277.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwODI2ODE0,si.转载 2021-03-28 14:03:44 · 156 阅读 · 0 评论 -
怎么判断对象是否可以被回收?
引用类型无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象是否可达,判定对象是否可被回收都与引用有关。Java 提供了四种强度不同的引用类型。#1. 强引用被强引用关联的对象不会被回收。使用 new 一个新对象的方式来创建强引用。Object obj = new Object();#2. 软引用被软引用关联的对象只有在内存不够的情况下才会被回收。使用 SoftReference 类来创建软引用。Object obj = new...原创 2021-03-28 13:15:53 · 884 阅读 · 0 评论 -
jvm调优
说一下 jvm 的主要组成部分?及其作用?类加载器(Class Loader):加载类文件到内存。Class loader只管加载,只要符合文件结构就加载,至于能 否运行,它不负责,那是有Exectution Engine 负责的。执行引擎(Execution Engine):也叫解释器,负责解释命令,交由操作系统执行。本地库接口(Native Interface):与本地库接口交互,是融合不同的编程语言为Java所用,注意底层是C、C++写的,学习JVM时了解C语言一些更好,最起码能看懂,这个方原创 2020-08-09 09:51:00 · 95 阅读 · 0 评论