jvm
文章平均质量分 81
wx: fulltilt8
这个作者很懒,什么都没留下…
展开
-
JVM的Xms和Xmx参数设置为相同值有什么好处?
分类:Java,Jvm 标签:Java,Jvm,Jvm优化,Jvm调优,Xms,Xmx最近正在重新学习JVM的内存结构及相关优化内容,无意中看到IDEA的VM配置(安装时默认配置)中有如下的配置:# custom IntelliJ IDEA VM options-Xms2048m-Xmx2048m看到Xms和Xmx的一样,是不是稍微有些奇怪?这里就写篇文章分析一下,JVM的Xms和Xmx参数设置为相同的值有什么好处?首先来了解一下相关参数的概念及功能。Xms和...转载 2021-09-09 06:49:27 · 698 阅读 · 0 评论 -
从多线程的三个特性理解多线程开发
工作中许多地方需要涉及到多线程的设计与开发,java多线程开发当中我们为了线程安全所做的任何操作其实都是围绕多线程的三个特性:原子性、可见性、有序性展开的。针对这三个特性的资料网上已经很多了,在这里我希望在站在便于理解的角度,用相对直观的方式阐述这三大特性,以及为什么要实现和满足三大特性。一、原子性原子性是指一个操作或者一系列操作要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。其实这句话就是在告诉你,如果有多个线程执行相同一段代码时,而你又能够预见到这多个线程相互之间...原创 2021-07-21 16:39:54 · 57 阅读 · 0 评论 -
Happens-Before原则
上面讨论了Java中多线程共享变量的可见性问题及产生这种问题的原因。下面我们看一下如何解决这个问题,即当一个多线程共享变量被某个线程修改后,如何让这个修改被需要读取这个变量的线程感知到。为了方便程序员开发,将底层的烦琐细节屏蔽掉,JMM定义了Happens-Before原则。只要我们理解了Happens-Before原则,无需了解JVM底层的内存操作,就可以解决在并发编程中遇到的变量可见性问题。JVM定义的Happens-Before原则是一组偏序关系:对于两个操作A和B,这两个操作可以在不同的线程..原创 2021-07-21 02:27:01 · 430 阅读 · 1 评论 -
单核CPU仍然存在线程安全问题
Java内存模型是什么? 引用大师的一句话:“The Java Memory Model describes what behaviors are legal in multithreaded code, and how threads may interact through memory.” 翻译过来就是:Java内存模型描述了在多线程代码中哪些行为是合法的,以及线程如何通过内存进行交互。所以其他涉及到多线程的编程语言都会涉及到内存模型,如C/C++...转载 2021-07-20 11:05:04 · 1409 阅读 · 0 评论 -
Java 并发编程:核心理论
Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁、偏向锁) Java 并发编程:线程间的协作(wait/notify/sleep/yield/join) Java 并发编程:volatile的使用及其原理 并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要...原创 2021-06-06 15:15:03 · 76 阅读 · 0 评论 -
Java heap space或者permgen space的的解决方法
一、因为程序要从数据读取近10W行记录处理,当读到9W的时候就出现 java.lang.OutOfMemoryError: Java heap space 这样的错误。在网上一查可能是JAVA的堆栈设置太小的原因,结合网上的答案大致解决方法为:报错如下:Exception in thread "DispatcherThread" java.lang.OutOfMemoryError: PermGen spaceException in thread "ContainerBackground...原创 2021-05-26 15:13:39 · 921 阅读 · 2 评论 -
JVM之GC算法、垃圾收集算法——标记-清除算法、复制算法、标记-整理算法、分代收集算法
标记-清除算法此垃圾收集算法分为“标记”和“清除”两个阶段: 首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记对象,它的标记过程前面已经说过——如何判断对象是否存活/死去 死去的对象就会被标记,然后被清除。它主要有两点不足: 一个是效率问题,标记和清除两个过程的效率都不高; 另一个是空间问题,标记清除之后会产生大量不连续的空间碎片,空间碎片太多可能会导致以后再程序运行过程中需要分配较大对象时, 无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。...原创 2021-05-25 11:16:31 · 194 阅读 · 0 评论 -
Java常见的一些内存溢出问题以及原因
有了对内存结构清晰的认识,就可以帮助我们理解不同的OutOfMemoryErrors,下面列举一些比较常见的内存溢出错误,通过查看冒号“:”后面的提示信息,基本上就能断定是JVM运行时数据的哪个区域出现了问题。Exception in thread “main”: java.lang.OutOfMemoryError: Java heap space原因:对象不能被分配到堆内存中。Exception in thread “main”: java.lang.OutOfMemoryError:原创 2021-05-25 10:50:21 · 186 阅读 · 0 评论 -
深入理解Java类加载
本文目的:深入理解Java类加载机制; 理解各个类加载器特别是线程上下文加载器;Java虚拟机类加载机制虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制。在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的类加载的过程类的个生命周期如下图:为支持运行时绑定,解析过程在某些情况下可在初始化之后再开始,除解析过程外的其他加载过程必须按照如图顺序开...原创 2021-05-25 02:45:56 · 495 阅读 · 0 评论 -
Class.forName()的作用与使用总结
1、Class类简介:Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识。这项信息纪录了每个对象所属的类。虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类。Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建。Class 没有公共构造方法。Class 对象是在加载类时由Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的,因此不能显式地声明一个Class对...转载 2021-05-25 02:26:53 · 889 阅读 · 0 评论 -
Java Class.forName()用法和newInstance()方法原理解析
Class.forName()主要功能Class.forName(xxx.xx.xx)返回的是一个类,Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段。下面,通过解答以下三个问题的来详细讲解下Class.forName()的用法。①new 和Class.forName()有什么区别和newInstance的用法?A a = (A)Class.forName(“pacage.A”).newInstanc...原创 2021-05-25 01:45:37 · 313 阅读 · 0 评论