JVM调优

理解JVM调优的目标 性能提升:通过调整 JVM 参数,提高应用程序的运行速度和响应时间。例如,减少垃圾回收(GC)的停顿时间,从而让应用程序在处理高并发请求时能够更快速地响应,像电商平台在促销活动期间,大量用户并发访问商品详情和下单,优化 JVM 能减少响应延迟。 资源利用优化:合理利用系统的内存和 CPU 等资源。确保 JVM 不会过度占用内存导致系统其他进程受到影响,同时也避免频繁的内存回收操作浪费 CPU 资源。例如,在服务器上运行多个 Java 应用,优化每个应用的 JVM 内存配置,使服务器资源得到均衡分配。 堆内存调优 初始堆大小(-Xms)和最大堆大小(-Xmx) ...

2025-01-02 · 6 分钟 · 2822 字 · lixb

Http-登录接口设计

接口功能规划 接口的功能需求 用户认证: 接口的主要目的是验证用户提供的凭据(如用户名和密码)是否正确,从而允许合法用户访问系统资源。 安全性考虑: 要防止恶意攻击,如暴力破解密码,因此可能需要加入一些安全机制,如验证码、密码加密等。 返回信息明确: 根据登录结果,返回给客户端相应的信息,如成功登录后的用户信息(可能包括用户 ID、角色等)或者错误提示(如用户名或密码错误)。 URL和请求方法确定 ...

2025-01-01 · 4 分钟 · 1747 字 · lixb

ObjectBox数据库实体类重命名或修改字段解决方案

数据模型更新 2024年6月27日14:49:07 ObjectBox - 数据模型更新 UIDs 重命名实体和属性 Java/Kotlin和Dart的操作方法与示例 Python的操作方法与示例 更改属性类型 操作方法与示例 数据模型更新 如何在ObjectBox中重命名实体和属性、更改属性类型。 ObjectBox - 数据模型更新 ObjectBox主要自动管理其数据模型(模式)。数据模型由你定义的实体类来定义。当你添加或删除实体或实体的属性时,ObjectBox会处理这些更改,无需你采取进一步行动。 对于其他更改,如重命名或更改类型,ObjectBox需要额外信息来使事情明确。这是通过设置唯一ID(UIDs)作为注释来完成的,如下所示。 ...

2024-12-24 · 7 分钟 · 3074 字 · lixb

netstat命令解析

简介 netstat 全称是:network statistics 是一个用于监控、排除网络连接故障、路由表的命令行工具,它提供关于网络统计和 socket 连接的详细信息。 用法 windows中 1 netstat [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-t] [-x] [-y] [interval] linux中 1 2 3 4 5 6 7 8 9 10 11 12 netstat [-vWeenNcCF] [<Af>] -r netstat {-V|--version|-h|--help} netstat [-vWnNcaeol] [<Socket> ...] netstat { [-vWeenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay] <Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw} {-x|--unix} --ax25 --ipx --netrom <AF>=Use '-6|-4' or '-A <af>' or '--<af>'; default: inet List of possible address families (which support routing): inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) x25 (CCITT X.25) 各参数说明 参数 说明(windows,只支持单字符命令) 说明(linux) -a, –all 显示所有连接和侦听端口(只支持单字符命令) -b 显示在创建每个连接或侦听端口时涉及的可执行文件。在某些情况下,已知可执行文件托管多个独立的组件,此时会显示创建连接或侦听端口时涉及的组件序列。在此情况下,可执行文件的名称位于底部 [] 中,它调用的组件位于顶部,直至达到 TCP/IP。注意,此选项可能很耗时,并且可能因为你没有足够的权限而失败。 不支持 -c, –continuous 不支持 continuous listening -C, –cache 不支持 display routing cache instead of FIB -e,–extend 显示以太网统计信息。此选项可以与 -s 选项组合使用 显示更多信息 -f 显示外部地址的完全限定域名(FQDN)。 不支持 -F, –fib 不支持 显示转发信息 -l, –listening 不支持 diplay listening server sockets -n, –numeric –numeric-hosts –numeric-ports –numeric-users 以数字形式显示地址和端口号。 don’t resolve namesdon’t resolve host namesdon’t resolve port namesdon’t resolve user names -g, –groups 不支持 display multicast group memberships -M, –masquerade 不支持 display masqueraded connections -i, –interfaces 不支持 display interface table -I, –interfaces= 不支持 display interface table for -N, –symbolic 不支持 resolve hardware names -o, –timers 显示拥有的与每个连接关联的进程 ID。 display timers -p proto , –programs 显示 proto 指定的协议的连接;proto可以是下列任何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s选项一起用来显示每个协议的统计信息,proto 可以是下列任何一个:IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。 display PID/Program name for sockets -q 显示所有连接、侦听端口和绑定的非侦听 TCP 端口。绑定的非侦听端口不一定与活动连接相关联。 不支持 -r,–route 显示路由表。 -s, –statistics 显示每个协议的统计信息。默认情况下,显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息;-p 选项可用于指定默认的子网。 display networking statistics (like SNMP) -t 显示当前连接卸载状态。 不支持 -v, –verbose 不支持 be verbose -W, –wide 不支持 don‘t truncate IP address -x 显示 NetworkDirect 连接、侦听器和共享终结点。 不支持 -y 显示所有连接的 TCP 连接模板。无法与其他选项结合使用。 不支持 -Z,–context 不支持 display SELinux security context for sockets interval 重新显示选定的统计信息,各个显示间暂停的间隔秒数。按 CTRL+C 停止重新显示统计信息。如果省略,则 netstat 将打印当前的 配置信息一次。 不支持 常用命令 查看所有连接 ...

2024-12-18 · 12 分钟 · 5913 字 · lixb

Linux中开启和结束java程序脚本模板

由于自己需要经常在Linux中执行java程序,根据网上资料,整理了这两个模板。 开启java jar进程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #!/bin/bash # 设置要使用的 Java环境路径,可根据实际情况修改 #JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64" #PATH="$JAVA_HOME/bin:$PATH" # 判断java环境是否存在 JAVA_PATH=$(which java) if [ -z "$JAVA_PATH" ]; then echo "not find java environment." else echo "find java environment ,path: $JAVA_PATH" fi #项目名称 PROJECT_NAME=Hello Java #定义jar所在路径 JAR_PATH=/home/java_project/target/ cd JAR_PATH #定义jar名称 JAR_NAME=$(find -name "*.jar") #检查jar包是否存在 if [! -f "$JAR_NAME" ]; then echo "Error: $JAR_NAME not found." exit 1 fi #定义Java虚拟机参数(可根据实际情况调整) JAVA_OPTS="-Xmx512m -Xms256m" #定义日志文件名称 APP_LOG="app.log" # 使用指定java环境执行jar包 # nohup "$JAVA_HOME/bin/java" $JAVA_OPTS -jar $JAR_NAME > $APP_LOG 2>&1 & nohup java $JAVA_OPTS -jar $JAR_NAME > $APP_LOG 2>&1 & echo "$PROJECT_NAME started. Logs can be find in $APP_LOG." 结束java jar进程 ...

2024-12-11 · 1 分钟 · 390 字 · lixb

java中MQTT使用

MQTT 简介 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它基于发布 / 订阅模式,广泛应用于物联网等场景,用于设备之间的通信。在 Java 中使用 MQTT,需要引入相应的 MQTT 客户端库,如 Eclipse Paho MQTT。 引入依赖 Maven 项目:如果是 Maven 构建的项目,在pom.xml文件中添加以下依赖: ...

2024-11-26 · 7 分钟 · 3389 字 · lixb

C指针使用

指针的基本概念 指针是一个变量,其值为另一个变量的地址。在 C 语言中,通过使用取地址运算符&可以获取一个变量的地址,而通过指针变量可以存储和操作这些地址。例如: 1 2 int num = 10; int *ptr = &num; 在上述代码中,num是一个整型变量,&num表示获取num的地址,ptr是一个指向整型的指针变量,它存储了num的地址。 ...

2024-11-14 · 4 分钟 · 1795 字 · lixb

Android使用apksigner工具为应用签名

环境要求 Android SDK Build Tools 修订版24.0.3及更高版本 所在路径为 /Android SDK路径/build-tools/版本号/ 注意事项: 使用apksigner签名后,又对apk做了更改,apk的签名会失效 如果需要使用zipalign对齐apk,需要在为签名之前使用它 用法 为APK签名 使用 apksigner 工具为 APK 签名的语法如下: 1 2 3 apksigner sign --ks keystore.jks | --key key.pk8 --cert cert.x509.pem [signer_options] app-name.apk 在您使用 apksigner 工具为 APK 签名时,必须提供 signer 的私钥和证书。您可以通过两种方式添加此信息: ...

2024-11-11 · 6 分钟 · 2944 字 · lixb

Android系统结构目录分析

根目录(/): 文件结构最顶层,里面放了init和 .rc文件,以及各个重要的子目录等 /system 1 2 3 4 uis7863_z6:/ # cd system uis7863_z6:/system # ls apex bin etc framework lib64 product usr xbin app build.prop fonts lib priv-app system_ext vendor /app /priv-app 这个目录存放着系统预装的应用程序(APK 文件)。这些应用是系统的核心应用,如电话、短信、日历等。它们在系统初始化时就被安装,并且用户通常无法直接删除(在未获取 Root 权限的情况下)。例如,系统的拨号应用就位于这个目录中,它提供了基本的通话功能,包括拨打电话号码、查看通话记录等操作。 /system/priv-app 中包括 Launcher,SystemUI,SettingsProvider 等,均是系统的核心应用,这些应用能使用系统级的权限,4.4 之前的所有 /system/app 下的软件都能使用系统级的权限,Google 这样做是把内置到系统的应用也做个级别的区别。放到 /system/priv-app 下的应用比放到 /system/app 下的应用可以声明获得更多的权限。在Android中每个应用都有自己的权限声明,比如要使用系统限制的权限(例如 android.permission.WRITE_SECURE_SETTINGS),我们就需要把程序安装到 /system/app 下。手机被 root 后,通过 adb push 可以把 apk 推送到这两个目录,作为系统应用,用户无法删除。 /bin 包含了许多可执行的二进制文件,这些文件是系统的基础命令工具。例如,ls(用于列出目录内容)、rm(用于删除文件或目录)等常见的 Linux 命令在这里都可以找到对应的 Android 版本。这些命令工具用于执行各种系统管理和操作任务,如文件系统管理、进程管理等。也可以通过 adb shell +本目录的二进制程序名 来执行。 /etc 主要存放系统的配置文件。其中包括网络配置文件(如 Wi - Fi 配置文件)、音频配置文件(用于设置不同音频场景的参数)等。例如,在这个目录中的hosts文件用于配置域名解析,它可以帮助系统将域名映射到相应的 IP 地址,类似于在计算机网络中起到本地域名解析的作用。 /framework 存放着 Android 系统的框架层相关文件。包括 Java 类库(.jar文件)和本地库(.so文件),这些文件为应用程序开发提供了基础的 API 和运行时环境。例如,android.jar文件就位于这个目录,它包含了 Android 开发中常用的类,如Activity、Service等,应用开发者通过引用这些类来构建自己的应用程序。 /lib /lib64 这两个目录主要存放系统的共享库文件。这些库文件支持系统的各种功能,包括图形处理、媒体播放、数据库操作等。例如,libc.so(C 标准库)在这里存放,它为系统和应用提供了基本的 C 语言函数支持,如字符串处理、内存管理等功能。 /data ...

2024-11-08 · 4 分钟 · 1872 字 · lixb

Android调试工具adb帮助文档

android中通过adb shell 能执行系统/system/bin下的程序 adb 截图/录屏 1 2 3 4 5 # 截图 adb shell screencap /sdcard/abc.png # 录屏 --size 尺寸 --time-limit 限制时间,单位秒 adb shell screenrecord --size 1280x720 --time-limit 10 /sdcard/screenrecord-1.mp4 adb拷贝已安装的apk 1 2 3 4 5 6 7 8 9 10 11 # 获取当前activity相关信息 adb shell dumpsys activity | find "ResumedActivity" # 获取apk文件所在路径 adb shell pm path com.nlscan.android.scansettings # 拷贝apk到可读写路径 cp /system/app/ScanSettings/ScanSettings.apk /sdcard/ScanSettings.apk # adb pull到本地 adb pull /sdcard/ScanSettings.apk D:temp adb查看当前activity 1 adb shell dumpsys activity |findstr ResumedActivity adb发广播 1 2 adb shell am broadcast -a $ACTION -p $PACKAGE --es $STRING_KEY $STRING_VALUE --ei $INT_KEY $INT_VALUE --el $LONG_KEY $LONG_VALUE adb查看相机参数 1 adb shell "dumpsys media.camera –v" >d:/metadata.txt adb跳转系统设置 1 adb shell am start com.android.settings/com.android.settings.Settings adb帮助文档 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 global options: -a listen on all network interfaces, not just localhost -d use USB device (error if multiple devices connected) -e use TCP/IP device (error if multiple TCP/IP devices available) -s SERIAL use device with given serial (overrides $ANDROID_SERIAL) -t ID use device with given transport id -H name of adb server host [default=localhost] -P port of adb server [default=5037] -L SOCKET listen on given socket for adb server [default=tcp:localhost:5037] general commands: devices [-l] list connected devices (-l for long output) help show this help message version show version num networking: connect HOST[:PORT] connect to a device via TCP/IP [default port=5555] disconnect [HOST[:PORT]] disconnect from given TCP/IP device [default port=5555], or all pair HOST[:PORT] [PAIRING CODE] pair with a device for secure TCP/IP communication forward --list list all forward socket connections forward [--no-rebind] LOCAL REMOTE forward socket connection using: tcp:<port> (<local> may be "tcp:0" to pick any open port) localabstract:<unix domain socket name> localreserved:<unix domain socket name> localfilesystem:<unix domain socket name> dev:<character device name> jdwp:<process pid> (remote only) vsock:<CID>:<port> (remote only) acceptfd:<fd> (listen only) forward --remove LOCAL remove specific forward socket connection forward --remove-all remove all forward socket connections ppp TTY [PARAMETER...] run PPP over USB reverse --list list all reverse socket connections from device reverse [--no-rebind] REMOTE LOCAL reverse socket connection using: tcp:<port> (<remote> may be "tcp:0" to pick any open port) localabstract:<unix domain socket name> localreserved:<unix domain socket name> localfilesystem:<unix domain socket name> reverse --remove REMOTE remove specific reverse socket connection reverse --remove-all remove all reverse socket connections from device mdns check check if mdns discovery is available mdns services list all discovered services file transfer: push [--sync] [-z ALGORITHM] [-Z] LOCAL... REMOTE copy local files/directories to device --sync: only push files that are newer on the host than the device -n: dry run: push files to device without storing to the filesystem -z: enable compression with a specified algorithm (any, none, brotli) -Z: disable compression pull [-a] [-z ALGORITHM] [-Z] REMOTE... LOCAL copy files/dirs from device -a: preserve file timestamp and mode -z: enable compression with a specified algorithm (any, none, brotli) -Z: disable compression sync [-l] [-z ALGORITHM] [-Z] [all|data|odm|oem|product|system|system_ext|vendor] sync a local build from $ANDROID_PRODUCT_OUT to the device (default all) -n: dry run: push files to device without storing to the filesystem -l: list files that would be copied, but don't copy them -z: enable compression with a specified algorithm (any, none, brotli) -Z: disable compression shell: shell [-e ESCAPE] [-n] [-Tt] [-x] [COMMAND...] run remote shell command (interactive shell if no command given) -e: choose escape character, or "none"; default '~' -n: don't read from stdin -T: disable pty allocation -t: allocate a pty if on a tty (-tt: force pty allocation) -x: disable remote exit codes and stdout/stderr separation emu COMMAND run emulator console command app installation (see also `adb shell cmd package help`): install [-lrtsdg] [--instant] PACKAGE push a single package to the device and install it install-multiple [-lrtsdpg] [--instant] PACKAGE... push multiple APKs to the device for a single package and install them install-multi-package [-lrtsdpg] [--instant] PACKAGE... push one or more packages to the device and install them atomically -r: replace existing application -t: allow test packages -d: allow version code downgrade (debuggable packages only) -p: partial application install (install-multiple only) -g: grant all runtime permissions --abi ABI: override platform's default ABI --instant: cause the app to be installed as an ephemeral install app --no-streaming: always push APK to device and invoke Package Manager as separate steps --streaming: force streaming APK directly into Package Manager --fastdeploy: use fast deploy --no-fastdeploy: prevent use of fast deploy --force-agent: force update of deployment agent when using fast deploy --date-check-agent: update deployment agent when local version is newer and using fast deploy --version-check-agent: update deployment agent when local version has different version code and using fast deploy (See also `adb shell pm help` for more options.) uninstall [-k] PACKAGE remove this app package from the device '-k': keep the data and cache directories debugging: bugreport [PATH] write bugreport to given PATH [default=bugreport.zip]; if PATH is a directory, the bug report is saved in that directory. devices that don't support zipped bug reports output to stdout. jdwp list pids of processes hosting a JDWP transport logcat show device log (logcat --help for more) security: disable-verity disable dm-verity checking on userdebug builds enable-verity re-enable dm-verity checking on userdebug builds keygen FILE generate adb public/private key; private key stored in FILE, scripting: wait-for[-TRANSPORT]-STATE... wait for device to be in a given state STATE: device, recovery, rescue, sideload, bootloader, or disconnect TRANSPORT: usb, local, or any [default=any] get-state print offline | bootloader | device get-serialno print <serial-number> get-devpath print <device-path> remount [-R] remount partitions read-write. if a reboot is required, -R will will automatically reboot the device. reboot [bootloader|recovery|sideload|sideload-auto-reboot] reboot the device; defaults to booting system image but supports bootloader and recovery too. sideload reboots into recovery and automatically starts sideload mode, sideload-auto-reboot is the same but reboots after sideloading. sideload OTAPACKAGE sideload the given full OTA package root restart adbd with root permissions unroot restart adbd without root permissions usb restart adbd listening on USB tcpip PORT restart adbd listening on TCP on PORT internal debugging: start-server ensure that there is a server running kill-server kill the server if it is running reconnect kick connection from host side to force reconnect reconnect device kick connection from device side to force reconnect reconnect offline reset offline/unauthorized devices to force reconnect usb: attach attach a detached USB device detach detach from a USB device to allow use by other processes environment variables: $ADB_TRACE comma-separated list of debug info to log: all,adb,sockets,packets,rwx,usb,sync,sysdeps,transport,jdwp $ADB_VENDOR_KEYS colon-separated list of keys (files or directories) $ANDROID_SERIAL serial number to connect to (see -s) $ANDROID_LOG_TAGS tags to be used by logcat (see logcat --help) $ADB_LOCAL_TRANSPORT_MAX_PORT max emulator scan port (default 5585, 16 emus) $ADB_MDNS_AUTO_CONNECT comma-separated list of mdns services to allow auto-connect (default adb-tls-connect)

2024-09-25 · 3 分钟 · 1393 字 · lixb