
Java虚拟机
文章平均质量分 72
zhangzeyuaaa
这个作者很懒,什么都没留下…
展开
-
JVM内存详情查看命令之jhat
jhat是jdk内置的工具之一。主要是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言。使用jmap等方法生成java的堆文件后,使用其进行分析。第一步:导出堆#jmap -dump:live,file=a.log pid除了使用jmap命令,还可以通过以下方式:1、使用 jconsole 选项通过 HotSpotDiagnosticMXBean 从运行时获得堆转储(生成dump文件)、2、虚拟机启动时如果指定了 -X转载 2021-09-23 18:37:49 · 1667 阅读 · 0 评论 -
JVM内存详情查看命令之 jmap
概述命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。jmap 用法参数:option: 选项参数。 pid: 需要打印配置信息的进程ID。 executable: 产生核心dump的Java可执行文件。 core: 需要打印配置信息的核心文件。 server-id 可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器。转载 2021-09-23 16:26:41 · 836 阅读 · 0 评论 -
Windows服务器下 Tomcat占用CPU过高排查(jstack的使用)
问题描述Tomcat下只部署了一个项目,但是CPU持续保持99%,看任务管理器发现Tomcat程序占大部分,mysql占小部分,推测是定时任务频繁访问数据库导致,先从java程序看起。查看java进程下的线程使用工具process explorer:Windows系统和应用程序监视工具。(自行百度下载)操作步骤1.双击打开监控工具这里可以看到tomcat的PID为12122.双击点开Tomcat进程,进入线程页面可以看到占用最高的线程ID是:44323.使用js.转载 2021-09-23 12:52:01 · 3841 阅读 · 0 评论 -
Java垃圾回收算法简介
引言 Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new、newarray、anewarray和multianewarray等指令建立,但是它们不需要程序代码来显式地释放。一般来说,堆的是由垃圾回收 来负责的,尽管JVM规范并不要求特殊的垃圾回收技术,甚至根本就不需要垃圾回收,但是由于转载 2014-08-23 21:29:08 · 864 阅读 · 0 评论 -
System.gc与finalize以及Thread对象何时被回收
System.gc()建议JVM进行一次垃圾回收。垃圾对象在被回收之前,其finalize方法会被JVM自动调用,用于做一些清除工作。简单地说,调用了System.gc()之后,java在内存回收过程中就会调用那些要被回收的对象的 finalize() 方法。下面看一个例子。User:package com.zzj.gc;public class User { private S原创 2015-12-30 13:22:35 · 3594 阅读 · 0 评论 -
Java内存模型
本文主要依据《深入理解Java虚拟机》这本书写的,有批评和建议请留言!概述计算机的处理器和存储器之间的运算速度存在数量级的差距,为了充分利用处理器,提高效率,现代计算机引入了高速缓冲:将运算需要用到的数据从内存复制到缓冲之中,运算结束后将结果从缓冲同步到内存之中,这样处理器就无需等待缓慢的内存读写了。高速缓冲解决了处理器和内存之间的速度矛盾,但是引入了新的问题:缓存一致性。计算机领原创 2015-01-13 16:26:28 · 1088 阅读 · 0 评论 -
双重检查锁定(double-checked locking)与单例模式
单例模式有如下实现方式:package com.zzj.pattern.singleton;public class Singleton { private static Singleton instance; private Singleton() { } public static Singleton getInstance() { if (instance == null原创 2015-01-13 12:11:41 · 22297 阅读 · 15 评论 -
Java内存区域
本文主要依据《深入理解Java虚拟机》这本书写的,有批评和建议请留言! Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范(Java SE 7版)》的规定,Java虚拟机所管理的内存将会转载 2015-01-13 13:14:57 · 1012 阅读 · 0 评论 -
类加载机制:全盘负责和双亲委托
“全盘负责”是指当一个ClassLoader装载一个类时,除非显示地使用另一个ClassLoader,则该类所依赖及引用的类也由这个CladdLoader载入。例如,系统类加载器AppClassLoader加载入口类(含有main方法的类)时,会把main方法所依赖的类及引用的类也载入,依此类推。以上步骤只是调用了ClassLoader.loadClass(name)方法,并没有真正定义类原创 2015-01-07 20:56:24 · 12920 阅读 · 8 评论 -
Class.forName(String className)使用哪个类加载器?
不看源码,以为Class.forName(String className)使用的是系统类加载器,看了源码才知道不是这么回事。 public static Class forName(String className) throws ClassNotFoundException { return forName0(className,原创 2015-01-08 20:56:32 · 5947 阅读 · 0 评论 -
Tomcat类加载机制
Tomcat中的类加载策略和JDK中的委托模型略有不同。Tomcat Server在启动的时候将构造一个ClassLoader树,以保证模块的类库是私有的,ClassLoader结构如下: Bootstrap | System | Com转载 2015-01-09 00:27:18 · 993 阅读 · 0 评论 -
Java线程上下文类加载器
1 线程上下文类加载器 线程上下文类加载器(context class loader)是从 JDK 1.2 开始引入的。类 java.lang.Thread中的方法 getContextClassLoader()和 setContextClassLoader(ClassLoader cl)用来获取和设置线程的上下文类加载器。如果没有通过 setContextClassLoad转载 2015-01-09 00:01:18 · 2580 阅读 · 0 评论 -
Java应用类的包名为什么不能以java.开头?
我们自己编写的Java类默认情况下都由系统类加载器加载。系统类加载器也是ClassLoader的子类,也是通过调用ClassLoader.loadClass(name)方法来加载类,而扩展ClassLoader类的一般做法就是重写findClass(name)方法,然后调用defineClass(String name, byte[] b, int off, int len)返回。所以我们可以直接原创 2015-01-08 21:40:10 · 2958 阅读 · 0 评论 -
Java自定义类加载器
如果要使用自定义类加载器加载class文件,就需要继承java.lang.ClassLoader类。ClassLoader有几个重要的方法:protected ClassLoader(ClassLoader parent):使用指定的、用于委托操作的父类加载器创建新的类加载器。 protected final Class defineClass(String name, byte[原创 2015-01-08 17:59:41 · 938 阅读 · 0 评论 -
Java:什么是类型相等?
看下面的例子:package com.zzj.classloader;import java.io.IOException;import java.io.InputStream;/** * 类型相等判断 * * @author Administrator * */public class ClassEqualTest { public static void main(原创 2015-01-08 17:15:35 · 2079 阅读 · 0 评论 -
Java类加载简介
类的生命周期JVM把class文件加载的内存,并对数据进行校验、转换解析和初始化,最终形成JVM可以直接使用的Java类型的过程就是加载机制。类从被加载到虚拟机内存中开始,到卸载出内存为止,它的生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、卸原创 2015-01-07 14:34:45 · 1136 阅读 · 0 评论 -
JAVA虚拟机加载类的三种方式
虚拟机加载类的途径1、由 new 关键字创建一个类的实例 在由运行时刻用 new 方法载入 如:Dog dog = new Dog();2、调用 Class.forName() 方法 通过反射加载类型,并创建对象实例 如:Class clazz = Class.forName(“Dog”); Object dog =clazz.newInst转载 2013-10-14 11:24:14 · 7061 阅读 · 1 评论