项目的依赖
https://www.jianshu.com/p/f34c179bc9d0
性能优化
- 内存优化
JVM内存模型:
参考链接
public class AppMain //运行时, jvm 把appmain的代码全部都放入方法区
{
public static void main(String[] args) //main 方法本身放入方法区。
{
//引用俗称变量
Sample test1 = new Sample( " 测试1 " ); //test1是引用,所以放到栈区里, Sample是自定义对象应该放到堆里面
Sample test2 = new Sample( " 测试2 " );
test1.printName();
test2.printName();
}
}
public class Sample //运行时, jvm 把appmain的信息都放入方法区
{
/** 范例名称 */
private String name; //new Sample实例后, name 引用放入栈区里, name 对应的 String 对象放入堆里
/** 构造方法 */
public Sample(String name)
{
this .name = name;
}
/** 输出 */
public void printName() //在没有对象的时候,print方法跟随sample类被放入方法区里。
{
System.out.println(name);
}
}
举例:
名称 | 特征 | 作用 | 参数配置 | 异常 |
程序 计数器 | 线程私有 | 字节码行号指示器 | 无 | 无 |
虚拟机 栈stack | 线程私有, 生命周期与线程相同, 连续内存空间 | 存储局部变量表 | -Xss | StackOverflowError OutOfMemoryofError |
java 堆heap | 线程共享 | 保存所有对象实例(包括数组) | OutOfMemoryofError | |
方法区 | 线程共享 | 存储被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据 | OutOfMemoryofError | |
运行时 常量池 | 方法区一部分,具有动态性 | 存放字面量行号及符号引用 |
GC原理:
- https://blog.csdn.net/lilong329329/article/details/82222713
- https://my.oschina.net/dabird/blog/1594600
- https://www.cnblogs.com/jeffwongishandsome/p/talk-about-GC-and-how-to-use-GC-better.html
内存泄漏: