![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JVM/Java Command
文章平均质量分 93
jvm and java command
30年后世界会是怎样
这个作者很懒,什么都没留下…
展开
-
ZGC线程
ZGC垃圾回收过程主要依靠后台线程完成。ZGC的后台线程有两类:控制线程和工作线程。控制线程主要控制垃圾回收的触发、执行;工作线程是真正执行垃圾回收具体任务的线程,比如对象的标记、转移等。本章首先回顾了JVM中线程的基本概念,然后介绍控制线程和工作线程,着重介绍4个控制线程:ZDirector、ZDriver、ZStat和VMThread。ZDirector用于控制如何触发垃圾回收,ZDriver用于控制垃圾回收执行,ZStat用于控制统计数据收集和输出,VMThread用于执行STW的线程。最后还介绍了转载 2021-04-21 19:46:01 · 498 阅读 · 0 评论 -
ZGC内存管理
对象的分配直接关系到内存的使用效率、垃圾回收的效率,不同的分配策略也会影响对象的分配速度,从而影响应用程序的运行。ZGC为了支持太字节(TB)级内存,设计了基于页面(page)的分页管理(类似于G1的分区Region);为了能够快速地进行并发标记和并发移动,对内存空间重新进行了划分,这就是ZGC中新引入的Color Pointers;同时ZGC为了能更加高效地管理内存,设计了物理内存和虚拟内存两级内存管理。为了能清晰地了解ZGC内存管理,在本章中,我们先介绍操作系统的虚拟内存和物理内存;随转载 2021-04-21 19:40:30 · 1012 阅读 · 0 评论 -
垃圾回收器概述
Java是流行多年的编程语言,深受广大程序员的欢迎,其最主要的两个特点为:跨平台:“一次编译,到处运行”是最为贴切的总结。一次编译指的是Java源文件被编译器编译成字节码文件(通常以.class作为后缀,所以也称为Class文件); 到处运行指的是在安装了Java Virtual Machine(JVM)的不同平台上,Class文件都可以运行,由JVM负责解释或者编译执行字节码。垃圾回收:程序员不用再像C/C++程序员一样关心内存的分配和释放,由垃圾回收器负责内存的管理,所以提高了程序开转载 2021-04-21 19:33:51 · 541 阅读 · 0 评论 -
深入理解JVM,7种垃圾收集器
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。接下来讨论的收集器基于JDK1.7 Update 14 之后的HotSpot虚拟机(在此版本中正式提供了商用的G1收集器,之前G1仍处于实验状态),该虚拟机包含的所有收集器如下图所示:上图展示了7种作用于不同分代的收集器,如果转载 2021-04-21 18:58:21 · 117 阅读 · 0 评论 -
jconsole本地连接失败(linux)
本地运行java程序,然后打开一个shell,输入jconsole:选中要连接的程序,如图中的CpuTest,然后点击Connect按钮,然后连接失败,重新连接,还是失败.后经排查发现是因为本地的java是14,程序使用的是11,将两者改为一致的,成功连接上.如果不是因为版本不一致,可能需要设置程序启动的jvm参数.-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx (服务器ip,或者localhost)-Dcom.sun.management.jm原创 2020-06-13 09:57:45 · 1628 阅读 · 0 评论 -
ClassLoader实现热加载
1. 应用场景修复bug,不需要重启服务,动态加载修改的bug类。 动态升级,在android系统中,可以通过动态加载APK绕过应用市场的的升级策略,自行定制升级策略。2. 例子网上描述ClassLoader加载的文章很多,这里不再详细描述,需要注意的是:将需要动态加载的类放到独立的jar文件中,从一开始就通过动态加载方式加载,不要放到主进程的jar包中,那样会被默认加载器加载,...转载 2020-04-27 17:39:21 · 552 阅读 · 0 评论 -
Java文件编译与反编译:javac命令和javap命令
1.创建一个Test.java文件,并输入内容public class Test{ private int m; public int inc(){ return m + 1; }}2.使用javac命令编译Test.java文件,得到Test.class文件javac Test.java 3.使用Sublime3打开Test.clas...转载 2020-03-04 16:45:34 · 327 阅读 · 0 评论 -
java jar后台启动的三种方式
java jar启动linux中启动 java -jar 后台运行程序直接用java -jar xxx.jar,当退出或关闭shell时,程序就会停止掉。以下方法可让jar运行后一直在后台运行。java -jar xxx.jar &说明: 在末尾加入 & 符号(1)执行java -jar xxx.jar后(2)ctrl+z 退出到控制台,执行 bg(3)ex...转载 2020-03-12 07:10:52 · 1332 阅读 · 0 评论 -
如何使java应用只有一个实例运行
最简单的方法是在程序运行起来后创建一个临时文件(或在文件中写入一个运行标志),每次运行程序前读取这个文件,如果这个文件存在(或运行标志已经设置),说明有该程序已经运行着一个实例;但要注意在程序退出前确保删除这个文件。一个程序可以在内存里面存在多个运行实例,比如,你可以打开多个微软的Word程序.但是,有些时候我们需要控制程序运行的实例只有一个,也就是说,该程序同一时刻在内存里面运行的只有一个实...转载 2020-03-07 13:56:12 · 511 阅读 · 0 评论 -
启动一个java程序,就会启动一个jvm
对于常见的JRE来说,基本上一个Java程序一个Java虚拟机(一个Java进程)。 某个新版本的JRE开始,貌似开始优化这一状况,多个Java虚拟机可以共享一些内存,貌似。如果觉得统一机器上起多个Java虚拟机浪费cpu和内存,(比如每个虚拟机都开垃圾回收线程。)可以将多个应用稍作改造运行在一个虚拟机里面。 但是这么做也有缺点,例如一个应用有内存泄漏,一个应用中写了个死循环,这个虚拟机里的所...转载 2020-03-06 21:35:56 · 3821 阅读 · 1 评论 -
Java的内存泄漏
问题的提出Java的一个重要优点就是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或JVM的问题。其实,这种想法是不正确的,因为Java也存在内存泄露,但它的表现与C++不同。随着越来越多的服务器程序采用Java技术,例如JS...转载 2020-03-06 21:17:02 · 215 阅读 · 0 评论 -
JVM 分析工具和查看命令
jinfo可以输出并修改运行时的java 进程的opts。jps与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。jstat一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。jmap打印出某个java进程(使用pid)内存内的所有'对象'的情况(如:产生那些对...转载 2020-03-04 17:02:02 · 167 阅读 · 0 评论 -
搞定Java垃圾回收,就这一篇!
之前上学的时候有这个一个梗,说在食堂里吃饭,吃完把餐盘端走清理的,是 C++ 程序员,吃完直接就走的,是 Java 程序员。确实,在 Java 的世界里,似乎我们不用对垃圾回收那么的专注,很多初学者不懂 GC,也依然能写出一个能用甚至还不错的程序或系统。但其实这并不代表 Java 的 GC 就不重要。相反,它是那么的重要和复杂,以至于出了问题,那些初学者除了打开 GC 日志,看着...转载 2020-03-04 16:57:25 · 279 阅读 · 0 评论 -
java对象结构
在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。下图是普通对象实例与数组对象实例的数据结构:对象头HotSpot虚拟机的对象头包括两部分信息:markword 第一部分markword,用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志...转载 2020-02-12 11:04:13 · 207 阅读 · 0 评论 -
JAVA对象结构
对象的内存布局在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header),实例数据(Instance Data)和对象填充(Padding)。实例数据:对象真正存储的有效信息,存放类的属性数据信息,包括父类的属性信息; 对齐填充:由于虚拟机要求 对象起始地址必须是8字节的整数倍。填充数据不是必须存在的,仅仅是为了字节对齐。 对象头:Hotspot虚拟机...转载 2020-02-12 10:56:55 · 132 阅读 · 0 评论 -
Java类的初始化顺序
对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。初始化顺序图示:我们也可以通过下面的测试代码来验证这一点: package com.trs.oop; /** * 类的初始化顺序 * 静态变量->静态初始化块-...转载 2019-12-02 11:11:57 · 115 阅读 · 0 评论 -
Java类加载机制
我们知道,我们写的java文件是不能直接运行的,我们可以在IDEA中右键文件名点击运行,这中间其实掺杂了一系列的复杂处理过程。这篇文章,我们只讨论我们的代码在运行之前的一个环节,叫做类的加载。这篇文章的大致结构:首先,认识类加载机制,然后,详细介绍类加载的过程。最后,介绍了类加载器,还有双亲委派原则。一、什么是类的加载在介绍类的加载机制之前,先来看看,类的加载机...转载 2019-12-02 11:09:49 · 113 阅读 · 0 评论 -
Java内存模型
java内存模型(Java Memory Model,JMM)是java虚拟机规范定义的,用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异,这样就可以实现java程序在各种不同的平台上都能达到内存访问的一致性。可以避免像c++等直接使用物理硬件和操作系统的内存模型在不同操作系统和硬件平台下表现不同,比如有些c/c++程序可能在windows平台运行正常,而在linux平台却运行有...转载 2019-11-29 14:08:33 · 114 阅读 · 0 评论 -
Java对象的内存分配过程是如何保证线程安全的?
JVM内存结构,是很重要的知识,相信每一个精心准备过面试的程序员都可以清楚的把堆、栈、方法区等介绍的比较清楚。上图,是一张在作者根据《Java虚拟机规范(Java SE 8)》中描述的JVM运行时内存区域结构画的。很多人都知道Java对象是在堆内存中分配空间的(JIT优化除外),也知道内存分配过程中是线程安全的,那么虚拟机到底是如何保证线程安全的呢?本文就来简单介绍一下。Java...转载 2019-11-29 13:15:49 · 184 阅读 · 0 评论 -
10个JVM内存结构的面试题
1、JVM管理的内存结构是怎样的?2、不同的虚拟机在实现运行时内存的时候有什么区别?3、运行时数据区中哪些区域是线程共享的?哪些是独享的?4、除了JVM运行时内存以外,还有什么区域可以用吗?5、堆和栈的区别是什么?6、Java中的数组是存储在堆上还是栈上的?7、Java中的对象创建有多少种方式?8、Java中对象创建的过程是怎么样的?9、Java中的对象一定在堆上分配内存吗?10...转载 2019-11-29 13:09:14 · 198 阅读 · 0 评论 -
JVM入门指南
提到Java虚拟机(JVM),可能大部分人的第一印象是“难”,但当让我们真正走入“JVM世界”的时候,会发现其实问题并不像我们想象中的那么复杂。唯一真正令我们恐惧的,其实是恐惧本身。而作为整个JVM系列的首篇,本文将带你解除刚开始学习JVM时的种种疑惑。比如:什么是JVM?为什么学习JVM?怎么有效的学习JVM?带着以上的这些问题,让我们一起走入JVM的世界吧。一、什么是JVM?JVM简介...转载 2019-11-29 12:45:59 · 155 阅读 · 0 评论 -
java--jvm启动的参数
java启动参数共分为三类其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用; 标准参数中比较有用的: verbose-verb...转载 2019-11-29 09:37:05 · 252 阅读 · 0 评论 -
Java虚拟机工作原理
一、类加载器首先来看一下java程序的执行过程。从这个框图很容易从大体上了解java程序工作原理。首先,你写好java代码,保存到硬盘当中。然后你在命令行中输入:javac YourClassName.java此时,你的java代码就被编译成字节码(.class).如果你是在Eclipse IDE或者其他开发工具中,你保存代码的时候...转载 2018-11-04 19:38:51 · 129 阅读 · 0 评论 -
java垃圾回收机制
一、垃圾回收机制的意义(解决内存管理的问题)Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。ps:内存泄露是指该内存空间使用完毕之后未回收...转载 2019-05-04 11:22:17 · 263 阅读 · 0 评论 -
JVM调优总结
数据类型Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress引用类型...转载 2019-05-28 11:23:57 · 184 阅读 · 0 评论 -
JVM总结
文章对JVM内存区域分布、JVM内存溢出分析、JVM垃圾回收算法/垃圾收集器、JVM性能调优工具及技巧、类加载等部分做了详细描述。用XMind画了一张导图:一、JVM内存区域Java虚拟机在运行时,会把内存空间分为若干个区域,根据《Java虚拟机规范(Java SE 7 版)》的规定,Java虚拟机所管理的内存区域分为如下部分:方法区、堆内存、虚拟机栈、本地方法栈、程序计数器。...转载 2019-11-21 14:59:41 · 319 阅读 · 0 评论