JAVA関連のことを調べてみた

JAVA関連のことを調べてみた

【学習メモ】SQS拡張クライアントライブラリとは

# SQS拡張クライアントライブラリとは
・通常のSQSキューのデータサーズ制限は**256KB**だが、運用上それを超えたい場合の対応法である

・大量のAmazon SQSメッセージを管理するには、Amazon S3とJava 用SQS拡張クライアントライブラリを使用することで、**2GB**までのサイズのメッセージを保存および処理ができるようになる
 →AWS Java SDKが必要(プログラミングを作る必要がある)

・イメージとして、メッセージの保管場所を本来の狭いパイプ(SQSキュー)から広い貯水槽(S3)に変える
 →常にS3に保存するか、サイズが256KBを超える場合のみ保存するかを指定できる

# 参考サイト
https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-s3-messages.html

https://zenn.dev/hi_ka_ru/articles/a516af8bfc4457

元記事を表示

javaのTLAB,jps,jstat,jinfoについて

## TLAB
Javaの小さなオブジェクトは、TLAB (Thread Local Area Buffer)に割り当てられます。TLABは、新しいオブジェクトが割り当てられている小さなメモリー領域です。TLABが一杯になると、スレッドが新しいものを取得します。
## jps
jps ツールは、ターゲットシステム上で計測された HotSpot Java 仮想マシン (JVM) を一覧表示します。このツールで表示できるレポート情報は、アクセス権を持った JVM に関するものに限定されます。
## jstat
jstatコマンドは、設置されているJava HotSpot VMのパフォーマンス統計情報を表示します。 ターゲットJVMは、仮想マシン識別子またはvmidオプションによって識別されます。
## jinfo
指定されたJavaプロセスに関するJava構成情報を出力します。 構成情報は、Javaシステム・プロパティとJVMコマンド行フラグで構成されます。
## 実装確認
サンプルコード
“`java
public class TLABTest {

public static v

元記事を表示

形式記述言語VDM++の制御構文(call文)をJava C# Re:Mind(自作言語)と比較

# はじめに
要求仕様記述段階での使用が主に想定されている数学的形式手法VDM(Vienna Development Method)[^1]のオブジェクト指向拡張言語VDM++ですが、ロジックの実装も記述できる構文が用意されています。本記事ではVDM++の制御構文(call文)をJavaとC#そして自作言語のRe:Mind[^2] と比較してみます。

## この記事内容の作業目的
VDM++の下記の制御構文[^3][^4]についていくつかの記事に分割して比較検討します。クラスの定義構文についてはこちらの記事[^5]を参照することができます。

・ブロック文
・コメント文
・代入文
・条件文
・ループ文
・**call文** ←本記事対象
・return文
・例外

VDM++はオブジェクト指向言語的な言語要素を持ち、数学的形式手法言語の中では一般のプログラミング言語のオブジェクト指向言語に近い面があります。また、VDMのような数学的形式手法を使わない場合は、一般的に自然言語の日本語で要求仕様が記述されているものと推察されます。本記事では数学的形式手法と自然言語の日本語記述とのはざまで

元記事を表示

形式記述言語VDM++の制御構文(代入文)をJava C# Re:Mind(自作言語)と比較

# はじめに
要求仕様記述段階での使用が主に想定されている数学的形式手法VDM(Vienna Development Method)[^1]のオブジェクト指向拡張言語VDM++ですが、ロジックの実装も記述できる構文が用意されています。本記事ではVDM++の制御構文(代入文)をJavaとC#そして自作言語のRe:Mind[^2] と比較してみます。

## この記事内容の作業目的
VDM++の下記の制御構文[^3][^4]についていくつかの記事に分割して比較検討します。クラスの定義構文についてはこちらの記事[^5]を参照することができます。

・ブロック文
・コメント文
・**代入文** ←本記事対象
・条件文
・ループ文
・call文
・return文
・例外

VDM++はオブジェクト指向言語的な言語要素を持ち、数学的形式手法言語の中では一般のプログラミング言語のオブジェクト指向言語に近い面があります。また、VDMのような数学的形式手法を使わない場合は、一般的に自然言語の日本語で要求仕様が記述されているものと推察されます。本記事では数学的形式手法と自然言語の日本語記述とのはざまで、構

元記事を表示

デザインパターン Proxyパターン

# Proxyパターン
特定のオブジェクトに対するアクセスや操作を、Proxy(代理)オブジェクトを介して行う方法。

Decorator パターンに似ている。

Decorator パターンが、既存のオブジェクトに対して透過的に新たな振る舞い、責務を追加することを目的としているのに対して、Proxy パターンは**アクセス制御を主な目的としている**。

また、Decorartor パターンではオブジェクトが何重にもラップされることがあるのに対して、Proxy パターンでは通常オブジェクトが何重にも重ねてラップされることはない。

ただし、Proxy パターンは、アクセス制御以外にも様々な目的で利用できる。

## 利用場面

#### アクセス制御・保護プロキシ
アクセス制御や権限管理に利用される。
Proxy を介入させることで、特定のユーザーに対してのみアクセスを許可し、他のユーザーからのアクセスに制限をかけることができる。

#### リモートアクセス制御・リモートプロキシ
Proxy が(リモート)サーバー上に存在するオブジェクトにアクセスするための手段として利用される。

元記事を表示

android studio 覚書 (お題 2:スレッド処理の実装)

## お題 2:スレッド処理の実装

### 2-1. イメージ

下記のように、ボタンを押すと時刻が更新される画面を実装する。
この時、画面が操作不能にならないこと。
![Test.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723869/f927f5e4-b38a-c48f-0fc0-584870248c00.gif)

### 2-2. 実装
実装したコードは下記の通り。

“`java:全容
package com.example.helloworld;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.Looper;
import android.os.Handler;

import android.view.View;
import android.widget.Button;
import android.widget.TextVie

元記事を表示

AOJ ITP1 8-C Counting Characters

これは、文字列を受け取ろうとしたら複数行で来ることもあるといわれてわからず詰んだ。
終了条件がわからないと8-Bのように0の時breakするみたいなこともできない。
単体だったら、受け取った文字列を順番に確認していけばよさそう。…aからzの確認ってどうやるんだ。
これまでの感じだと、char型を利用するのかな。for文をint i=0で回して+97すればアルファベットになる?
でも、その前の受け取りがわからないので、すぐに回答を見た。

# 回答
~~~java:Main.java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[] alf = new int[26];
while (scan.hasNext()) {
String str = scan.next().toLowerCase();
for (int i=0;i

元記事を表示

AOJ ITP1 8-B Sum of Numbers

8-Aで文字列をバラバラにした次は数値をバラバラにする問題だった。
バラバラにした各桁を足し合わせて表示する。
chatAtを使おうと思ったけど、数値型で受け取っているせいでうまくいかなかった。
回答を参考にして作り直した。
~~~java:Main.java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (true) {
int sum = 0;
String num = scan.nextLine();
if (num.equals(“0”)) break;
int numLen = String.valueOf(num).length();
for (int i=0;i

元記事を表示

android studio 覚書 (お題 1:ボタンを押してテキストを更新する)

## お題 1:ボタンを押してテキストを更新する

### 1-1. イメージ

下記のような画面を実装する。

ボタン押下前
![スクリーンショット 2023-11-18 203537.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723869/38afe4b7-8f35-a5a6-ba75-ab7c9a1c2a60.png)

ボタン押下後
![スクリーンショット 2023-11-18 203600.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723869/eaf14ee9-8385-2139-006e-af87f23dafb8.png)

### 1-2. 実装
実装したコードは下記の通り。
MVC ModelのC(Controller)に該当する部分?
V(View)はxmlファイルの画面定義、M(Model)は…?

“`java
package com.example.helloworl

元記事を表示

形式記述言語VDM++の制御構文(return文)をJava C# Re:Mind(自作言語)と比較

# はじめに
要求仕様記述段階での使用が主に想定されている数学的形式手法VDM(Vienna Development Method)[^1]のオブジェクト指向拡張言語VDM++ですが、ロジックの実装も記述できる構文が用意されています。本記事ではVDM++の制御構文(return文)をJavaとC#そして自作言語のRe:Mind[^2] と比較してみます。

## この記事内容の作業目的
VDM++の下記の制御構文[^3][^4]についていくつかの記事に分割して比較検討します。クラスの定義構文についてはこちらの記事[^5]を参照することができます。

・ブロック文
・コメント文
・代入文
・条件文
・ループ文
・call文
・**return文** ←本記事対象
・例外

VDM++はオブジェクト指向言語的な言語要素を持ち、数学的形式手法言語の中では一般のプログラミング言語のオブジェクト指向言語に近い面があります。

Re:MindはJavaやC#の経験者向けに設計された日本語プログラミング言語の一種で、ロジック仕様記述言語とトランスコンパイラ言語とで言語仕様を共有しています。

VDM

元記事を表示

形式記述言語VDM++の制御構文(cases文)をJava C# Re:Mindの(switch文)と比較

# はじめに
要求仕様記述段階での使用が主に想定されている数学的形式手法VDM(Vienna Development Method)[^1]のオブジェクト指向拡張言語VDM++ですが、ロジックの実装も記述できる構文が用意されています。本記事ではVDM++の制御構文(cases文)をJavaとC#そして自作言語のRe:Mind[^2] (switch文)と比較してみます。

## この記事内容の作業目的
VDM++の下記の制御構文[^3][^4]についていくつかの記事に分割して比較検討します。

・ブロック文
・代入文
・**条件文** ←本記事対象
・ループ文
・call文
・return文
・コメント文
・例外

VDM++はオブジェクト指向言語的な言語要素を持ち、数学的形式手法言語の中では一般のプログラミング言語のオブジェクト指向言語に近い面がありますが、かなり別物という面もあります。また、VDMのような数学的形式手法を使わない場合は、一般的に自然言語の日本語で要求仕様が記述されているものと推察されます。本記事では数学的形式手法と自然言語の日本語記述とのはざまで、構造化された日本語

元記事を表示

レコードとかswitch式とかパターンマッチとかテキストブロックとかその辺のまとめ

Java 11 から Java 21 までの間に追加された以下の言語仕様について、一通り正式採用されたっぽくて LTS も出たので整理する。

– switch式
– テキストブロック
– Pattern Matching for instanceof
– レコードクラス
– シールクラス
– レコードパターン
– Pattern Matching for switch

# 環境
“`text
> java –version
openjdk 21.0.1 2023-10-17 LTS
OpenJDK Runtime Environment Temurin-21.0.1+12 (build 21.0.1+12-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.1+12 (build 21.0.1+12-LTS, mixed mode, sharing)
“`

# 各言語仕様の正式採用バージョン整理

|バージョン|正式採用された言語仕様|
|———|——-|
|11 | |
|12 | |
|13 | |
|14 |swi

元記事を表示

Spring ContainerにSpring Beanを手動で登録する方法(@Bean)

1. AppConfig.javaに @Configuration, @Bean annotationをつける。
“`jsx
package hello.hellospring;

@Configuration
public class AppConfig {

@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}

@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}

@Bean
public MemberRepository member

元記事を表示

WebClientを用いての外部APIの呼び出し方

Java SpringBoot内でのWebClientを用いての外部APIの呼び出し方

※共通は各通信の場合で呼ばれているメソッド

(共通)
“`java:WebClientInfo.java
public WebClient webClient;

public WebClientInfo(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder.baseUrl(“http://localhost:8082”).build();
}
“`

## (GET通信の場合) ※クエリパラメータ方式の場合
“`java:WebClientInfo.java

public 【戻りの型】 メソッド名(値1, 値2) {
return this.webClient.get()
.uri(uriBuilder -> uriBuilder
.path(“/【UR

元記事を表示

javaガベージ・コレクタとOutOfMemoryError

## ヒープ領域とは
JVMがプログラム実行時に確保するメモリ領域のうち、実行時に生成するオブジェクトのために割り当てられる領域をヒープ領域といいます。
## ガベージ・コレクタとは
ガベージ・コレクタ(GC)は、アプリケーションの動的メモリー割当てリクエストを自動的に管理します。
Java HotSpotガベージ・コレクションでは、様々な技術を採用して、これらの操作の効率性を改善します。
– 世代別のスカベンジをエージングとともに使用して、再利用可能で大きなメモリー領域が含まれている可能性のあるヒープ内の領域に集中します。
– 複数のスレッドを使用して、並列操作をアグレッシブに実行するか、アプリケーションと同時にバックグラウンドで長時間かかる操作を実行します。
– ライブ・オブジェクトを圧縮することで、連続的な大きな空きメモリーのリカバリを試行します。
## OutOfMemoryError
メモリー不足のためにJava Virtual Machineがオブジェクトを割り当てることができず、ガベージ・コレクタによっても使用可能なメモリーをこれ以上確保できない場合にスローされます。まる

元記事を表示

Java仮想マシンのメモリー

## Runtime
JavaアプリケーションはすべてRuntimeクラスの単一のインスタンスを持ちます。このクラスは、アプリケーションとアプリケーション実行環境とのインタフェースになります。現在のRuntimeオブジェクトは、getRuntimeメソッドにより取得できます。
– public long totalMemory()
Java仮想マシンのメモリーの総容量を返します。ホストの環境によっては、このメソッドによって返される値が時間とともに変化する場合があります。
任意の指定された型のオブジェクトを格納するのに必要なメモリー容量は、実装によって異なります。
戻り値:
現在および将来のオブジェクトに利用可能な現在のメモリーの総容量(バイト単位)。
– public long maxMemory()
Java仮想マシンが使用を試みる最大メモリー容量を返します。固有の制限が存在しない場合、値Long.MAX_VALUEが返されます。
戻り値:
仮想マシンが使用を試みる最大メモリー容量(単位はバイト)
## ソースコードで確認
“`java
public class HeapTest

元記事を表示

「Hello World」を出力するコードが分からない4年目エンジニア

エンジニア4年目にしてJavaをまともに勉強したことのない筆者です。
自社開発でJavaを使うことになったので勉強していますが、さっそく壁にぶつかったのでまとめてみました!

# 1.「Hello World」出力じゃ!!

PHPでHello World出力しよーっと
うん!見てわかるぞ!以前PHPを使った仕事してたからね!

“`php:php




“`

次はJavaだ!

“`java:java
public class Main {
public static void main(String[] args) {
System.out.println(“Hello World”);
}
}
“`

いやいやいや長いて。
書いてあることからよくわからんし。
System~~~~の部分で出力するのは分かるけども。

初めてみるJavaのコードは呪文だったのでひとつ

元記事を表示

javaのstackoverflowerrorとスタックサイズ

## javaのstackoverflowerror
アプリケーションでの再帰の回数が多すぎてスタックオーバーフローが起こる場合に、StackOverflowErrorがスローされます。
“`java
public class StackOverFlowTest {
private static int count = 1;
public static void main(String[] args) {

System.out.println(count);
count++;
main(args);

}
}
“`
スタック・サイズを200kに指定して実施します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3184769/4aeb26e7-a673-99a4-de53-3f6d72e50b60.png)

“`
2452
2453
2454
2455
Exception in thread “main” java.lang.StackOver

元記事を表示

demo

“`java:demo.java

@RequestMapping(value = “/user/create”, method = RequestMethod.POST)
public String create(@Validated @ModelAttribute UserRequest userRequest, BindingResult result, Model model) {
if (result.hasErrors()) {
List accountNameErrors = new ArrayList<>();
List loginIdErrors = new ArrayList<>();
List passwordErrors = new ArrayList<>();

for (ObjectError error : result.getAllErrors()) {
String defaultMessage = Obj

元記事を表示

Control

“`java:Control.java

@RequestMapping(value = “/user/create”, method = RequestMethod.POST)
public String create(@Validated @ModelAttribute UserRequest userRequest, BindingResult result, Model model) {
if (result.hasErrors()) {
List errorList = new ArrayList<>();
for (ObjectError error : result.getAllErrors()) {
String defaultMessage = Objects.requireNonNull(error.getDefaultMessage());
String errorMessage = messageSou

元記事を表示

OTHERカテゴリの最新記事