Cuando pensamos en tipos primitivos (int, double, boolean, char), solemos imaginar algo simple, de bajo nivel, como si fueran bits puros sin magia.
Pero en Java, los primitivos son todo menos simples.
Desde el principio, Java separó los tipos primitivos de los objetos para garantizar rendimiento predecible:
Acceso directo en memoria, sin sobrecarga del heap ni del Garbage Collector.
Pero esa decisión trajo una consecuencia: los primitivos no pueden formar parte del sistema de tipos de objetos.
No pueden tener métodos, no pueden ser genéricos, no pueden participar en colecciones sin un wrapper.
Justamente por eso existen los wrappers: Integer, Double, Boolean, etc.
Pero al introducirlos, entramos en un terreno donde la JVM hace trabajo extra sin que lo notes, el famoso autoboxing y unboxing.
Cada vez que pasas un int a una lista, se convierte en un Integer.
Cada vez que comparas un Integer con un int, la JVM tiene que convertirlos de nuevo.
Esas pequeñas conversiones implican asignaciones en el heap y trabajo del Garbage Collector.
Y en aplicaciones intensivas, ese “detalle” puede costar mucho rendimiento.
Aun así, la historia no termina ahí.
Con Project Valhalla, Java está evolucionando para eliminar esa brecha entre primitivos y objetos, introduciendo los Value Objects.
Tipos que se comportan como objetos, pero se almacenan como valores.
Sin punteros, sin boxeo, sin la penalización de memoria.
los tipos primitivos de Java no son tan primitivos como parecen, y en el futuro, probablemente dejarán de serlo por completo.
Reflector is a Kubernetes addon designed to monitor changes to resources (secrets and configmaps) and reflect changes to mirror resources in the same or other namespaces
➜ https://t.co/HFdrh9pfek
this project stores millions of text chunks inside a video file (mp4)
then runs sub-second semantic search on it
- no vector DB, no servers
- uses 10x less RAM & storage
- no internet required
it's called Memvid and it just broke my brain
Spring Framework 7.0.0 M4 is now available!
key improvements include:
- API versioning support in web applications: server web applications can map version-specific routes to different controller methods by declaring a version range in @RequestMapping annotations. Versions can be resolved from multiple sources, like the request URL path, a header value, etc.
- declarative HTTP interface clients: `HttpServiceProxyFactory` is easy, but it's not declarative like the corresponding feature in Spring Cloud was. After a _lot_ of revision, there's now a more declarative approach
- programatic bean registration: https://t.co/PI32YEK7s3
- `Optional` to `Object` converter: use it to unwrap `Optional<T>` expressions to `T` in a Spring Expression Language expression
- class file api usage for java+24 apps: Spring Framework will now dynamically use the new Class-File API in Java 24 for metadata behind the scenes. This should be completely transparent to typical Spring users, however
get the bits now!
https://t.co/HGoyz39lm4
"El auge silencioso de SQLite en producción"
Mientras todos corren hacia soluciones distribuidas y complejas, una base de datos embebida, liviana y confiable está volviendo a ganarse su lugar.
🧵 Por qué SQLite está más viva que nunca (y por qué eso importa):
🚀 Day 5 of #OpenSourceWeek: 3FS, Thruster for All DeepSeek Data Access
Fire-Flyer File System (3FS) - a parallel file system that utilizes the full bandwidth of modern SSDs and RDMA networks.
⚡ 6.6 TiB/s aggregate read throughput in a 180-node cluster
⚡ 3.66 TiB/min throughput on GraySort benchmark in a 25-node cluster
⚡ 40+ GiB/s peak throughput per client node for KVCache lookup
🧬 Disaggregated architecture with strong consistency semantics
✅ Training data preprocessing, dataset loading, checkpoint saving/reloading, embedding vector search & KVCache lookups for inference in V3/R1
📥 3FS → https://t.co/JRZ2eYk1aK
⛲ Smallpond - data processing framework on 3FS → https://t.co/BoUA6YNjZK
I spoke to 100+ mobile devs about app monitoring. They all say finding the root cause means jumping between too many tools and dashboards.
So, we built Measure—an open-source, self-hosted tool to find patterns and pinpoint the root cause.
Check it out: https://t.co/ov6j09QZiI
Reloader is a Kubernetes controller that monitors changes in ConfigMap and Secrets and triggers rolling upgrades on Pods with their associated Deployment, StatefulSet or DaemonSet
➜ https://t.co/nZxeilRUuJ
🚀 Spring Tip 🚀
TransactionalEventListener
Use @TransactionalEventListener to execute specific logic after a transaction is successfully committed. 🔥
https://t.co/TglmI72Yl7
#Spring#Java
TIL: Using Java ZGC on Linux can cause RSS to report ~3x memory usage due to multi-mapping. This is a problem with Kubernetes memory limits since containers may be incorrectly OOM killed (exit code 137). More details in @AndreiPangin's SO answer: https://t.co/lPXnkk6TDR
This is your yearly reminder that you should not use the system/wall clock (Java: System.currentTimeMillis()) to measure duration. Here's why:
https://t.co/Bpx84HIsXD