Skip to content

Commit

Permalink
mat
Browse files Browse the repository at this point in the history
  • Loading branch information
deipss committed Jan 11, 2024
1 parent aada147 commit b4a4205
Show file tree
Hide file tree
Showing 4 changed files with 122 additions and 5 deletions.
15 changes: 13 additions & 2 deletions docs/Java/Jvm内存分析工具.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ title: Jvm内存分析
parent: Java
---


# 1. 使用以下命令进行dump java文件

```shell
Expand All @@ -14,10 +13,22 @@ jmap -dump,format=b,file=<file-path> <pid>

# 2. eclipse mat

常见的几种报告
- 下载地址 https://eclipse.dev/mat/previousReleases.php

> jdk 8 使用Memory Analyzer 1.7.0 Release版本


> 浅堆(Shallow Heap)和深堆(Retained Heap)是两个非常重要的概念,它们分别表示一个对象结构所占用的内存大小和一个对象被GC回收后,可以真实释放的内存大小。
## 元空间内存泄漏

- 序列化与反序列化时,类加载器加载元信息过多,没有回收,例如 https://github.com/alibaba/fastjson2/issues/2109
-

## 堆OOM

- 内存中没有回收的对象过多
- 回收过慢,内存申请过多、过快

# 3. jvisualvm
33 changes: 31 additions & 2 deletions docs/command/mac_os.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,8 @@ export JAVA_HOME=$JAVA_8_HOME# alias命令动态切换JDK版本
alias jdk8="export JAVA_HOME=$JAVA_8_HOME"
alias jdk13="export JAVA_HOME=$JAVA_13_HOME"export PATH=$JAVA_HOME/bin:$PATH:.
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
$ source ~/.bash_profile #Zsh应改为 source ~/.zshrc
$ source ~/.bash_profile
#Zsh应改为 source ~/.zshrc

```

Expand Down Expand Up @@ -110,4 +111,32 @@ PC端主要是X86,移动端主是要RAM。
```shell
uname -pa

```
```

# 6. 目录

## 6.1. Mac 的文件目录结构

- /System 文件夹,系统文件夹。与Windows 之中的 C:\windows32 等文件夹类似。
- Library 系统资料库,其中的 Caches 可以删除。
- iOSSupport 提供了系统的 iOS 支持。
- /Applications GUI软件文件夹,共享的所有软件包都存放在此。
- /Library 应用资料库,包括了大部分非核心的系统组件。Caches 可删除。
- /Users 文件夹,与 Linux 之中的 /home 文件夹功能类似。而mac 之中的 /home 只是为了与 Linux 兼容,一般不放任何东西。
- /Network 和 /net 网络相关,空的。
- /Volumes 与 /mnt 类似,其中挂载了全部硬盘、网络硬盘等。
- /sbin,/bin,/usr /dev文件夹,与 Linux 基本一致。与 Linux 兼容。
- /etc, /var /tmp 文件夹,是位于 /private 之中对应文件夹的软连接。存放系统配置、数据库、缓存等。用于与 Linux 文件结构兼容。

## 6.2. Brew 软件位置

Mac 不自带包管理。但是可以很方便的获取 brew 包管理工具。brew 自身位于 /usr/local/Homebrew 目录。
其软件安装包没有安装在系统目录之下,而是位于 /usr/local/Cellar 里面。
举个例子,brew 安装的 Python3 位于 /usr/local/Cellar/python/3.7.1/ 之中,而 go 则可能位于 /usr/local/Cellar/go/1.12.1 之中。

但是这些软件位置互相独立,PAYH,LIBRARY 等环境变量管理较为麻烦,因此 brew 又维护了一个映射关系,
将所有文件软链接到 /usr/local 的 bin, etc, lib, var 等文件夹之中。
正是这个道理 mysql 安装的数据库的位置可能就位于 /usr/local/var/db 之中。

另外,Mac 的 GUI软件(即 Cocoa 软件)全部是按照软件包的形式发放,没有分散的文件。
brew 也可以安装 chrome 等这类 GUI 软件,此时位置全部放置在默认位置 /Applications 之中。
2 changes: 1 addition & 1 deletion docs/command/ubuntu.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ systemctl is-enabled supervisord
sudo apt install openjdk-8-jdk
whereis java

# 配置jre等包
# 配置jre等包,不配置的话,运行的java程序,会找不到CLASSPATH下的包,导致一些功能不能正常使用,比如远程debug
vim ~/.profile
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
Expand Down
77 changes: 77 additions & 0 deletions docs/spring/SpringContext.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,83 @@ BeanFactory本身功能并不充分,通过一系列的后置处理器来完善
具体增强哪些功能,在每个Bean定义时,去指定具体的接口,来完成具体的功能。

# 2. Spring 上下文初始化过程
- https://www.cnblogs.com/Createsequence/p/16585528.html
- https://www.cnblogs.com/Createsequence/p/16585530.html
- https://www.cnblogs.com/Createsequence/p/16585531.html
## 2.1. org.springframework.context.support.AbstractApplicationContext#refresh
```java
@Override
public void refresh() throws BeansException, IllegalStateException {
synchronized (this.startupShutdownMonitor) {
// ================= 一、上下文的初始化 =================

// Prepare this context for refreshing.
prepareRefresh();

// Tell the subclass to refresh the internal bean factory.
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

// Prepare the bean factory for use in this context.
prepareBeanFactory(beanFactory);

try {
// ================= 二、BeanFactory的初始化 =================

// Allows post-processing of the bean factory in context subclasses.
postProcessBeanFactory(beanFactory);

// Invoke factory processors registered as beans in the context.
invokeBeanFactoryPostProcessors(beanFactory);

// Register bean processors that intercept bean creation.
registerBeanPostProcessors(beanFactory);
// ================= 三、事件,Bean及其他配置的初始化 =================

// Initialize message source for this context.
initMessageSource();

// Initialize event multicaster for this context.
initApplicationEventMulticaster();

// Initialize other special beans in specific context subclasses.
onRefresh();

// Check for listener beans and register them.
registerListeners();

// Instantiate all remaining (non-lazy-init) singletons.
finishBeanFactoryInitialization(beanFactory);

// Last step: publish corresponding event.
finishRefresh();
}

catch (BeansException ex) {
if (logger.isWarnEnabled()) {
logger.warn("Exception encountered during context initialization - " +
"cancelling refresh attempt: " + ex);
}

// Destroy already created singletons to avoid dangling resources.
destroyBeans();

// Reset 'active' flag.
cancelRefresh(ex);

// Propagate exception to caller.
throw ex;
}

finally {
// 重置内部的一些元数据缓存

// Reset common introspection caches in Spring's core, since we
// might not ever need metadata for singleton beans anymore...
resetCommonCaches();
}
}
}
```

# 3. Spring常见的一些后置处理器

Expand Down

0 comments on commit b4a4205

Please sign in to comment.