深さを理解するJava 仮想マシン
コンテンツについての講演
- 歴史を学びます
- ガーベジコレクション
- パフォーマンス監視ツール
- 実際のケースのチューニング
- クラスファイルの構造を理解します
- クラスローディング機構
- バイトコード実行エンジン
- 最適化コンパイラと仮想マシンの実行
- Javaはシニアスレッド
1. 環境の構造
インストール JDK
2. メモリオーバーフローシーンシミュレーション
パブリック クラスTEST01に{ 公共 静的 ボイドメイン(文字列[]引数){ // テストメモリオーバーフロー リスト <デモ>一覧= 新しい新規のArrayList <デモ> (); 一方、(真の){ List.add(新しい新しいデモ()); } // 常に消費するヒープメモリのメモリ消費量を知っているオブジェクトの作成を停止(実際には、実際には持っていない消費メモリの8G) // それがラインに到達したとき、それが誤りで報告され、その後、報告しますメモリオーバーフロー // のOutOfMemoryError } } クラスデモ{ }
このスナップショットは、プロジェクトファイルのエラーで見つけることができます
しかし、我々はそれをする必要があるので、読むことができません http://www.eclipse.org/mat/downloads.php ダウンロードするには日食のMemoryAnalyzerの分析ツールを
如果你直接下载会非常慢所以选择一个其他的镜像这样下载就会快点
下载解压后打开
点击file->Open Heap Dump 选中产生的那个文件
然后生成一个
选中这个图标可以查看我们的堆内存运行情况 加载堆内存的信息
这个就代表很可能在main里面出现问题了 占得百分比高达95.6%
Shallow Heap 对象本分所占用的内存大小不包含它的引用对象
Retained Heap 代表当前对象的大小包括当前可直接或者间接引用对象的大小的总和。
点开那个占用堆内存最多线程
继续点开会发现 他创建了很多个这样的对象造成的堆内存溢出
Jvm 的可视化监控工具
这个工具在哪呢在我们安装的jdk中
因为我们的jdk已经配置在我们的path路径下因此在任何路径下都可以访问的到所以在
命令行中可以输入这个值 会将这个可视化界面弹出来
我们可以看到这个图像化界面只有18k那么真正的代码放在了lib目录下的一个jar包里面
这个jps这个命令会列出来所有的java进程,我们看到有JConsole 这个进程 但是为什么没有jps这个进程呢是因为
这个命令执行完之后就结束了。
当我们点进去就能对这个进程进行监控
我们大概就能看到这样的窗口了
Java 之父
詹姆斯 高林斯