前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >maven命令行下载依赖包&java命令执行class

maven命令行下载依赖包&java命令执行class

作者头像
书唐瑞
发布2022-06-02 14:20:32
1.4K0
发布2022-06-02 14:20:32
举报
文章被收录于专栏:Netty历险记Netty历险记

01

场景和需求

在Linux系统下, 没有第三方的集成开发工具(如IDEA), 如何下载Jar包, 以及如何运行.java文件.

解决步骤 首先在你的系统上已经配置好了maven环境和Java环境.

如何配置此处就不介绍了, 属于基础操作

此处以下载netty为例

在官网 https://mvnrepository.com/ 查找需要下载的依赖包的groupId等, 比如本篇以下载4.1.63.Final版本netty为例

代码语言:javascript
复制
<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.1.63.Final</version>
</dependency>

于是, 使用mvn命令下载

代码语言:javascript
复制
mvn dependency:get -DremoteRepositories=http://repo1.maven.org/maven2/ -DgroupId=io.netty -DartifactId=netty-all -Dversion=4.1.63.Final

稍等片刻, 就会下载成功.

源文件内容

代码语言:javascript
复制
// Allocator.java

package com.infuq;

import io.netty.buffer.PooledByteBufAllocator;
import io.netty.buffer.PooledUnsafeDirectByteBuf;

public class Allocator {

    public static void main(String[] args) {

        PooledByteBufAllocator allocator = PooledByteBufAllocator.DEFAULT;
        // 申请堆外空间
        PooledUnsafeDirectByteBuf byteBuf = (PooledUnsafeDirectByteBuf) allocator.directBuffer(2048);

        // 内存地址
        long address = byteBuf.memoryAddress();
        System.out.println("Address:0x" + Long.toHexString(address));

    }
}

目录结构如下

编译Java源文件

代码语言:javascript
复制
// Linux系统
javac -d . -classpath ".:./lib/*"  Allocator.java

// Windows系统
javac -d . -classpath ".;./lib/*"  Allocator.java

编译之后的目录结构

执行

代码语言:javascript
复制
// Linux系统
java -classpath ".:./lib/*" com.infuq.Allocator

// Windows系统
java -classpath ".;./lib/*" com.infuq.Allocator

这里需要说明一点的是, 在使用javac和java命令的时候, 在指定-classpath, 如果是Linux系统, 那么使用:分隔目录, 如果是Windows系统, 那么使用;分隔目录.

以上就是本篇要说的主要内容, 顺便再说下, 代码本身的含义是Netty申请一个堆外空间, 并打印地址.

Netty之线程唤醒wakeup文章中, 提到了如何追踪系统调用. 在这里也使用strace命令追踪下Netty底层调用的内存分配的系统调用是哪个.

打印的内容是Address:0x7fab46fff010

使用grep搜索这个地址0x7fab46fff010

除了正常的打印之外, 并没有看到多余的内存申请的系统调用方法

使用grep搜索0x7fab46f(减少了0x7fab46fff010最后面的5个数字), 结果如下

使用的系统调用是mmap申请内存空间.

但是mmap返回的地址是0x7fab46fff000.

而Netty返回给应用的地址是0x7fab46fff010. 相差0x10, 这并不是巧合, 是什么原因呢? 在后面讲解Netty内存分配的时候细说.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Netty历险记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档