随笔分类 -  JVM

摘要:今天想复现一下如何排查一个进程中比较高的线程。 对于如下代码: import java.util.concurrent.CountDownLatch; public class PlainTest { public static void main(String[] args) throws Exc 阅读全文
posted @ 2021-06-26 19:57 QiaoZhi 阅读(2196) 评论(0) 推荐(0) 编辑
摘要:在测试环境中开启的堆大小是4g。但是却发生了OOM。 发生OOM的场景是: 上传Excel 之后进行数据的清洗,然后清洗完成之后会将清洗掉的、清洗后的数据再次备份到磁盘中;同时将清洗后的数据入关系型数据库。(解析Excel 用的是POI, 数据清洗用的是Tablesaw, 且清洗的操作都是在内存中处 阅读全文
posted @ 2021-06-25 19:20 QiaoZhi 阅读(1317) 评论(0) 推荐(0) 编辑
摘要:1. 使用Java 自带的内存查看工具进行分析 对于如下代码: import java.util.ArrayList; import java.util.List; public class PlainTest { public static void main(String[] args) thr 阅读全文
posted @ 2021-06-06 21:10 QiaoZhi 阅读(1167) 评论(0) 推荐(0) 编辑
摘要:方法调用并不等于方法执行,方法调用阶段的唯一任务就是确定被调用方法的版本(即调用哪一方法),暂时还不涉及方法内部的具体运行过程。在程序运行时,进行方法调用是最普遍、最频繁的操作。Class文件的编译过程不包含编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行 阅读全文
posted @ 2019-04-17 21:22 QiaoZhi 阅读(1894) 评论(0) 推荐(0) 编辑
摘要:类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载->验证->准备->解析->初始化->使用->卸载。其中,验证、准备、解析统称为链接。 我们知道,类加载的过程分为:加载->验证->准备->解析->初始化。 加载:主要完成三件事(1.通过类的全限定名来获取定义此类的二进制字节 阅读全文
posted @ 2019-01-23 18:22 QiaoZhi 阅读(791) 评论(3) 推荐(0) 编辑
摘要:JDK自带的工具可以方便的帮助我们处理一些问题,包括查看JVM参数,分析内存变化,查看内存区域,查看线程等信息。 我们熟悉的有java.exe,javac.exe,javap.exe(偶尔用),jps.exe,jmap.exe....等,下面会详细介绍。分别在linux和windows下面介绍。wi 阅读全文
posted @ 2018-11-27 23:08 QiaoZhi 阅读(1082) 评论(0) 推荐(0) 编辑
摘要:JVM有两种运行模式Server与Client。两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢;但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多。这是因为Server模式启动的JVM采用的是重量级的虚拟机,对程序采用了更多的优化;而Cli 阅读全文
posted @ 2018-05-24 17:19 QiaoZhi 阅读(1504) 评论(0) 推荐(0) 编辑
摘要:最近一直被方法区里面存着什么东西困扰着? 1.方法区里存class文件信息和class文件常量池是个什么关系。 2.class文件常量池和运行时常量池是什么关系。 方法区存着类的信息,常量和静态变量,即类被编译后的数据。这个说法其实是没问题的,只是太笼统了。更加详细一点的说法是方法区里存放着类的版本 阅读全文
posted @ 2018-03-06 18:01 QiaoZhi 阅读(4302) 评论(0) 推荐(1) 编辑
摘要:java启动参数共分为三类; 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容; 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容; 其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会 阅读全文
posted @ 2017-12-14 15:01 QiaoZhi 阅读(17941) 评论(0) 推荐(1) 编辑
摘要:Tomcat 本身与 JVM 优化 Tomcat:调整Server.xml JVM:bat启动服务方式的话修改catalina.bat 服务式启动的话参考:http://www.cnblogs.com/qlqwjy/p/8007490.html Tomcat 的缺省配置是不能稳定长期运行的,也就是不 阅读全文
posted @ 2017-12-09 10:22 QiaoZhi 阅读(1046) 评论(0) 推荐(1) 编辑
摘要:Java解释执行过程: 代码装入-代码校验-代码执行 Java字节码的执行方式分为两种:即使编译方式和解释执行方式。即时编译是值解释器先将字节码编译成机器码,然后执行该机器码。解释执行的方式是指解释器通过每次解释并且执行一小段代码来完成java字节码程序的所有操作。通常采用的是解释执行的方式。 什么 阅读全文
posted @ 2017-12-03 20:59 QiaoZhi 阅读(707) 评论(0) 推荐(0) 编辑
摘要:内存划分 1。JAVA内存主要划分为方法栈、方法区、堆。 2。方法栈上内存会自动释放; 3。方法区上主要加载了类的元信息、静态变量、常量。改区域又称为持久代(Perm Gen),默认是最小16M,最大64M。配置参数 -XX:PermSize=16m -XX:MaxPermSize=64m; 4。堆 阅读全文
posted @ 2017-12-02 09:54 QiaoZhi 阅读(657) 评论(0) 推荐(0) 编辑
摘要:Java中的GC有哪几种类型? 参数 描述 UseSerialGC 虚拟机运行在Client模式的默认值,打开此开关参数后, 使用Serial+Serial Old收集器组合进行垃圾收集。 UseParNewGC 打开此开关参数后,使用ParNew+Serial Old收集器组合进行垃圾收集。 Us 阅读全文
posted @ 2017-11-30 15:53 QiaoZhi 阅读(103995) 评论(3) 推荐(5) 编辑
摘要:eclipse启动优化,终于不那么卡了! 网上找了好多都是myEclipse的优化的,跟eclipse有点区别,找了很多方法还是不能让这个eclipse(Version: Kepler Release)快起来,太费事了,终于给俺找到一个挺好用的方法,转来的。 首先了解下JVM中几个相关的概念:Xms 阅读全文
posted @ 2017-11-30 13:02 QiaoZhi 阅读(1255) 评论(0) 推荐(1) 编辑
摘要:1.概述 GC需要考虑的三件事; 1.哪些内存需要回收? 2.什么时候回收? 3.如何回收? 我们知道程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出有条不紊的入栈和出栈。每一个栈帧分配多少内存基本上是在类结构确定下来就知道的,因此这几个区域的内存分配和 阅读全文
posted @ 2017-10-24 18:36 QiaoZhi 阅读(461) 评论(0) 推荐(0) 编辑
摘要:Java虚拟机在执行Java的过程中会把管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,而有的区域则依赖线程的启动和结束而创建和销毁。 Java虚拟机包括下面几个运行时数据区域:(堆和方法区线程共享,会抛出OutOfMemoryE 阅读全文
posted @ 2017-10-24 18:27 QiaoZhi 阅读(803) 评论(0) 推荐(0) 编辑
摘要:1、JVM是如何管理内存的 Java中,内存管理是JVM自动进行的,无需人为干涉。 了解Java内存模型看这里:java内存模型是什么样的 了解jvm实例结构看这里:jvm实例的结构是什么样的 创建对象或者变量时, JVM会自动分配内存(当然这个分配是遵循严格规则的)。当JVM发现某些对象不再需要的 阅读全文
posted @ 2017-10-20 17:16 QiaoZhi 阅读(919) 评论(0) 推荐(0) 编辑
摘要:Java最主流的源码编译器,javac,基本上不对代码做优化,只会做少量由Java语言规范要求或推荐的优化;也不做任何混淆,包括名字混淆或控制流混淆这些都不做。这使得javac生成的代码能很好的维持与原本的源码/AST之间的对应关系。换句话说就是javac生成的代码容易反编译。 Java Class 阅读全文
posted @ 2017-09-26 21:11 QiaoZhi 阅读(2629) 评论(0) 推荐(1) 编辑
摘要:Class文件检查器保证装载的class文件内容有正确的内部结构,并且这些class文件互相间协调一致。Class文件检查器实现的安全目标之一就是程序的健壮性。如果某个有漏洞的编译器,或某个聪明的黑客,产生了一个class文件,而这个class文件中包含了一个方法,这个方法的字节码中含有一条跳转到方 阅读全文
posted @ 2017-09-26 21:04 QiaoZhi 阅读(531) 评论(0) 推荐(0) 编辑
摘要:九、自增减指令 该指令用于对本地(局部)变量进行自增减操作。该指令第一参数为本地变量的编号,第二个参数为自增减的数量。 比如对于代码: int d=10; d++; d+=2; d--; d++; d+=2; d--; 其指令为: 2: bipush 10 4: istore_2//在我的程序中是其 阅读全文
posted @ 2017-09-26 21:03 QiaoZhi 阅读(1025) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示