内存不足 java应用无法启动
原因在启动应用时,发现应用一启动就挂掉,线程号一闪就没了,有点奇怪,查看一下错误日志。报了一个错: Invalid initial heap size: -Xms9g
完整日志如下
123456789Thu May 19 18:14:59 CST 2016Invalid initial heap size: -Xms9gThe specified size exceeds the maximum representable size.Error: Could not create the Java Virtual Machine.Error: A fatal exception has occurred. Program will exit.[java-tron@chaindev010 FullNodeHelloMessage]$ java -versionjava version "1.8.0_161"Java(TM) SE Runtime Environment (build 1.8.0_161-b12)Java HotSpot(TM) 64-Bit Serve ...
jvm 的局部变量表
局部变量表是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量。Java中方法的局部变量是放在虚拟机栈的局部变量表里面,形参也算一个。本地变量表,就是局部变量表,只是翻译不同。代码说明
运行时栈帧中存储了以下内容
局部变量
操作数栈
动态链接
返回地址
附加信息
每一个方法的调用开始和结束都是栈的压入(入栈)和弹出(出栈)的过程
12345public static void main(String[] args) { byte[] waste = new byte[6 * 1024 * 1024]; int new_var = 0; System.gc(); }
反编译得到:
1234567891011public static void main(java.lang.String[]); flags: ACC_PUBLIC, ACC_STATIC Code: stack=1, locals=3, args_size=1 0: ldc #2 ...
有状态和无状态对象
这个概念在多线程中一直被提及,实际上很简单。1.有状态就是有数据存储功能。有状态对象(Stateful Bean),就是有实例变量的对象,可以保存数据,是非线程安全的。在不同方法调用间不保留任何状态。
2.无状态就是一次操作,不能保存数据。无状态对象(Stateless Bean),就是没有实例变量的对象,不能保存数据,是不变类,是线程安全的。
3.引用无状态的对象,则自己也可以是线程安全的
1234public class StatelessBeanService { // 虽然有billDao属性,但billDao是没有状态信息的,是Stateless Bean. BillDao billDao;}
java-解决jar包反射获取不到类
前言在开发一个基础工具包给业务组的小伙伴们使用的时候,发现一个小问题,就是在反射的时候在自己电脑上运行的正常,但是打成jar包后,就class not fuond,有点奇怪。如果能借助Spring这个都不是事,关键是不能用。
场景复现下面的目的是,找到这个指定包下的所有类,对我指定了注解的类进行加载,其实就是一个可以灵活装配、拆卸的策略模式。这样业务的类可以通过指定注解来选择是否成为业务的一部分。下面这段代码在IDE中运行正常。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293import java.io.File;import java.io.IOException;import java.io.InputStream;import java.net.JarURLConnection ...
maven 项目依赖
什么是依赖依赖的作用可以将项目以包的方式引用到当前项目中进行使用。实际上平时引用的jar包都看可以看成是一个个子项目被引入到了项目中。
项目引用也就是把其他的项目当成jar包放入仓库中,进行依赖的引用,就跟从网上下载jar包到本地一样。被项目在被引用前必须先 clean install 到仓库中。
引用示例创建一个maven项目,在 pom.xml 中添加一个项目引用,这里引用一个外部项目 junit,用它来构建测试用例,这里仅作为项目引用的示例。
123456789101112131415161718<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven. ...
maven 安装
安装maven官网 http://maven.apache.org/download.cgi
下载
wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
配置maven环境变量
export MAVEN_HOME=/data/apache-maven-3.6.3export PATH=${MAVEN_HOME}/bin:${PATH}
配置maven本地仓库的位置
vim /data/apache-maven-3.3.9/settings.xml#设置本地仓库的位置<localRepository>/data/maven/repo</localRepository>
验证
mvn -vmvn clean
maven 项目模型
pom.xml 项目对象模型每一个项目都有一个pom.xml,Project Object Model,项目对象模型。用面向对象的思维还看这个文件,它就是一个项目。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。
所有的pom.xml都要配置三个最基本的东西,其它的不配都没关系。下面的配置只需要知道即可,因为工具会自动生成。
示例:
1234567<!-- 固定的头部信息,不要去改变 --><modelVersion>4.0.0</modelVersion><!-- 项目座标 --><groupId>com.mycompany.app</groupId><artifactId>my-app</artifactId><version>1.0-SNAPSHOT</version>
说明:
modelVersion: 永远的4.0.0,这个固定存在的。
groupId: 项目的项目组,就是把域名反 ...
maven 概念
概念maven 是用于项目构建 和 包管理的工具。maven 只对项目构建进行影响,但是不会对java编码、代码产生任何的影响。
maven有什么用
项目构建
包管理
maven属于工具,下载安装后也需要配置path。非常简单。而对maven的使用就是在使用maven的操作规范的情况下,用cmd输入maven命令即可。
使用maven必须在有网络的情况下,否则不可能成功。因为maven是自动去中央仓库中下载插件的,并把插件下到本地仓库中。
推荐书 《maven实战》
学习maven必须要有两个新概念要劳记:1.模块2.版本
大概摸到maven 命令的规律,maven的命令一般以模块或插件为基础比如
mvn eclipse:eclipse //生成eclipse 项目mvn assembly:singl -DdescriptorId=project //mvn 插件:插件模块 -D参数maven 的perperties 标签可以影响到作域,在.properties 文件中用${ }可以取到sitting.xml中的值,如果是pom中的p ...
eclipse+tomcat的问题能启动,但量不能访问
今天还发现了一种情况tomcat起不来,配置是默认的,就是下面两张图的第一张图的配置。但是就是起不来,原因是web.xml配置有问题也会出现这种情况。
如果,按钮是灰的不能选择,那就把包含的项目先删掉,再clean一下就可以。
原来的解决方法:tomcat启动了但是却访问不了是因为:改成以下即可:
List分组
对一个 List 里面相同属性的内容进行分类,如:对相同部门的员工进行分类。思路是使可以区分类型的属性进行分类,以部门类型为例。
1234567891011121314151617List<Devloper> devlopers = new ArrayList<>();devlopers.add(new Devloper(1, "嗯哼", 1));devlopers.add(new Devloper(2, "啊哈", 1));devlopers.add(new Devloper(3, "哦吼", 1));devlopers.add(new Devloper(4, "呃呵", 2));devlopers.add(new Devloper(5, "呜唿", 2));Map<Integer, List<Devloper>> devloperMap = new HashMap<>();for (Devloper devloper: de ...